Oracle獲取執行計劃的方法
1. Explain plan
Explain plan以SQL語句作為輸入,得到這條SQL語句的執行計劃,並將執行計劃輸出儲存到計劃表中,方法如下:
explain plan for select * from t;
select * from table(dbms_xplan.display);
注意:Explain plan只生成執行計劃,並不會真正執行SQL語句,因此產生的執行計劃有可能不準,因為:
1)當前的環境可能和執行計劃生成時的環境不同;
2)不會考慮繫結變數的資料型別;
3)不進行變數窺視。
2. 查詢動態效能檢視
如果你想獲取正在執行的或剛執行結束的SQL語句真實的執行計劃(即獲取庫快取中的執行計劃),可以到動態效能檢視裡查詢。方法如下:
1)獲取SQL語句的遊標
遊標分為父遊標和子游標,父遊標由sql_id(或聯合address和hash_value)欄位表示,子游標由child_number欄位表示。
如果SQL語句正在執行,可以從v$session中獲得它的遊標資訊,如:
select status, sql_id, sql_child_number from v$session where status='ACTIVE' and ....
如果知道SQL語句包含某些關鍵字,可以從v$sql檢視中獲得它的遊標資訊,如:
select sql_id, child_number, sql_text from v$sql where sql_text like '%關鍵字%‘
2)獲取庫快取中的執行計劃
為了獲取快取庫中的執行計劃,可以直接查詢動態效能檢視v$sql_plan和v$sql_plan_statistics_all等,但更方便的方法是:
select * from table(dbms_xplan.display_cursor('sql_id',child_number));
3)獲取前一次執行計劃:
set serveroutput off
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
3. AWR報告
AWR報告把動態效能檢視中的執行計劃儲存到dba_hist_sql_plan檢視中,我們可以採用如下方法查詢AWR中的執行計劃:
select * from table(dbms_xplan.display_awr('sql_id');
4. Autotrace
set autotrace是sqlplus工具的一個功能,只能在透過sqlplus連線的session中使用,它非常適合在開發時測試SQL語句的效能,有以下幾種引數可供選擇:
SET AUTOTRACE OFF ---------------- 不顯示執行計劃和統計資訊,這是預設模式
SET AUTOTRACE ON EXPLAIN ------ 只顯示最佳化器執行計劃
SET AUTOTRACE ON STATISTICS -- 只顯示統計資訊
SET AUTOTRACE ON ----------------- 執行計劃和統計資訊同時顯示
SET AUTOTRACE TRACEONLY ------ 不真正執行,只顯示預期的執行計劃,通explain plan
5. SQL_TRACE
SQL_TRACE作為初始化引數可以在例項級別啟用,也可以只在會話級別啟用,在例項級別啟用SQL_TRACE會導致所有程式的活動被跟蹤,包括後臺程式及所有使用者程式,這通常會導致比較嚴重的效能問題,所以在一般情況下,我們使用sql_trace跟蹤當前程式,方法如下:
SQL> alter session set sql_trace=true;
...被跟蹤的SQL語句...
SQL> alter session set sql_trace=false;
如果要跟蹤其它程式,可以透過Oracle提供的系統包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION來實現,例如:
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true) --開始跟蹤
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false) --結束跟蹤
使用tkprof 工具將sql trace 生成的跟蹤檔案轉換成易讀的格式,用發如下:
tkprof inputfile outputfile
Explain plan以SQL語句作為輸入,得到這條SQL語句的執行計劃,並將執行計劃輸出儲存到計劃表中,方法如下:
explain plan for select * from t;
select * from table(dbms_xplan.display);
注意:Explain plan只生成執行計劃,並不會真正執行SQL語句,因此產生的執行計劃有可能不準,因為:
1)當前的環境可能和執行計劃生成時的環境不同;
2)不會考慮繫結變數的資料型別;
3)不進行變數窺視。
2. 查詢動態效能檢視
如果你想獲取正在執行的或剛執行結束的SQL語句真實的執行計劃(即獲取庫快取中的執行計劃),可以到動態效能檢視裡查詢。方法如下:
1)獲取SQL語句的遊標
遊標分為父遊標和子游標,父遊標由sql_id(或聯合address和hash_value)欄位表示,子游標由child_number欄位表示。
如果SQL語句正在執行,可以從v$session中獲得它的遊標資訊,如:
select status, sql_id, sql_child_number from v$session where status='ACTIVE' and ....
如果知道SQL語句包含某些關鍵字,可以從v$sql檢視中獲得它的遊標資訊,如:
select sql_id, child_number, sql_text from v$sql where sql_text like '%關鍵字%‘
2)獲取庫快取中的執行計劃
為了獲取快取庫中的執行計劃,可以直接查詢動態效能檢視v$sql_plan和v$sql_plan_statistics_all等,但更方便的方法是:
select * from table(dbms_xplan.display_cursor('sql_id',child_number));
3)獲取前一次執行計劃:
set serveroutput off
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
3. AWR報告
AWR報告把動態效能檢視中的執行計劃儲存到dba_hist_sql_plan檢視中,我們可以採用如下方法查詢AWR中的執行計劃:
select * from table(dbms_xplan.display_awr('sql_id');
4. Autotrace
set autotrace是sqlplus工具的一個功能,只能在透過sqlplus連線的session中使用,它非常適合在開發時測試SQL語句的效能,有以下幾種引數可供選擇:
SET AUTOTRACE OFF ---------------- 不顯示執行計劃和統計資訊,這是預設模式
SET AUTOTRACE ON EXPLAIN ------ 只顯示最佳化器執行計劃
SET AUTOTRACE ON STATISTICS -- 只顯示統計資訊
SET AUTOTRACE ON ----------------- 執行計劃和統計資訊同時顯示
SET AUTOTRACE TRACEONLY ------ 不真正執行,只顯示預期的執行計劃,通explain plan
5. SQL_TRACE
SQL_TRACE作為初始化引數可以在例項級別啟用,也可以只在會話級別啟用,在例項級別啟用SQL_TRACE會導致所有程式的活動被跟蹤,包括後臺程式及所有使用者程式,這通常會導致比較嚴重的效能問題,所以在一般情況下,我們使用sql_trace跟蹤當前程式,方法如下:
SQL> alter session set sql_trace=true;
...被跟蹤的SQL語句...
SQL> alter session set sql_trace=false;
如果要跟蹤其它程式,可以透過Oracle提供的系統包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION來實現,例如:
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true) --開始跟蹤
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false) --結束跟蹤
使用tkprof 工具將sql trace 生成的跟蹤檔案轉換成易讀的格式,用發如下:
tkprof inputfile outputfile
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2132793/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle 獲取SQL執行計劃方法OracleSQL
- Oracle 獲取執行計劃的幾種方法Oracle
- 獲取執行計劃的方法
- 獲取執行計劃的6種方法
- 執行計劃-1:獲取執行計劃
- oracle dbms_xplan獲取執行計劃Oracle
- 獲取SQL執行計劃SQL
- Oracle10g如何獲取執行計劃Oracle
- 【sql調優之執行計劃】獲取執行計劃SQL
- 獲取SQL執行計劃的方式:SQL
- 獲取執行計劃之Autotrace
- 介紹幾種獲取SQL執行計劃的方法(上)SQL
- 如何獲取真實的執行計劃
- 執行計劃__獲取方法、檢視執行順序、統計資訊詳解
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- oracle explain plan for獲取執行計劃並不可靠.OracleAI
- oracle檢視執行計劃的方法Oracle
- oracle 9i 獲取sql執行計劃(書寫長的sql)OracleSQL
- MySQL 5.7獲取指定執行緒正在執行SQL的執行計劃資訊MySql執行緒
- sql執行計劃變更和刪除快取中執行計劃的方法SQL快取
- 會話的跟蹤以及執行計劃的獲取會話
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- oracle中跟蹤sql執行計劃的方法OracleSQL
- Oracle檢視執行計劃常用方法Oracle
- ORACLE執行計劃Oracle
- 獲得目標SQL語句執行計劃的方法SQL
- 生成執行計劃的方法
- Oracle 執行計劃 分析和動態取樣Oracle
- 【Oracle】-【索引-HINT,執行計劃】-帶HINT的索引執行計劃Oracle索引
- 達夢資料庫獲取SQL真實的執行計劃資料庫SQL
- 獲取oracle正在處於等待狀態的sql語句的執行計劃的語句OracleSQL
- oracle 固定執行計劃Oracle
- Oracle sql執行計劃OracleSQL
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- 執行計劃的閱讀方法
- 檢視執行計劃的方法
- 多種方法檢視Oracle SQL執行計劃OracleSQL