Explain 表および Explain 情報の編成

Explain インスタンス は 1 つまたは複数の SQL または XQuery ステートメントごとに、1 回の Explain 機能の呼び出しを示します。 1 つの Explain インスタンス内でキャプチャーされる Explain 情報には、 コンパイル環境に関する情報、ならびにコンパイル対象となっている SQL ステートメントまたは XQuery ステートメントを満たすために選ばれるアクセス・プランに関する情報が含まれます。

例えば、Explain インスタンスは、以下のいずれかの項目で構成される場合があります。
  • 静的照会ステートメントでは、1 つのパッケージに入っているすべての適格な SQL または XQuery ステートメント。 SQL ステートメント (XML データを照会するステートメントを含む) の場合、 CALL、コンパウンド SQL (動的)、DELETE、INSERT、MERGE、REFRESH TABLE、SELECT、SELECT INTO、SET INTEGRITY、UPDATE、VALUES、および VALUES INTO の各ステートメントに関する Explain 情報をキャプチャーできます。 XQuery ステートメントの場合、XQUERY db2-fn:xmlcolumn および XQUERY db2-fn:sqlquery ステートメントに関する Explain 情報を取得することができます。
    注: REFRESH TABLE および SET INTEGRITY ステートメントは、動的にのみコンパイルされます。
  • 増分バインド SQL ステートメントでは、1 つの特定の SQL ステートメント。
  • 動的 SQL ステートメントでは、1 つの特定の SQL ステートメント。
  • 各 EXPLAIN ステートメント (動的または静的)。
EXPLAIN ステートメントを発行するかセクション Explain インターフェースを使用することにより呼び出すことができる Explain 機能は、特定の Explain 可能ステートメントのために選択されるアクセス・プランに関する情報をキャプチャーし、その情報を Explain 表に書き込みます。 EXPLAIN ステートメントを発行する前に、Explain 表を作成する必要があります。 この表を作成するには、以下のいずれかの方法を使用します。
  • sqllib サブディレクトリーの misc サブディレクトリーで EXPLAIN.DDL スクリプトを実行します。
  • SYSPROC.SYSINSTALLOBJECTS プロシージャーを使用します。 このプロシージャーを使用して、Explain 表のドロップおよび妥当性検査を行うこともできます。
この表は、特定のスキーマおよび表スペースの下に作成することができます。 サンプルは、EXPLAIN.DDL ファイル内にあります。

Explain 表は、複数のユーザーに共通にすることができます。 あるユーザー用の表を定義してから、その定義した表を指す別名を各追加ユーザー用に作成できます。 別の方法として、SYSTOOLS スキーマの下に Explain 表を定義することもできます。 ユーザーのセッション ID (動的 SQL ステートメントまたは動的 XQuery ステートメントの場合)、またはステートメントの許可 ID (静的 SQL ステートメントまたは静的 XQuery ステートメントの場合) の下に Explain 表も別名もない場合、 Explain 機能は SYSTOOLS スキーマをデフォルトとして使用します。 共通の Explain 表を共有する各ユーザーは、それらの表に対する INSERT 特権を保持していることが必要です。

次の表に、各 Explain 表の目的を要約します。

表 1. Explain 表のサマリー
表名 説明
ADVISE_INDEX 推奨索引に関する情報が格納されます。 この表のデータは、照会コンパイラーまたは db2advis コマンドを使用して設定することもできますし、ユーザーが自分で設定することもできます。 この表は、推奨索引の取得および提案された索引の評価を行うために使用されます。
ADVISE_INSTANCE db2advis コマンドの実行に関する情報が入ります。 これには開始時刻に関する情報も含まれます。 この表には、db2advis コマンドの実行ごとに 1 行が入ります。
ADVISE_MQT 以下の情報が格納されます。
  • 推奨される各マテリアライズ照会表 (MQT) を定義する照会
  • 各 MQT の列統計。COLSTATS (XML 形式) や NUMROWS など
  • 各 MQT の詳細な統計を取得するためのサンプリング照会
ADVISE_PARTITION db2advis コマンドによって生成および評価される仮想データベース・パーティションを保管します。
ADVISE_TABLE MQT、マルチディメンション・クラスタリング表 (MDC)、およびデータベース・パーティションに関する設計アドバイザーの最終的な推奨値を使った、表作成のためのデータ定義言語 (DDL) ステートメントを保管します。
ADVISE_WORKLOAD ワークロード内の SQL ステートメントまたは XQuery ステートメントごとに 1 つの行が入ります。 db2advis コマンドは、この表を使ってワークロード情報を収集し、保管します。
EXPLAIN_ACTUALS Explain セクション actuals 情報を含みます。
EXPLAIN_ARGUMENT 各演算子に固有の特性に関する情報がある場合、それを格納します。
EXPLAIN_DIAGNOSTIC EXPLAIN_STATEMENT 表で EXPLAIN されたステートメントの特定のインスタンスに対して生成された各診断メッセージの項目を含みます。
EXPLAIN_DIAGNOSTIC_DATA EXPLAIN_DIAGNOSTIC 表で記録された診断メッセージのメッセージ・トークンを含みます。 メッセージ・トークンは、メッセージを生成した SQL ステートメントの実行に固有の追加情報を提供します。
EXPLAIN_INSTANCE すべての Explain 情報用の主コントロール表です。 Explain 表の各行は、この表内の固有の行にリンクされます。 Explain 対象の SQL ステートメントまたは XQuery ステートメントのソースに関する基本情報および環境情報が、この表に保持されます。
EXPLAIN_OBJECT SQL または XQuery ステートメントを満たすために生成されるアクセス・プランに必要なデータ・オブジェクトを示します。
EXPLAIN_OPERATOR 照会コンパイラーが SQL または XQuery ステートメントを満たすために必要とするすべての演算子が入っています。
EXPLAIN_PREDICATE 特定の演算子によって適用される述部を識別します。
EXPLAIN_STATEMENT さまざまなレベルの Explain 情報に関して発行された SQL ステートメントまたは XQuery ステートメントのテキストが格納されます。 発行した SQL ステートメントまたは XQuery ステートメントと、オプティマイザーがアクセス・プランを選択するときに使用するバージョンが、この表に格納されます。

Explain スナップショットが要求されると、照会オプティマイザーが選択したアクセス・プランを説明する付加的な Explain 情報が記録されます。 この情報は、EXPLAIN_STATEMENT 表の SNAPSHOT 列に保管されます。

EXPLAIN_STREAM 個々の演算子とデータ・オブジェクトの間の入出力データ・ストリームを表します。 演算子は、EXPLAIN_OPERATOR 表に示されます。 データ・オブジェクトは、EXPLAIN_OBJECT 表に示されています。
OBJECT_METRICS 特定の時刻におけるセクションの特定の実行で参照されるオブジェクトごとの実行時統計を含みます。 複数のメンバーについてのオブジェクト統計を収集する場合、この表にはオブジェクトが参照されたメンバーごとに 1 行が含まれます。 パーティション化されたオブジェクトについてのオブジェクト統計を収集する場合、この表にはデータ・パーティションごとに 1 行が含まれます。

この表に情報が格納されるのは、アクティビティー・イベント・モニターによってセクション actuals がキャプチャーされる場合のみです。