10046事件:獲取最完整的sql執行計劃

10046事件:獲取最完整的sql執行計劃

2015年09月29日 17:01:09 zhanglin_1314 閱讀數:1110更多
我的分類: SQL優化
 

       相信不少人都很清楚使用explain plan命令、dbms_xplan包、autotrace開關能夠獲取執行計劃,可是若是還須要獲取更爲詳細的執行計劃,咱們可使用10046事件來獲取。sql

       而要經過10046事件來獲取目標sql的執行計劃,一般須要三個步驟:session

       一、在當前的會話(session)中激活10046事件;app

       二、在當前session中執行目標sql;優化

       三、在當前session中關閉10046事件;spa

      

       激活10046事件的命令有如下兩種:.net

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

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

       對應的,關閉10046事件的命令也有兩種:blog

               第一種: alter session set events '10046 trace name context off'事件

               第二種: oradebug event 10046 trace name context off

 

       下面以一個示例作示範(強調一點:必須在sys用戶下):

       一、在sys用戶下,先準備對當前會話(session)使用oradebug;

       SQL> oradebug setmypid;

       已處理的語句

       二、在當前session中激活10046事件;

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

       已處理的語句

       三、在當前session中執行目標sql,生成對應的trace文件;

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

       四、查看步驟3中生成的trace文件的路徑;

       SQL> oradebug tracefail_name;

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

       五、在當前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文件的截圖:

       

        如今的執行計劃就很直觀、易懂了

相關文章
相關標籤/搜索