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文件的截圖:

       

        現在的執行計劃就很直觀、易懂了

      

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