10046事件:獲取最完整的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文件的截圖:
現在的執行計劃就很直觀、易懂了