Beim Versuch, in einer RAC-Datenbank den Zugriffsplan für eine über gv$sql ermittelte sql_id mit Hilfe von dbms_xplan.display_cursor anzeigen zu lassen, bekomme ich kein Ergebnis:
select * from table(dbms_xplan.display_cursor(sql_id => '13x0qwkc4xrfv', cursor_child_no=>1)); PLAN_TABLE_OUTPUT --------------------------------------------------------------------------------------------------- SQL_ID: 13x0qwkc4xrfv, child number: 1 cannot be found
In v$sql_plan sehe ich auch keine zugehörigen Einträge, aber in gv$sql_plan finden sich die gesuchten Informationen:
select count(*) from v$sql_plan where sql_id = '13x0qwkc4xrfv' and child_number = 1; COUNT(*) ---------- 0 select count(*) from gv$sql_plan where sql_id = '13x0qwkc4xrfv' and child_number = 1; COUNT(*) ---------- 4
Offenbar greift dbms_xplan.display_cursor nicht auf die gv$-Views zu: in einer anderen Datenbank (kein RAC), sehe ich über Event 10046 nur rekursive Zugriffe auf v$-Views:
select /* EXEC_FROM_DBMS_XPLAN */ case when upper(sql_text) like '%DBMS_XPLAN%' then 0 else 1 end case, SQL_ID, child_number from v$sql where SQL_ID ='8szmwam7fysa3' and child_number =0 ... Parsing user id: 68 (recursive depth: 1) Rows Row Source Operation ------- --------------------------------------------------- 1 FIXED TABLE FIXED INDEX X$KGLCURSOR_CHILD (ind:2) (cr=0 pr=0 pw=0 time=0 us cost=0 size=536 card=1)
Das entspricht auch den Angaben der Doku: "The table function DISPLAY_CURSOR requires to have select privileges on the following fixed views: V$SQL_PLAN, V$SESSION and V$SQL_PLAN_STATISTICS_ALL". Im Widerspruch dazu scheint mir der entsprechende Eintrag in Morgan's Library zu sein: "Display from GV$SQL_PLAN (or GV$SQL_PLAN_STATISTICS_ALL)."
Meiner Meinung nach wäre es günstig, wenn dbms_xplan.display_cursor einen NODE-Parameter beinhalten würde, da die Plan-Informationen über gv$_sql_plan ja offenbar verfügbar wären.
Nachtrag 31.08.2011: in einem Kommentar im Sratchpad wurde ein funktionierender Workaround vorgeschlagen, der die Anzeige der Pläne von anderen Knoten ermöglicht:
select * from table(dbms_xplan.display('gv$sql_plan_statistics_all' , null , null , 'inst_id = &inst_id and sql_id = ''&sql_id'' and child_number = &child_number') );
Keine Kommentare:
Kommentar veröffentlichen