檢視執行計劃的方法:
1.Explain Plan For SQL
不實際執行SQL詫句,生成的計劃未必是真實執行的計劃
必須要有plan_table
2.SQLPLUS AUTOTRACE
除set autotrace traceonly explain外均實際執行SQL,但仍未必是真實計劃必須要有plan_table
3.SQL TRACE
需要啟用10046戒者SQL_TRACE
一般用tkprof看的更清楚些,當然10046裡本身也有執行計劃資訊
4.V$SQL和V$SQL_PLAN
可以查詢到多個子遊标的計劃資訊了,但是看起來比較費勁
5.Enterprise Manager
可以圖形化顯示執行計劃,但并非所有環境有EM可用
6.其他第三方工具
注意 PL/SQL developer之類工具F5看到的執行計劃未必是真實的
檢視詳細執行計劃:
alter session set STATISTICS_LEVEL = ALL; --不設定無法獲得A-ROWS等資訊
如果輸入NULL 則預設為之前運作的一條SQL,但注意要保持set serveroutput off,否則最後一句SQL将丌是你運作的SQL:
alter session set STATISTICS_LEVEL = ALL;
set serveroutput off;
select * From DATA_SKEW_HB where source='Maclean Search';
SQL> select * from TABLE(dbms_xplan.display_cursor('fk641nh8gjzvk',NULL,'ADVANCED +PEEKED_BINDS'));
SQL> select * from table(dbms_xplan.DISPLAY_CURSOR(null, null, 'ALLSTATS'));
格式:
ALLSTATS IOSTATS + MEMSTATS
IOSTATS 顯示該遊标累計執行的IO統計資訊(Buffers, Reads)
MEMSTATS 累計執行的PGA使用資訊(Omem 1Mem Used-Mem)
LAST 僅顯示最後一次執行的統計資訊
Advanced 顯示outline、Query Block Name、 Column Projection等資訊
PEEKED_BINDS 列印解析時使用的綁定變量
Typical 丌列印PROJECTION, ALIAS 組合使用的方式如下,注意每個關鍵詞後面要加空格
例如 ‘typical +peeked_binds’ => work ‘typical+peeked_binds’ => Error: format 'TYPICAL+peeked_binds' not valid for DBMS_XPLAN
推薦格式:
ALTER SESSION SET STATISTICS_LEVEL=ALL;
select * from table(dbms_xplan.display_cursor(null,null,'ADVANCED ALLSTATS LAST PEEKED_BINDS'));
父子遊标
使用腳本查詢SQL_ID
select sql_id,sql_text from v$SQL Where
sql_text not like '%like%'
and sql_text like '%$SQL%'; --$SQL處填入你的SQL的文本
為了避免你的SQL和其他SQL混在一起,考慮增加一個注釋 例如
Select /* MACLEAN_TEST_PLAN_1 */ * from MAC;
如果你之前執行過該詫句,那麼為了引發該詫句的再次硬解析,對注釋略作修改,例如上面的 PLAN_1 改為PLAN_2
父遊标所在
Select * from v$SQLAREA where SQL_ID=%YOUR_SQL_ID%;
子遊标:執行計劃和優化環境
Select * from v$SQL where SQL_id=%YOUR_SQL_ID%;
計劃:
Select * from v$SQL_PLAN where SQL_id=%YOUR_SQL_ID%;
優化環境:
Select * from v$SQL_OPTIMIZER_ENV where SQL_id=%YOUR_SQL_ID%;