获取执行计划之 10046 事件
10046
10046 事件可以得到 Oracle 内部执行系统解析、调用、等待、绑定变量等详细的信息,可以帮助我们解析一条/多条 SQL、PL/SQL 语句的运行状态,这些状态包括:Parse/Fetch/Execute 三个阶段中遇到的等待事件、消耗的物理和逻辑读、CPU 时间、执行计划等,还能帮我们分析一些 DDL 维护命令的内部工作原理,RMAN、Data Pump Expdp/impdp 等工具缓慢问题。
执行步骤
方法一
激活 10046 事件
1
alter session set events '10046 trace name context forever,level 12';
执行目标 SQL
1
select * from emp;
查看生成的 trace 文件
1
select distinct(m.sid),p.pid,p.tracefile from v$mystat m,v$session s,v$process p where m.sid=s.sid and s.paddr=p.addr;
关闭 10046 事件
1
alter session set events '10046 trace name context off';
切换 cmd,tkprof 命令规范文件格式
1
tkprof D:\11G\APP\ORACLE\diag\rdbms\xe\xe\trace\xe_ora_5140.trc E:\xe_ora_5140.trc
方法二
激活 10046 事件
1
2oradebug setmypid
oradebug event 10046 trace name context forever,level 12;执行目标 SQL
1
select * from emp;
查看生成的 trace 文件
1
oradebug tracefile_name
关闭 10046 事件
1
oradebug event 10046 trace name context forever,level 12;
切换 cmd,tkprof 命令规范文件格式
1
tkprof D:\11G\APP\ORACLE\diag\rdbms\xe\xe\trace\xe_ora_5140.trc E:\xe_ora_5140.trc
优缺点
- 优点
- 可以看出 sql 语句对应的等待事件
- 函数调用也会被列出
- 可以方便的看处理的行数,产生的逻辑物理读
- 可以方便的看解析时间和执行时间
- 可以跟踪整个程序包
- 缺点
- 步骤繁琐
- 无法判断表被访问了多少次
- 执行计划中的谓词部分不能清晰的展现出来
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 宸汐缘!
评论