快速得到SQL带A-Time时间的执行计划的小技巧
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,快速得到SQL带A-Time时间的执行计划的小技巧使用spool把结果输出到文件,然后直接去文件查看执行计划即可得到带时间的执行计划的方法有两种:1、在会话设置参数statistics_level=a
千家信息网最后更新 2025年11月09日快速得到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安全错误
数据库的锁怎样保障安全
pg数据库德哥
紫光云 软件开发笔试
唯品会供应商月销售数据库
服务器运行程序更稳定吗
服务器挂耳是干什么用的
网络安全责任台账
db2数据库用户怎么看
软件开发营销成本做账
网络安全公车改革
原舟互联网科技有限公司
人社数据库间同步数据内容
服务器暴露在外网的安全隐患
网络安全 模拟实验
网络安全之我见
吴江区知名服务器代理厂家
安徽新一代软件开发服务推广
迁安追梦软件开发
数据库技术主要研究
ipv6的ntp服务器
2kmc数据库
我的世界急需管理员的服务器
两个数据库同步数据接口的设计
数据库表跟表怎样连接
防网络安全征文
河北软件开发公司有哪些
江苏人工智能软件开发定制费用
正规网络技术服务行业标准
华为计算网络技术部
重庆市万州网络安全职业学校
恐惧饥荒服务器垃圾