Oracle 獲取執行計畫的幾種方法

2021-09-09 00:13:59 字數 2317 閱讀 6940

explain plan以sql語句作為輸入,得到這條sql語句的執行計畫,並將執行計畫輸出儲存到計畫表中。

首先,在你要執行的sql語句前加explain plan for,此時將生成的執行計畫儲存到計畫表中,語句如下:

explain plan for sql語句

然後,在計畫表中查詢剛剛生成的執行計畫,語句如下:

select * from table(dbms_xplan.display);

注意:explain plan只生成執行計畫,並不會真正執行sql語句,因此產生的執行計畫有可能不准,因為:

1)當前的環境可能和執行計畫生成時的環境不同;

2)不會考慮繫結變數的資料型別;

3)不進行變數窺視。

如果你想獲取正在執行的或剛執行結束的sql語句真實的執行計畫(即獲取library cache中的執行計畫),可以到動態效能檢視裡查詢。方法如下:

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等,但更方便的方法是以sql_id和子游標為引數,執行如下語句:

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'));

awr會定時把動態效能檢視中的執行計畫儲存到dba_hist_sql_plan檢視中,如果你想要檢視歷史執行計畫,可以採用如下方法查詢:

select * from table(dbms_xplan.display_awr('sql_id');

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

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) --結束跟蹤

生成trace檔案後,再用tkprof 工具將sql trace 生成的跟蹤檔案轉換成易讀的格式,語法如下:

tkprof inputfile outputfile

10046事件是sql_trace的乙個公升級版,它也是追蹤會話,生成trace檔案,只是它裡面的內容更詳細,

ocacle 執行計畫 Oracle執行計畫

一 什麼是oracle執行計畫?執行計畫是一條查詢語句在oracle中的執行過程或訪問路徑的描述 二 怎樣檢視oracle執行計畫?因為我一直用的plsql遠端連線的公司資料庫,所以這裡以plsql為例 配置執行計畫需要顯示的項 工具 首選項 視窗型別 計畫視窗 根據需要配置要顯示在執行計畫中的列 ...

檢視Oracle執行計畫的幾種常用方法 系列2

續上篇 3.autotrace開關 sqlplus中開啟autotrace開關可以得到sql的執行計畫。從提示可以看到autotrace有幾個選項 off on traceonly explain statistics。實驗 1.執行set autotrace on 2.執行set autotrac...

Oracle的執行計畫

今天來詳細說說oracle的執行計畫,所謂執行計畫,就是在執行某條sql之前作出的執行方案,或者說是執行路徑。oracle的優化器模式有兩大類,乙個是基於規則的 rbo rule based optimizer 乙個是基於代價的優化器 cbo cost based optimizer 又可細分為 c...