oracle获取执行计划的方法

跟这罗老师学

一、获取执行计划的方法
1.DISPLAY_CURSOR方法(真实)
dbms_xplan.display_cursor('sql_id',   child number,   format)  

--child number如果置为NULL,则返回所有子游标的执行计划
--format的格式如下:推荐格式为 'ADVANCED ALLSTATS LAST PEEKED_BINDS'
IOSTATS:显示该游标累计执行的IO统计信息(Buffers, Reads) 
MEMSTATS:累计执行的PGA使用信息(Omem 1Mem Used-Mem)
ALLSTATS:OSTATS + MEMSTATS
Advanced:显示outline、Query Block Name、 Column Projection等信息
Typical:不打印PROJECTION, ALIAS
PEEKED_BINDS:打印解析时使用的绑定变量
LAST:仅显示最后一次执行的统计信息

建议步骤:
(1)
alter session set STATISTICS_LEVEL = ALL;  --会话级别     (调试的时候可以设置会话级别的)
(2)相同会话执行业务查询语句,并获取sql_id
(3)获取执行计划
select * from table(dbms_xplan.display_cursor('sql_id ',null,'advanced allstats last peeked_binds'));

说明:
当statistics_level设置为typical时也是默认值时,oracle会自动收集用于自我管理和提供最佳性能的重要统计数据。这个值适用于大部分环境。
当statistcs_lever设置为 all时,oracle不但会收集typical的数据,并且在其基础上加上 操作系统定时统计数据,和执行计划。 所以对于问题的诊断,建议在会话级别设置为all
当statistics_lever设置为basic时,oracle不会收集很多重要特性数据,对于性能优化等诊断将会产生重大影响 


优点:能显示谓词信息,可以输出更为详细的信息
缺点:具有时效性,仅支持在v$sqlarea中还存在的sql_id


2.DISPLAY_AWR (真实)
select * from table(dbms_xplan.display_awr('sql_id', format=>'all'));
更全的信息:
select * from table(dbms_xplan.display_awr('sql_id',null,null, 'advanced allstats last peeked_binds')  )

优点:在快照期内可用,比DISPLAY_CURSOR方法时间长
缺点:不能显示谓词信息


3.SQL TRACE (真实) 
当前session :
SQL> alter session set tracefile_identifier='my20210426';
SQL> alter session set sql_trace=true;
SQL> 执行sql
SQL> alter session set sql_trace=false;
会在trace目录下(警告日志所在目录)生成跟my20210426相关的trace文件

4.10046事件(真实)
当前session:
SQL> alter session set tracefile_identifier='my10046';
SQL> alter session set events '10046 trace name context forever, level 12';
SQL> 执行sql
SQL> alter session set events '10046 trace name context off';
会在trace目录下(警告日志所在目录)生成跟my10046相关的trace文件


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值