EXPLAIN 表の行の削除

Db2はEXPLAIN表に自動的に行を追加します。 ただし、表からの行の自動的な削除は行いません。

このタスクについて

他のユーザー表と同様に、DELETE ステートメントまたは TRUNCATEステートメントを発行して、PLAN_TABLE および関連する各種の EXPLAIN 表からデータを除去します。

各種の EXPLAIN 表内の対応する行を特定するには、QUERYNO、GROUP_MEMBER、および EXPLAIN_TIME の各列を使用できます。 APPLNAME や PROGNAME などの他の列もこの目的に使用できます。

EXPLAIN 表データの保持に関する方針を検討する際は、静的 SQL ステートメントでは EXPLAIN レコードを保持する必要がない場合があることを覚えておいてください。EXPLAIN PACKAGE ステートメントを発行すると、EXPLAIN データをいつでも再キャプチャーできるためです。

重要: 一部の最適化ツールは、さまざまなEXPLAINテーブルのインスタンスに依存しています。 そのようなツール用に作成されているデータや EXPLAIN 表のインスタンスを削除または除去しないように注意してください。

プロシージャー

プログラム固有のプログラミングインターフェース情報の開始。廃止されたEXPLAIN表の行を削除するには、以下のいずれかの方法を使用できます。

  • 行の経過時間に基づいて EXPLAIN 表から行を除去する場合は、DELETE ステートメントを使用します。
    この方法は、開発環境での使用に最も適しています。
    例えば、次のステートメントを使用して、特定の EXPLAIN 表から 1 カ月を過ぎているすべての行を削除できます。
    DELETE FROM table-name WHERE EXPLAIN_TIME < CURRENT TIMESTAMP - 1 MONTH;
    
  • 使用できなくなった、または不要になった PLAN_TABLE の行を選択的に削除する方法を確立してから、DELETE ステートメントを使用して、残っている PLAN_TABLE の行に基づいて、関連する EXPLAIN 表から選択的に行を除去します。
    例えば、次のステートメントでは、PLAN_TABLE に対応する行のない DSN_DETCOST_TABLE から行が削除されます。
    DELETE FROM DSN_DETCOST_TABLE DT
    WHERE NOT EXISTS
    (SELECT 1
     FROM PLAN_TABLE PT
     WHERE PT.QUERYNO = DT.QUERYNO
     AND PT.APPLNAME = DT.APPLNAME
     AND PT.PROGNAME = DT.PROGNAME
     AND PT.GROUP_MEMBER = DT.GROUP_MEMBER
     AND PT.EXPLAIN_TIME = DT.EXPLAN_TIME);
    この例では、多数の重複する QUERYNO 値が存在する場合に副照会のパフォーマンスを向上するため、APPLNAME 列と PROGNAME 列が組み込まれています。 この方法では、ロック競合などのパフォーマンス上の問題を回避するために、以下のアクションを行ってください。
    • PLAN_TABLE の列 QUERYNO、 APPLNAME、 PROGNAME、 EXPLAIN_TIME、 GROUP_MEMBER に索引が存在することを確認します。 PLAN_TABLE_HINT_IX 索引は、この目的に適しています。 PLAN_TABLE_HINT_IXインデックスの作成に関する詳細は、「アクセスパスの影響を及ぼす準備」 を参照してください。
    • 各 EXPLAIN 表に DELETE ステートメントを発行する前に、その表をロックします。
    • 表ごとに DELETE ステートメントの後に COMMIT ステートメントを発行します。
  • EXPLAIN 表に DROP ステートメントを発行し、新たな EXPLAIN 表セットを作成します。
    ADMIN_EXPLAIN_MAINT ストアード・プロシージャーを呼び出し、DROP_AND_CREATE アクションを指定して EXPLAIN 表セットを置き換えることもできます。
    この方法を使用する場合、既存のEXPLAIN表データは保持されません。プログラム固有のプログラミングインターフェース情報を終了します。