display函數(搭配explain plan使用)的參數輸入:
1. table_name: 默認爲plan_table。
2. statement_id: 默認爲NULL,在默認情況下,顯示最近插入plan_table中的執行計劃。
3. format:取值包括,basic,typical,serial,all和advance,默認值是typical, advance則是顯示所有信息。
4. filter_preds: 默認值爲NULL,指定在plan_table中添加一個約束。從Oracle 10gR2開始用這個參數。
使用display函數,調用者只需要有dbms_xplan包的execute權限和計劃表的SELECT權限。
注意一點:無論何時只要包含綁定變量,explain plan產生的執行計劃都是不準確的。
例子:
select * from table(dbms_xplan.display(NULL,NULL,'ADVANCE',NULL));
or
select * from table(dbms_xplan.display(NULL,NULL,'basic+predicate',NULL));
display_cursor函數的參數輸入(不需要explain plan搭配使用):
display_cursor返回存儲在library_cache中的執行計劃,這個函數從Oracle 10g開始可以使用。
1. sql_id: 指定被返回執行計劃的SQL語句的父遊標,默認值是NULL,表示當前會話所執行的最後一條SQL語句的執行計劃被返回。
2. cursor_child_no: 表示這個父遊標下的子游標的序號,默認值爲0,如果指定爲NULL,則表示對應sql_id所指的父遊標下所有子游標的執行計劃都將被返回。
3. format:同display函數,默認值仍然爲Typical, 如果我們通過設置STATSTICS_LEVEL=ALL或者在sql語句中加/*+gather_plan_statistics*/之類的hints的話,還可以顯示更多的信息,比如E-ROWS和A-ROWS,等等。
使用display_cursor函數,調用者需要對v$session,v$sql,v$sql_plan和v$sql_plan_statistics_all有select權限,同時角色select_catalog_role和select any dictionary權限也要授予給調用者
例子:
SELECT * FROM table (dbms_xplan.display_cursor('2345wef23rfds',NULL,'Typical'));
SELECT * FROM table(dbms_xplan.display_curso (NULL,NULL,'iostats last'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'runstats_last'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'memstats last'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'allstats last'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'iostats'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'runstats_tot'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'memstats'));
SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'allstats'));
display_awr函數的參數輸入:
1. sql_id: 指定被返回執行計劃的SQL語句的父遊標,這個參數沒有默認值。
2. plan_hash_value: 指定被返回sql_id的執行計劃的哈希值。默認爲NULL,表示返回與sql_id參數指定的父遊標相關的所有執行計劃都會返回。
3. db_id:默認爲NULL,表示當前數據庫
4. format: 同display函數,默認值仍然爲Typical
使用display_awr函數,必須要引誘dba_hist_sql_plan,dba_hist_sql_text的select權限,同時如果沒有指定db_id,還必須要有v$database的select權限,通過要授予select_catalog_role角色。
例子:
select * from table (dbms_xplan.display_awr('2345wef23rfds',NULL,NULL,'BAISC'));
or
select * from table (dbms_xplan.display_awr('2345wef23rfds',2343512356,NULL,'basic'));