0

sqlplus からの特定の sql_id について、そのオプティマイザが現在 SQL 計画履歴 (承認済みおよび未承認の計画) に持っているすべての計画のリストを確認するにはどうすればよいですか?

4

1 に答える 1

0

計画は、計画ベースラインにある場合にのみ承認されます。ステートメントの計画履歴には、承認済みと未承認の両方のすべての計画が含まれています。オプティマイザが計画ベースラインで最初に承認された計画を生成した後、後続のすべての未承認計画が計画履歴に追加され、検証を待ちますが、SQL 計画ベースラインには含まれません。

Oracle Database 12c 以降、SMB は、SQL ステートメントの計画履歴に追加された新しい計画の計画行を格納します。DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE関数は、SMB から計画をフェッチして表示します。Oracle Database 12c より前に作成されたプランの場合、SMB は行を格納しないため、関数は SQL ステートメントをコンパイルしてプランを生成する必要があります。

プランを表示するには

SELECT PLAN_TABLE_OUTPUT
FROM   V$SQL s, DBA_SQL_PLAN_BASELINES b, 
       TABLE(
         DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(b.sql_handle,b.plan_name,'basic') 
       ) t
WHERE  s.EXACT_MATCHING_SIGNATURE=b.SIGNATURE
AND    b.PLAN_NAME=s.SQL_PLAN_BASELINE
AND    s.SQL_ID='31d96zzzpcys9';
于 2014-08-21T13:22:19.037 に答える