相信不少人都很清楚使用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文件的截圖:
如今的執行計劃就很直觀、易懂了