210 DBMS_XPLAN
DBMS_XPLANパッケージによって、EXPLAIN PLANコマンドの出力を事前定義した複数の書式で表示する簡単な方法が提供されます。
また、DBMS_XPLANパッケージを使用して、自動ワークロード・リポジトリ(AWR)またはSQLチューニング・セットに格納されている文の計画を表示することもできます。さらに、V$SQL_PLAN固定ビューおよびV$SQL_PLAN_STATISTICS_ALL固定ビューに格納されている情報に基づいてキャッシュしたSQLカーソルについて、SQL実行計画およびSQL実行ランタイム統計を表示することもできます。最後に、SQLプラン・ベースラインから計画を表示します。
参照:
-
EXPLAINPLANコマンド、AWRおよびSQLチューニング・セットの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。 -
V$SQL_PLAN固定ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。 -
V$SQL_PLAN_STATISTICS固定ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
この章のトピックは、次のとおりです:
210.1 DBMS_XPLANの概要
DBMS_XPLANパッケージでは、次の5つのテーブル・ファンクションを提供しています。
これらのファンクションを次に示します。
-
DISPLAY: PLAN TABLEの内容を書式設定して表示します。 -
DISPLAY_AWR: AWR内に格納されているSQL文について、その実行計画内容を書式設定して表示します。 -
DISPLAY_CURSOR: ロードした任意のカーソルについて、その実行計画内容を書式設定して表示します。 -
DISPLAY_SQL_PLAN_BASELINE: SQLハンドルによって識別されるSQL文の1つ以上の実行計画を表示します。 -
DISPLAY_SQLSET: SQLチューニング・セット内に格納されている文について、その実行計画内容を書式設定して表示します。
210.2 DBMS_XPLANのセキュリティ・モデル
このパッケージは、パッケージ所有者(SYS)ではなく、コール・ユーザーの権限で実行されます。テーブル・ファンクションDISPLAY_CURSORを使用するには、V$SQL_PLAN、V$SESSIONおよびV$SQL_PLAN_STATISTICS_ALL.の各固定ビューに対するSELECTまたはREAD権限が必要です。このファンクションには、V$SQLに対するSELECT/READ権限も必要です。
DISPLAY_AWRファンクションを使用する場合、ユーザーにはDBA_HIST_SQL_PLAN、DBA_HIST_SQLTEXTおよびV$DATABASEに対するSELECTまたはREAD権限が必要です。
DISPLAY_SQLSETファンクション を使用する場合、ユーザーにはALL_SQLSET_STATEMENTSおよびALL_SQLSET_PLANSに対するSELECTまたはREAD権限が必要です。
DISPLAY_SQL_PLAN_BASELINEファンクションを使用する場合、ユーザーには、ユーザーが計画を取得しようと試みるSQL文を実行する権限に加えて、DBA_SQL_PLAN_BASELINESに対するSELECTまたはREAD権限が必要です。
前述の権限は、SELECT_CATALOG_ROLEの一部として自動的に付与されます。
210.3 例
次の例は、DBMS_XPLANの使用を示します。
DBMS_XPLAN.DISPLAYを使用したPLAN TABLEの表示
SELECT文でEXPLAIN PLANコマンドを実行します。
EXPLAIN PLAN FOR SELECT * FROM emp e, dept d WHERE e.deptno = d.deptno AND e.ename='benoit';
DBMS_XPLAN.DISPLAYテーブル・ファンクションを使用して、計画を表示します。
SET LINESIZE 130 SET PAGESIZE 0 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
この問合せによって次の出力が作成されます。
Plan hash value: 3693697075
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 57 | 6 (34)| 00:00:01 |
|* 1 | HASH JOIN | | 1 | 57 | 6 (34)| 00:00:01 |
|* 2 | TABLE ACCESS FULL| EMP | 1 | 37 | 3 (34)| 00:00:01 |
| 3 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (34)| 00:00:01 |
---------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("E"."DEPTNO"="D"."DEPTNO")
2 - filter("E"."ENAME"='benoit')
15 rows selected.DBMS_XPLAN.DISPLAY_CURSORを使用したカーソル実行計画の表示
デフォルトでは、テーブル・ファンクションDISPLAY_CURSORによって、セッションで最後に実行されたSQL文の実行計画が書式設定されます。次に例を示します。
SELECT ename FROM emp e, dept d WHERE e.deptno = d.deptno AND e.empno=7369; ENAME ---------- SMITH
セッションで最後に実行された文の実行計画を表示するには、次のように入力します。
SET PAGESIZE 0 SELECT * FROM DBMS_XPLAN.DISPLAY_CURSOR();
この問合せによって次の出力が作成されます。
Plan hash value: 3693697075, SQL hash value: 2096952573, child number: 0
------------------------------------------------------------------
SELECT ename FROM emp e, dept d WHERE e.deptno = d.deptno
AND e.empno=7369
---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | | |
|* 1 | HASH JOIN | | 1 | 16 | 6 (34)| 00:00:01 |
|* 2 | TABLE ACCESS FULL| EMP | 1 | 13 | 3 (34)| 00:00:01 |
| 3 | TABLE ACCESS FULL| DEPT | 4 | 12 | 3 (34)| 00:00:01 |
---------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("E"."DEPTNO"="D"."DEPTNO")
2 - filter("E"."EMPNO"=7369)
21 rows selected.
テーブル・ファンクションDISPLAY_CURSORを使用して、カーソル・キャッシュに格納されている任意のロード済カーソルの実行計画を表示することもできます。その場合、子カーソルへの参照をテーブル・ファンクションに指定する必要があります。また、この指定には、文のSQL IDと子番号(オプション)も含まれます。
次のように、簡単に判別できるコメントを付けて問合せを実行します。
SELECT /* TOTO */ ename, dname FROM dept d join emp e USING (deptno);
前の文のsql_idとchild_numberを取得します。
SELECT sql_id, child_number FROM v$sql WHERE sql_text LIKE '%TOTO%'; SQL_ID CHILD_NUMBER ---------- ----------------------------- gwp663cqh5qbf 0
カーソルの実行計画を表示します。
SELECT * FROM DBMS_XPLAN.DISPLAY_CURSOR('gwp663cqh5qbf',0);
Plan hash value: 3693697075, SQL ID: gwp663cqh5qbf, child number: 0
--------------------------------------------------------
SELECT /* TOTO */ ename, dname
FROM dept d JOIN emp e USING (deptno);
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 7 (100)| |
| 1 | SORT GROUP BY | | 4 | 64 | 7 (43)| 00:00:01 |
|* 2 | HASH JOIN | | 14 | 224 | 6 (34)| 00:00:01 |
| 3 | TABLE ACCESS FULL| DEPT | 4 | 44 | 3 (34)| 00:00:01 |
| 4 | TABLE ACCESS FULL| EMP | 14 | 70 | 3 (34)| 00:00:01 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("E"."DEPTNO"="D"."DEPTNO")
sql_idとchild_numberのペアを取得する問合せおよび計画を表示するための問合せの2つの問合せを発行するかわりに、1つの問合せにまとめることもできます。
文字列'TOTO'に一致するすべてのカーソルの実行計画を表示します。
SELECT t.* FROM v$sql s, DBMS_XPLAN.DISPLAY_CURSOR(s.sql_id, s.child_number) t WHERE sql_text LIKE '%TOTO%';
パラレル情報を含むPLAN TABLEの表示
デフォルトでは、DISPLAYおよびDISPLAY_CURSORテーブル・ファンクションでレポートされるのは関連情報のみです。「DBMS_XPLAN.DISPLAYを使用したPLAN TABLEの表示」で示した問合せは、パラレルで実行されていません。したがって、計画のパラレル化に関連する情報はレポートされません。次の例のように、問合せがパラレルで実行された場合のみ、パラレル情報がレポートされます。
ALTER TABLE emp PARALLEL; EXPLAIN PLAN for SELECT * FROM emp e, dept d WHERE e.deptno = d.deptno AND e.ename ='hermann' ORDER BY e.empno;
DBMS_XPLAN.DISPLAYテーブル・ファンクションを使用して、計画を表示します。
SET LINESIZE 130 SET PAGESIZE 0 SELECT * FROM DBMS_XPLAN.DISPLAY(); Plan hash value: 3693697345
-------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |INOUT |PQ Distrib |
-------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 117 | 6 (50) | 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (ORDER) |:TQ10003 | 1 | 117 | 6 (50) | 00:00:01 | Q1,03 | P->S | QC (ORDER) |
| 3 | SORT ORDER BY | | 1 | 117 | 6 (50) | 00:00:01 | Q1,03 | PCWP | |
| 4 | PX RECEIVE | | 1 | 117 | 5 (40) | 00:00:01 | Q1,03 | PCWP | |
| 5 | PX SEND RANGE |:TQ10002 | 1 | 117 | 5 (40) | 00:00:01 | Q1,02 | P->P | RANGE |
|* 6 | HASH JOIN | | 1 | 117 | 5 (40) | 00:00:01 | Q1,02 | PCWP | |
| 7 | PX RECEIVE | | 1 | 87 | 2 (50) | 00:00:01 | Q1,02 | PCWP | |
| 8 | PX SEND HASH |:TQ10001 | 1 | 87 | 2 (50) | 00:00:01 | Q1,01 | P->P | HASH |
| 9 | PX BLOCK ITERATOR | | 1 | 87 | 2 (50) | 00:00:01 | Q1,01 | PCWC | |
|* 10| TABLE ACCESS FULL | EMP | 1 | 87 | 2 (50) | 00:00:01 | Q1,01 | PCWP | |
| 11 | BUFFER SORT | | | | | | Q1,02 | PCWC | |
| 12 | PX RECEIVE | | 4 | 120 | 3 (34) | 00:00:01 | Q1,02 | PCWP | |
| 13 | PX SEND HASH |:TQ10000 | 4 | 120 | 3 (34) | 00:00:01 | | S->P | HASH |
| 14 | TABLE ACCESS FULL | DEPT | 4 | 120 | 3 (34) | 00:00:01 | | | |
-------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
6 - access("E"."DEPTNO"="D"."DEPTNO")
10 - filter("E"."ENAME"='hermann')
---------------------------------------------------
問合せがパラレルの場合、並列性に関連する情報として、テーブル・キュー番号(TQ列)、テーブル・キュー・タイプ(INOUT)およびテーブル・キュー配布方式(PQ Distrib)がレポートされます。
デフォルトでは、PLAN TABLE内の複数の計画が、DISPLAYテーブル・ファンクションに渡されたstatement_idパラメータ(デフォルト値はNULL)と一致した場合に表示されるのは、最新のEXPLAIN PLANコマンドに対応する計画のみです。したがって、各EXPLAIN PLANの後で、PLAN TABLEをパージする必要はありません。ただし、DISPLAYテーブル・ファンクションの最適な実行パフォーマンスを確保するため、PLAN TABLEを定期的にパージする必要があります。PLAN TABLEが作成されていない場合は、グローバル一時表を使用して個々のユーザーの計画情報が格納され、その内容がセッションの存続期間中保持されます。グローバル一時表の内容は切り捨てることができないことに注意してください。
使用しやすくするため、DISPLAYテーブル・ファンクション以外にビューを定義し、そのビューを使用して、EXPLAIN PLANコマンドの出力を次のように表示できます。
最新のEXPLAIN PLANを表示するためのビューの使用方法
# define plan view CREATE VIEW PLAN AS SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); # display the output of the last explain plan command SELECT * FROM PLAN;
210.4 DBMS_XPLANサブプログラムの要約
この表は、DBMS_XPLANサブプログラムを示し、簡単に説明しています。
表210-1 DBMS_XPLANパッケージのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
計画を比較します。 |
|
|
PLAN TABLEの内容を表示します。 |
|
|
AWR内に格納されている実行計画の内容を表示します。 |
|
|
カーソル・キャッシュ内の任意のカーソルの実行計画を表示します。 |
|
|
|
|
|
SQLプラン・ベースラインの指定したSQLハンドルの1つ以上の実行計画を表示します。 |
|
|
SQLチューニング・セットに格納されている指定した文の実行計画を表示します。 |
210.4.1 DIFF_PLANファンクション
このファンクションは計画を比較します。
構文
DBMS_XPLAN.DIFF_PLAN( plan1 IN SPC_SRC, plan2 IN SPC_SRC) RETURN VARCHAR2;
パラメータ
表210-2 DIFF_PLANファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
第1計画 |
|
|
第2計画 |
210.4.2 DISPLAYファンクション
このテーブル・ファンクションは、PLAN TABLEの内容を表示します。
また、この表の列の名前がPLAN TABLE(統計情報が含まれている場合はV$SQL_PLAN_STATISTICS_ALL)の列の名前と同じである場合にかぎり、このテーブル・ファンクションを使用して、表に格納されている計画を(統計情報を含めて、または統計情報を含めずに)表示できます。指定した表に述語を適用して、表示する計画の行を選択できます。
構文
DBMS_XPLAN.DISPLAY( table_name IN VARCHAR2 DEFAULT 'PLAN_TABLE', statement_id IN VARCHAR2 DEFAULT NULL, format IN VARCHAR2 DEFAULT 'TYPICAL', filter_preds IN VARCHAR2 DEFAULT NULL);
パラメータ
表210-3 DISPLAYファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
計画が格納されている表の名前を指定します。このパラメータのデフォルトは |
|
|
表示する計画の |
|
|
計画の詳細レベルを制御します。次の4つの値を指定できます。
表示出力をより細かく制御するために、前述の3つの標準的なformatオプションに次のキーワードを追加して、デフォルトの動作をカスタマイズできます。各キーワードは、PLAN TABLEの列の論理グループ(
フォーマット・キーワードに 目的のPLAN TABLE( |
|
|
計画を格納する表から選択される行のセットを制限するSQLフィルタ述語。値が 計画を格納する表のすべての列を参照できます。また、副問合せ、ファンクション・コールなどのすべてのSQL構文(「使用上のノート」の |
使用上のノート
formatパラメータのバリエーションの例を次に示します。
-
projectionおよびnoteセクションを除くすべてを表示する場合は、'
ALL -PROJECTION -NOTE'を使用します。 -
TYPICALフォーマットに(TYPICALフォーマットでは通常除外されている)projectionセクションを追加して表示する場合は、'
TYPICAL PROJECTION'を使用します。TYPICALはデフォルトであるため、'PROJECTION'を使用するのみで同様に表示できます。 -
TYPICALフォーマットを使用して、オプティマイザ・コスト、推定バイト数およびpredicateセクションを除外して表示する場合は、'
-BYTES -COST -PREDICATE'を使用します。 -
BASICレベルの情報にオプティマイザによる推定バイト数を追加して表示する場合は、'
BASIC ROWS'を使用します。警告:
filter_predsパラメータを公開することによって、アプリケーションがSQLインジェクションの影響を受ける可能性があるため、アプリケーション開発者は、十分に検討した後でのみこのパラメータをエンド・ユーザーに公開してください。実際、filter_predsを使用すると、すべての表の参照、またはテーブル・ファンクションを起動するデータベース・ユーザーが権限を持つすべてのサーバー・ファンクションの実行を行うことができます。
例
PLAN TABLEに格納されている最新のEXPLAIN PLANコマンドの結果を表示するには、次のように入力します。
SELECT * FROM table (DBMS_XPLAN.DISPLAY);
デフォルトのPLAN TABLE以外のPLAN TABLE(例: "my_plan_table")から表示するには、次のように入力します。
SELECT * FROM table (DBMS_XPLAN.DISPLAY('my_plan_table'));
最小限の計画情報を表示するには、次のように入力します。
SELECT * FROM table (DBMS_XPLAN.DISPLAY('plan_table', null, 'basic'));
fooで識別される文(statement_id='foo'など)の計画を表示するには、次のように入力します。
SELECT * FROM table (DBMS_XPLAN.DISPLAY('plan_table', 'foo'));210.4.3 DISPLAY_AWRファンクション
このテーブル・ファンクションは、AWR内に格納されている実行計画の内容を表示します。
構文
DBMS_XPLAN.DISPLAY_AWR( sql_id IN VARCHAR2, plan_hash_value IN NUMBER DEFAULT NULL, db_id IN NUMBER DEFAULT NULL, format IN VARCHAR2 DEFAULT TYPICAL);
パラメータ
表210-4 DISPLAY_AWRテーブル・ファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL文の |
|
|
SQL文の |
|
|
|
|
|
計画の詳細レベルを制御します。次の4つの値を指定できます。
表示出力をより細かく制御するために、前述の4つの標準的なformatオプションに次のキーワードを追加して、デフォルトの動作をカスタマイズできます。各キーワードは、PLAN TABLEの列の論理グループ(
フォーマット・キーワードに |
使用上のノート
-
DISPLAY_AWRファンクションを使用する場合、コール・ユーザーにはDBA_HIST_SQL_PLAN、DBA_HIST_SQLTEXTおよびV$DATABASEに対するSELECTまたはREAD権限が必要です。権限がない場合は、エラー・メッセージが表示されます。 -
formatパラメータのバリエーションの例を次に示します。-
projectionおよびnoteセクションを除くすべてを表示する場合は、'
ALL -PROJECTION -NOTE'を使用します。 -
TYPICALフォーマットに(TYPICALフォーマットでは通常除外されている)projectionセクションを追加して表示する場合は、'
TYPICAL PROJECTION'を使用します。TYPICALはデフォルトであるため、'PROJECTION'を使用するのみで同様に表示できます。 -
TYPICALフォーマットを使用して、オプティマイザ・コスト、推定バイト数およびpredicateセクションを除外して表示する場合は、'
-BYTES -COST -PREDICATE'を使用します。 -
BASICレベルの情報にオプティマイザによる推定バイト数を追加して表示する場合は、'
BASIC ROWS'を使用します。
-
例
SQL ID 'atfwcg8anrykp'に関連付けられた別の実行計画を表示するには、次のように入力します。
SELECT * FROM table(DBMS_XPLAN.DISPLAY_AWR('atfwcg8anrykp'));
文字列'TOTO'を含む、格納されているすべてのSQL文の実行計画をすべて表示するには、次のように入力します。
SELECT tf.* FROM DBA_HIST_SQLTEXT ht, table
(DBMS_XPLAN.DISPLAY_AWR(ht.sql_id,null, null, 'ALL' )) tf
WHERE ht.sql_text like '%TOTO%';210.4.4 DISPLAY_CURSORファンクション
このテーブル・ファンクションは、カーソル・キャッシュにロードされている任意のカーソルの実行計画を表示します。実行計画に加えて、様々な計画統計(I/O、メモリー、タイミングなど)をレポートできます(V$SQL_PLAN_STATISTICS_ALL VIEWSに基づく)。
構文
DBMS_XPLAN.DISPLAY_CURSOR(
sql_id IN VARCHAR2 DEFAULT NULL,
cursor_child_no IN NUMBER DEFAULT 0,
format IN VARCHAR2 DEFAULT 'TYPICAL');パラメータ
表210-5 DISPLAY_CURSORファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
カーソル・キャッシュ内のSQL文の |
|
|
表示するカーソルの子番号。指定しない場合は、指定したsql_idパラメータに一致する |
|
|
計画の詳細レベルを制御します。次の5つの値を受け入れます。
表示出力をより細かく制御するために、前述のフォーマットのオプションに次のキーワードを追加して、デフォルトの動作をカスタマイズできます。各キーワードは、PLAN TABLEの列の論理グループ( フォーマット・キーワードは、カンマまたはスペースで区切る必要があります。
次のフォーマットは非推奨になっていますが、下位互換性を維持する目的でサポートされています。
フォーマットのキーワードに' |
使用上のノート
-
DISPLAY_CURSOR機能を使用する場合、コール・ユーザーには、固定ビューV$SQL_PLAN_STATISTICS_ALL、V$SQLおよびV$SQL_PLANに対するSELECTまたはREAD権限が必要です。権限がない場合は、エラー・メッセージが表示されます。 -
formatパラメータのバリエーションの例を次に示します。-
projectionおよびnoteセクションを除くすべてを表示する場合は、'
ALL -PROJECTION -NOTE'を使用します。 -
TYPICALフォーマットに(TYPICALフォーマットでは通常除外されている)projectionセクションを追加して表示する場合は、'
TYPICAL PROJECTION'を使用します。TYPICALはデフォルトであるため、'PROJECTION'を使用するのみで同様に表示できます。 -
TYPICALフォーマットを使用して、オプティマイザ・コスト、推定バイト数およびpredicateセクションを除外して表示する場合は、'
-BYTES -COST -PREDICATE'を使用します。 -
BASICレベルの情報にオプティマイザによる推定バイト数を追加して表示する場合は、'
BASIC ROWS'を使用します。
-
例
現行セッションで最後に実行されたSQL文の実行計画を表示するには、次のように入力します。
SELECT * FROM table (
DBMS_XPLAN.DISPLAY_CURSOR);
SQL ID 'atfwcg8anrykp'に関連付けられたすべての子の実行計画を表示するには、次のように入力します。
SELECT * FROM table (
DBMS_XPLAN.DISPLAY_CURSOR('atfwcg8anrykp'));
前の文中に指定されているカーソルに対するランタイム統計を表示するには、次のように入力します。
SELECT * FROM table (
DBMS_XPLAN.DISPLAY_CURSOR('atfwcg8anrykp', NULL, 'ALLSTATS LAST');210.4.5 DISPLAY_PLANファンクション
このテーブル・ファンクションは、CLOB出力タイプの様々な形式でPLAN TABLEの内容を表示します。
構文
DBMS_XPLAN.DISPLAY_PLAN ( table_name IN VARCHAR2 DEFAULT 'PLAN_TABLE', statement_id IN VARCHAR2 DEFAULT NULL, format IN VARCHAR2 DEFAULT 'TYPICAL', filter_preds IN VARCHAR2 DEFAULT NULL, type IN VARCHAR2 DEFAULT 'TEXT') RETURN CLOB;
パラメータ
表210-6 DISPLAY_PLANファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
計画が格納されている表の名前を指定します。このパラメータのデフォルトは |
|
|
表示する計画の |
|
|
計画を格納する表から選択される行のセットを制限するSQLフィルタ述語。値が 計画を格納する表のすべての列を参照できます。また、副問合せ、ファンクション・コールなどのすべてのSQL構文(「使用上のノート」の |
|
|
計画の詳細レベルを制御します。次の5つの値を受け入れます。
表示出力をより細かく制御するために、前述の3つの標準的なformatオプションに次のキーワードを追加して、デフォルトの動作をカスタマイズできます。各キーワードは、PLAN TABLEの列の論理グループ(
フォーマット・キーワードに 目的のPLAN TABLE( |
|
|
出力タイプは次のいずれかです。 |
戻り値
要求されたレポートをCLOBとして戻します。
使用上のノート
アクティブ・レポートには、Enterprise Managerのインタフェースと類似の豊富な対話型ユーザー・インタフェースがあります(Enterprise Managerをインストールする必要はありません)。レポート・ファイルはHTML形式で作成されるため、最近のほとんどのブラウザで解釈可能です。アクティブ・レポートに機能を付与するコードは、最初に表示したときにWebブラウザにより透過的にダウンロードされるため、表示には外部接続が必要です。
警告:
filter_predsパラメータを公開することによって、アプリケーションがSQLインジェクションの影響を受ける可能性があるため、アプリケーション開発者は、十分に検討した後でのみこのパラメータをエンド・ユーザーに公開してください。実際、filter_predsを使用すると、すべての表の参照、またはテーブル・ファンクションを起動するデータベース・ユーザーが権限を持つすべてのサーバー・ファンクションの実行を行うことができます。
210.4.6 DISPLAY_SQL_PLAN_BASELINEファンクション
このテーブル・ファンクションは、SQLプラン・ベースラインの指定したSQLハンドルの1つ以上の実行計画を表示します。
構文
DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE ( sql_handle IN VARCHAR2 := NULL, plan_name IN VARCHAR2 := NULL, format IN VARCHAR2 := 'TYPICAL') RETURN dbms_xplan_type_table;
パラメータ
表210-7 DISPLAY_SQL_PLAN_BASELINEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL文のハンドル。計画を表示するSQL文を識別します。 |
|
|
計画名。特定の計画を識別します。デフォルト値のNULLは、識別されたSQL文に関連付けられたすべての計画が説明され、表示されることを意味します。 |
|
|
書式文字列によって、計画に格納されている情報のうちどの情報が表示されるかが決まります。それぞれ一般的な使用例を表す3つの書式値('BASIC'、'TYPICAL'、'ALL')のいずれかを使用できます。 |
戻り値
PL/SQLタイプの表
使用上のノート
このプロシージャでは、プラン・ベースラインに格納された計画情報を使用して、計画の説明と表示を行います。SQL管理ベースに格納されているplan_idが、生成された計画のplan_idと一致しない場合もあります。格納されたplan_idと生成されたplan_idとの不一致は、生成された計画が再生成不可能な計画であることを意味します。このような計画は無効とみなされ、SQLコンパイル時にオプティマイザによってバイパスされます。
例
TYPICAL形式を使用して、SQLハンドル'SYS_SQL_b1d49f6074ab95af'によって識別されるSQL文のすべての計画を表示します。
SET LINESIZE 150
SET PAGESIZE 2000
SELECT t.*
FROM TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(
'SYS_SQL_b1d49f6074ab95af')) t;BASIC形式を使用して、文字列'HR2'を含む1つ以上のSQL文のすべての計画を表示します。
SET LINESIZE 150
SET PAGESIZE 2000
SELECT t.*
FROM (SELECT DISTINCT sql_handle FROM dba_sql_plan_baselines
WHERE sql_text like '%HR2%') pb,
TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(pb.sql_handle, NULL,
'BASIC')) t;210.4.7 DISPLAY_SQLSETファンクション
このテーブル・ファンクションは、SQLチューニング・セットに格納されている指定した文の実行計画を表示します。
構文
DBMS_XPLAN.DISPLAY_SQLSET( sqlset_name IN VARCHAR2, sql_id IN VARCHAR2, plan_hash_value IN NUMBER := NULL, format IN VARCHAR2 := 'TYPICAL', sqlset_owner IN VARCHAR2 := NULL) RETURN DBMS_XPLAN_TYPE_TABLE PIPELINED;
パラメータ
表210-8 DISPLAY_SQLSETファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQLチューニング・セットの名前。 |
|
|
SQLチューニング・セットに計画を格納しているSQL文のsql_id値を指定します。テーブル・ファンクション |
|
|
オプションのパラメータ。SQL文の特定の格納済実行計画を指定します。指定しない場合は、格納済のすべての実行計画が表示されます。 |
|
|
計画の詳細レベルを制御します。次の4つの値を指定できます。
表示出力をより細かく制御するために、前述の3つの標準的なformatオプションに次のキーワードを追加して、デフォルトの動作をカスタマイズできます。各キーワードは、PLAN TABLEの列の論理グループ(
次の2つのフォーマットは非推奨となっていますが、下位互換性を維持する目的でサポートされています。
フォーマット・キーワードに |
|
|
SQLチューニング・セットの所有者。デフォルトは現行ユーザーです。 |
使用上のノート
formatパラメータのバリエーションの例を次に示します。
-
projectionおよびnoteセクションを除くすべてを表示する場合は、'
ALL -PROJECTION -NOTE'を使用します。 -
TYPICALフォーマットに(TYPICALフォーマットでは通常除外されている)projectionセクションを追加して表示する場合は、'
TYPICAL PROJECTION'を使用します。TYPICALはデフォルトであるため、'PROJECTION'を使用するのみで同様に表示できます。 -
TYPICALフォーマットを使用して、オプティマイザ・コスト、推定バイト数およびpredicateセクションを除外して表示する場合は、'
-BYTES -COST -PREDICATE'を使用します。 -
BASICレベルの情報にオプティマイザによる推定バイト数を追加して表示する場合は、'
BASIC ROWS'を使用します。
例
'OLTP_optimization_0405'という名前のSQLチューニング・セットのSQL ID 'gwp663cqh5qbf'およびPLAN HASH 3693697075に関連付けられたSQL文の実行計画を表示するには、次のように入力します。
SELECT * FROM table (
DBMS_XPLAN.DISPLAY_SQLSET(
'OLTP_optimization_0405','gwp663cqh5qbf', 3693697075));
SQLチューニング・セットに格納されているSQL ID 'atfwcg8anrykp'のすべての実行計画を表示するには、次のように入力します。
SELECT * FROM table (
DBMS_XPLAN.DISPLAY_SQLSET(
'OLTP_optimization_0405','gwp663cqh5qbf'));
前の文中に指定されているSQL文に対するランタイム統計を表示するには、次のように入力します。
SELECT * FROM table (
DBMS_XPLAN.DISPLAY_SQLSET(
'OLTP_optimization_0405', 'gwp663cqh5qbf', NULL, 'ALLSTATS LAST');