快速得到SQL带A-Time时间的执行计划的小技巧
发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,快速得到SQL带A-Time时间的执行计划的小技巧使用spool把结果输出到文件,然后直接去文件查看执行计划即可得到带时间的执行计划的方法有两种:1、在会话设置参数statistics_level=a
千家信息网最后更新 2024年11月22日快速得到SQL带A-Time时间的执行计划的小技巧
快速得到SQL带A-Time时间的执行计划的小技巧
使用spool把结果输出到文件,然后直接去文件查看执行计划即可
得到带时间的执行计划的方法有两种:
1、在会话设置参数statistics_level=all
alter session set statistics_level=all;执行SQLselect * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
2、在语句中使用hint(/*+ gather_plan_statistics */),然后查出这个SQL的SQL_ID,然后再去查询执行计划
执行SQLselect /*+ gather_plan_statistics */ count(*) from test;查询SQL的SQL_IDselect sql_id,sql_text from v$sql where sql_text like '%/*+ gather_plan_statistics */%';查看执行计划select * from table(dbms_xplan.display_cursor('sql_id',null,'allstats'));
以上的两种方式都可以得到带时间的执行计划。
但是用这样的方式去查看执行计划,有一个弊端:必须等到SQL语句的全部的记录在屏幕输出,然后才可以查看执行计划。
为了不需要等待SQL执行完,然后才可以查看执行计划;以及不需要在屏幕输出SQL的执行结果刷屏,
可以采用把SQL的结果以及执行计划输出到文件,然后去文件查看执行计划。
!!!注意:!!!
使用spool把结果输出到文件,是把查询结果输出到文件,包含真实的数据,因此需要慎重考虑,
是否可以采取这样的方式进行查询。
测试:
需要查看一条SQL的带时间的执行计划
方法1、
设置会话参数alter session set statistics_level=all;执行SQLselect /*+ index(t1 idx_t1_c1) */* from t1 where c1 <= 90000;需要等待执行完SQL,然后才可以查询查看执行计划select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
方法2、
执行带hint的SQLselect /*+ gather_plan_statistics index(t1 idx_t1_c1) */* from t1 where c1 <= 90000;需要等待执行完SQL查询该SQL对应的SQL_IDselect sql_id,sql_text from v$sql where sql_text like '%/*+ gather_plan_statistics */%';查看执行计划(根据这条SQL的SQL_ID查询)select * from table(dbms_xplan.display_cursor('sql_id',null,'allstats'));
方法3、
先编写脚本
vi test.sqlset line 200 pages 999set timing onset termout offspool /home/oracle/test.txtalter session set statistics_level=all;select /*+ index(t1 idx_t1_c1) */* from t1 where c1 <= 90000;select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));spool off-----------参数解释:set line 200 pages 999 设置输出格式set timing on设置时间set termout off设置不让脚本的内容在屏幕输出spool /home/oracle/test.txt 打开spool;并且设置输出文件的位置以及名称spool off关闭spool,否则会一直把sqlplus里的内容写道test.txt文件中登录到sqlplussqlplus / as sysdba(或者执行该SQL的用户)执行该脚本@/home/oracle/test.txt查看文件中的执行计划90000 rows selected.Elapsed: 00:00:25.90PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID caumajpb0jz24, child number 1 ------------------------------------- select /*+ index(t1 idx_t1_c1) */* from t1 where c1 <= 90000 Plan hash value: 4200789634 ------------------------------------------------------------------------------------------------------------ | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | ------------------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 1 | | 90000 |00:00:14.07 | 456K| 315K| | 1 | TABLE ACCESS BY INDEX ROWID| T1 | 1 | 90001 | 90000 |00:00:14.07 | 456K| 315K| |* 2 | INDEX RANGE SCAN | IDX_T1_C1 | 1 | 90001 | 90000 |00:00:00.08 | 6187 | 0 | ------------------------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("C1"<=90000) 19 rows selected.Elapsed: 00:00:00.08
等执行完毕去查看该文件即可,在文件最低端可以看到执行计划,省去了中间刷屏的时间,
但是产生了一个带有数据的文件,当记录很多时,最好不要使用,
此方法只作为小技巧,需要看具体情况去判断是否使用该方法。
文件
输出
查询
时间
方法
结果
参数
屏幕
方式
脚本
技巧
内容
数据
语句
位置
低端
名称
弊端
情况
最好
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
职业规划确定目标软件开发
所有数据库服务器数据同步
ob11数据库工具
网络安全第一次会议提出
网络安全证书有哪个
嘉定区常规网络技术质量
无锡华勤软件开发工资
meccanica数据库
无代码软件开发平台哪个好
不属于网络安全基础
惠普服务器高级内存保护模式
广东工业服务器及存储虚拟主机
如何看服务器系统
中国人民大学调查数据库
数据库打开索引
象山安卓软件开发管理
it软件开发销售电话
大数据的数据库在哪
网络安全设备安装教程
网络安全产业未来发展
it桔子数据库
京东服务器特价
服务器自动断开网络需重启
网络安全技术28743
怎么建立标准化数据库
计算机二级网络技术基础视频
做软件开发 还是销售
数据库一般大几学
网络安全防护体系遵守的原则
网络安全问题xxs等