10046事件:获取最完整的sql执行计划

10046事件:获取最完整的sql执行计划

2015年09月29日 17:01:09 zhanglin_1314 阅读数:1110更多
个人分类: SQL优化
 

       相信很多人都很清楚使用explain plan命令、dbms_xplan包、autotrace开关可以获取执行计划,但是如果还需要获取更为详细的执行计划,我们可以使用10046事件来获取。

       而要通过10046事件来获取目标sql的执行计划,通常需要三个步骤:

       1、在当前的会话(session)中激活10046事件;

       2、在当前session中执行目标sql;

       3、在当前session中关闭10046事件;

      

       激活10046事件的命令有以下两种:

               第一种: alter session set events '10046 trace name context forever,level 12'

               第二种: oradebug event 10046 trace name context forever,level 12

       对应的,关闭10046事件的命令也有两种:

               第一种: alter session set events '10046 trace name context off'

               第二种: oradebug event 10046 trace name context off

 

       下面以一个示例做示范(强调一点:必须在sys用户下):

       1、在sys用户下,先准备对当前会话(session)使用oradebug;

       SQL> oradebug setmypid;

       已处理的语句

       2、在当前session中激活10046事件;

       SQL> oradebug event 10046 trace name context forever,level 12;

       已处理的语句

       3、在当前session中执行目标sql,生成对应的trace文件;

       SQL> select empno,ename,dname from scott.emp,scott.dept where emp.deptno=dept.deptno;

       4、查看步骤3中生成的trace文件的路径;

       SQL> oradebug tracefail_name;

       d:\app\zl\diag\rdbms\orcl\orcl\trace\orcl_ora_4352.trc

       5、在当前session中关闭10046事件;

       SQL> oradebug event 10046 trace name context off;

       已处理的语句

 

       下面是生成的trace文件的部分截图:

      

       可以很明显的看出来,这样的执行计划很不方便查看,所以我们需要用tkprof命令来翻译,上述得到的trace文件;

       tkprof的命令如下:

       C:\Users\zl>tkprof d:\app\zl\diag\rdbms\orcl\orcl\trace\orcl_ora_4352.trc e:\orcl_ora_4352.trc

       TKPROF: Release 11.2.0.1.0 - Development on 星期二 9月 29 16:11:41 2015

       Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

 

        下面是新生成的trace文件的截图:

       

        现在的执行计划就很直观、易懂了

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章