インスタンスの Explain 情報
Explain インスタンス情報は EXPLAIN_INSTANCE 表に保管されます。 インスタンス内の各照会ステートメントに関する特定の付加的な情報は、 EXPLAIN_STATEMENT 表に保管されます。
Explain インスタンスの識別
以下の情報を用いると、特定の Explain インスタンスを識別し、特定のステートメントに関する情報をこの Explain 機能の特定の呼び出しに関連付ける上で役立ちます。
- Explain 情報を要求したユーザー
- Explain 要求が開始された時刻
- Explain されたステートメントが入っているパッケージの名前
- Explain されたステートメントが入っているパッケージの SQL スキーマ
- SQL ステートメントが入っていたパッケージのバージョン
- スナップショット情報が収集されたかどうか
環境設定
照会コンパイラーが照会を最適化したデータベース・マネージャー環境に関する情報がキャプチャーされます。 環境情報には、以下のものが含まれます。
- Db2® 製品のバージョンとリリース番号。
- 照会のコンパイルに使用された並列処理の度合い
CURRENT DEGREE 特殊レジスター、DEGREE バインド・オプション、 SET RUNTIME DEGREE コマンド、および dft_degree データベース構成パラメーターによって、特定の照会をコンパイルする際の並列処理の度合いが決まります。
- ステートメントが動的と静的のどちらか
- 照会のコンパイルに使用される照会最適化クラス
- 照会のコンパイル時に出現するカーソルの行ブロッキングのタイプ
- 照会が実行される分離レベル
- 照会がコンパイルされたときのさまざまな構成パラメーターの値。 Explain スナップショットがとられるときに、以下のパラメーターの値が記録されます。
- ソート・ヒープ・サイズ (sortheap)
- アクティブ・アプリケーションの平均数 (avg_appls)
- データベース・ヒープ (dbheap)
- ロック・リストの最大ストレージ (locklist)
- エスカレーション前のロック・リストの最大パーセント (maxlocks)
- CPU 速度 (cpuspeed)
- 通信帯域幅 (comm_bandwidth)
ステートメントの識別
それぞれの Explain インスタンスごとに、複数のステートメントが Explain されている場合があります。 Explain インスタンスを一意的に識別する情報に加えて、以下の情報は個々の照会ステートメントを識別するのに役立ちます。
- ステートメントのタイプ。SELECT、DELETE、INSERT、UPDATE、位置指定 DELETE、位置指定 UPDATE、または SET INTEGRITY
- SYSCAT.STATEMENTS カタログ・ビューに記録された、ステートメントを発行するパッケージのステートメントおよびセクション番号
EXPLAIN_STATEMENT 表内の QUERYTAG および QUERYNO フィールドには、
Explain 処理の一部として設定されている ID が含まれています。 EXPLAIN MODE または EXPLAIN SNAPSHOT がアクティブであり、コマンド・ライン・プロセッサー (CLP) またはコール・レベル・インターフェース (CLI) セッション中に動的 Explain ステートメントがサブミットされた場合、QUERYTAG 値はそれぞれCLP
またはCLI
に設定されます。 この場合、デフォルトで QUERYNO 値は、各ステートメントごとに 1 以上ずつ増分される数になります。 その他の動的 Explain ステートメントのうち、CLP からでも CLI からでもないもの、または EXPLAIN ステートメントを使用しないものの場合はすべて、QUERYTAG 値はブランクに設定され、QUERYNO が常に 1 になります。
コスト見積もり
Explain されたステートメントごとに、選択されたアクセス・プランを実行するために要する相対コストの見積もりがオプティマイザーにより記録されます。 このコストは、timeron という考案された相対計測単位で示されます。 経過時間の見積もりは、次の理由で提供されません。
- 照会オプティマイザーは経過時間ではなく、リソースの消費のみを見積もる。
- オプティマイザーは、経過時間に影響を及ぼす可能性のある因数をすべてモデル化するわけではありません。 アクセス・プランの効率に影響を及ぼさない因数は無視します。 実行時の因数の数は経過時間に影響します。 これには、次のものが含まれます。 システムのワークロード、リソース競合の量、並列処理と入出力の量、 行をユーザーに戻すためのコスト、およびクライアントとサーバーの間の通信時間。
ステートメント・テキスト
Explain されたステートメントごとに、ステートメント・テキストが 2 つのバージョンで記録されます。 1 つのバージョンは、照会コンパイラーがアプリケーションから受信するコードです。 もう 1 つのバージョンは、照会の内部 (コンパイラー) 表記からの逆変換です。 この変換は他の照会ステートメントに似ているように見えますが、
必ずしも正しい照会言語構文に従っているわけでも、
内部表記の実際の内容全体を反映しているわけでもありません。 この変換は、単に、オプティマイザーがアクセス・プランを選択する元となるコンテキストをユーザーが理解できるようにするために提供されています。 照会をさらに最適化するためにコンパイラーでどのように書き直されたかを理解するには、
ユーザー作成のステートメント・テキストを照会ステートメントの内部表記と比較します。 書き直されたステートメントには、トリガーや制約などのステートメントに影響を及ぼす他の要素も示されます。 この
最適化されたテキストで使用されるキーワードには、以下のものがあります。
- $Cn
- 派生列の名前。n は整数値を表します。
- $CONSTRAINT$
- このタグは、コンパイル中に元のステートメントに追加された制約を示します。$WITH_CONTEXT$ 接頭部と組み合わせて表示されます。
- $DERIVED.Tn
- 派生表の名前。 n は整数値を示します。
- $INTERNAL_FUNC$
- このタグは、Explain が実行された照会に対してコンパイラーが使用する機能があるものの、 それは汎用には使用できないことを示します。
- $INTERNAL_PRED$
- このタグは、Explain が実行された照会のコンパイル中に追加された述部があるものの、それは汎用には使用できないことを示します。 内部述部は、トリガーまたは制約のために元のステートメントに追加された付加的なコンテキストを満たすために、コンパイラーが使用します。
- $INTERNAL_XPATH$
- このタグは、単一のアノテーション付き XPath パターンを入力パラメーターとして取り、 かつそのパターンに一致する 1 つ以上の列のある表を返すような内部表関数が存在することを示します。
- $RID$
- このタグは、特定の行の行 ID (RID) 列を示します。
- $TRIGGER$
- このタグは、コンパイル中に元のステートメントに追加されたトリガーを示します。$WITH_CONTEXT$ 接頭部と組み合わせて表示されます。
- $WITH_CONTEXT$(...)
- 元の照会ステートメントに付加的なトリガーまたは制約が追加されると、この接頭部がテキストの先頭に表示されます。 この接頭部の後に、ステートメントのコンパイルおよび解決に影響を与えるトリガーまたは制約の名前のリストが表示されます。