快速得到SQL带A-Time时间的执行计划的小技巧
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,快速得到SQL带A-Time时间的执行计划的小技巧使用spool把结果输出到文件,然后直接去文件查看执行计划即可得到带时间的执行计划的方法有两种:1、在会话设置参数statistics_level=a
千家信息网最后更新 2025年01月23日快速得到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安全错误
数据库的锁怎样保障安全
html清空数据库
数据库可以改等级吗
服务器存储与管理软件
计算机软件开发信标题
国企网络安全工程师招聘
计算机专业要学软件开发吗
关系数据库包括
京津冀数据库建设情况
部队手机网络安全教育教案免费
育苗网络安全视频
什么是网络安全准入控制系统
asp.net使用数据库
北京oa软件开发服务
加强网络安全工作制度建设
服务器画图工具
透析办公室的网络安全吗
软件开发有多累
软件开发公司毛利率
奉贤区口碑好的软件开发怎么样
discuz数据库查询
网络安全妈妈同行
做金融软件开发的必备知识
什么叫服务器编程
组态王与数据库操作
京津冀数据库建设情况
福山租房软件开发
国家网络安全博览会安排
网络安全小学手抄报
sql 2005 数据库
数据库选型与服务平台建设之路