获取执行计划之10046事件_SQL

浅析10046获取执行计划之10046事件_数据库_02

获取执行计划之10046事件_SQL_0310046事件可以得到Oracle内部执行系统解析、调用、等待、绑定变量等详细的信息,可以帮助我们解析一条/多条SQL、PL/SQL语句的运行状态,这些状态包括:Parse/Fetch/Execute三个阶段中遇到的等待事件、消耗的物理和逻辑读、CPU时间、执行计划等,还能帮我们分析一些DDL维护命令的内部工作原理,RMAN、Data Pump Expdp/impdp等工具缓慢问题

执行步骤

 

方法一

 

激活10046事件

获取执行计划之10046事件_数据库_04获取执行计划之10046事件_数据库_05

 

alter session set events '10046 trace name context forever,level 12';

 

执行目标SQL

获取执行计划之10046事件_数据库_04获取执行计划之10046事件_数据库_05

 

select * from emp;

 

查看生成的trace文件

获取执行计划之10046事件_数据库_04获取执行计划之10046事件_数据库_05

 

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事件

获取执行计划之10046事件_数据库_04获取执行计划之10046事件_数据库_05

 

alter session set events '10046 trace name context off';

 

切换cmd,tkprof命令规范文件格式

获取执行计划之10046事件_数据库_04获取执行计划之10046事件_数据库_05

 

tkprof D:\11G\APP\ORACLE\diag\rdbms\xe\xe\trace\xe_ora_5140.trc E:\xe_ora_5140.trc

 

 

方法二

 

激活10046事件

获取执行计划之10046事件_数据库_04获取执行计划之10046事件_数据库_05

 

oradebug setmypid
oradebug event 10046 trace name context forever,level 12;

 

执行目标SQL

获取执行计划之10046事件_数据库_04获取执行计划之10046事件_数据库_05

 

select * from emp;

 

查看生成的trace文件

获取执行计划之10046事件_数据库_04获取执行计划之10046事件_数据库_05

 

oradebug tracefile_name

 

关闭10046事件

获取执行计划之10046事件_数据库_04获取执行计划之10046事件_数据库_05

 

oradebug event 10046 trace name context forever,level 12;

 

切换cmd,tkprof命令规范文件格式

获取执行计划之10046事件_数据库_04获取执行计划之10046事件_数据库_05

 

tkprof D:\11G\APP\ORACLE\diag\rdbms\xe\xe\trace\xe_ora_5140.trc E:\xe_ora_5140.trc

 

获取执行计划之10046事件_SQL_24获取执行计划之10046事件_数据库_25

10046 tkprof 示例

获取执行计划之10046事件_SQL_26

 

获取执行计划之10046事件_SQL

优缺点

优点

可以看出sql语句对应的等待事件

函数调用也会被列出

可以方便的看处理的行数,产生的逻辑物理读

可以方便的看解析时间和执行时间

可以跟踪整个程序包

 

缺点

步骤繁琐

无法判断表被访问了多少次

执行计划中的谓词部分不能清晰的展现出来

 

获取执行计划之10046事件_数据库_28

 

扫码

长按关注

获取执行计划之10046事件_SQL_29

关注

惊喜不断