SQLステートメントのEXPLAIN出力

SQLステートメントのEXPLAIN出力レポートは、SQLステートメントのDB2 EXPLAIN出力を参照するのに便利です。EXPLAINはDb2オプティマイザーを通じてSQLステートメントを渡します。オプティマイザーは選択したアクセス パスを指定のEXPLAIN表に置きます。Strobeでは、PLAN_TABLEからEXPLAINデータにアクセスします。また、オプションとしてDSN_PREDICAT_TABLEとDSN_STAT_FEEDBACK(DB2 V11)が存在する場合は、これらの表からもアクセスします。これらは、列の名前と定義があらかじめ設定された標準のDB2の表です。

レポート詳細

[プラン表の行]

照会ブロック番号の隣のをクリックすると、その行の詳細情報が表示されます。

  • QBLOCKNOは、個別のSQLステートメントのセクション(照会、副照会、UNIONなど)を示します。QBLOCKNOでは、一番外側のセクションを1として、ステートメント内のセクションに順番が付けられます。これは、実行の順番を示すものではありません。

  • PLANNOは、QBLOCKNO内のステップの実行順序(表の結合順など)を示します。

  • METHODは、結合方式、またはPLANNOステップの処理にソートが使用されるかどうかを示します。

METHOD

意味

0

PLANNO=1の場合に現在のステップでアクセスされる最初の表、または結合の外部表

1

ネスト ループ結合

2

マージ スキャン結合

3

ORDER BY、GROUP BY、SELECT DISTINCT、UNION、または比較述部に必要な独立したソート。このステップは新規表にアクセスしません。

4

ハイブリッド結合

  • INDEXONLYは、ステップ(PLANNO)で索引エントリーのみがアクセスされる場合にはY(Yes)、すべてのエントリーがアクセスされる場合にはN(No)になります。

  • CREATORは、新規表の作成者、またはこのステップ(PLANNO)でアクセスされるマテリアライズ視点の作成者の許可IDを示します。METHOD=3の場合、CREATORはブランクになります。

  • TNAMEは、新規表の名前、またはこのステップ(PLANNO)でアクセスされるマテリアライズ視点の名前です。METHOD=3の場合、TNAMEはブランクになります。

  • ACCESSCREATORは、ACCESSTYPEがI、I1、N、NR、MX、またはDXの場合、索引スキャンで使用される索引の作成者を示します。それ以外の場合、ACCESSCREATORはブランクになります。

  • ACCESSNAMEは、ACCESSTYPEがI、I1、H、MH、N、NR、MX、またはDXの場合、索引スキャンで使用される索引の名前を示します。また、ACCCESSTYPE=Pの場合は、MIXOPSEQ内のペアワイズ結合レグを示します。それ以外の場合、ACCESSNAMEはブランクになります。

  • ACCESSTYPEは、新規表へのアクセスに使用される方式を定義します。索引スキャンの場合、表へのアクセスには、ACCESSCREATORとACCESSNAMEで示される索引が使用されます。表アクセスは、以下のとおりです。

ACCESSTYPE

意味

I

MATCHCOLS>0の場合は突き合わせ索引スキャン、MATCHCOLS=0の場合は非突き合わせ索引スキャン

I1

1回のフェッチによる索引スキャン

N

突き合わせ述部に「IN」キーワードが含まれる索引スキャン

R

表スペースのスキャン

M

複数索引スキャン。以下の文字が後ろに続きます。

MX-RIDのみを検索する突き合わせ索引スキャン

MI-複数索引からのRIDの論理積

MU-複数索引からのRIDの和

DI

複数リストからのDOCIDの論理積による最終DOCIDリスト

DU

複数リストからのDOCIDの和による最終DOCIDリスト

DX

PLAN_TABLE列ACCCESNAMEの索引を使ったXML索引スキャンによるDOCIDリスト

E

行変更タイムスタンプ列を使った直接行アクセス

P

動的ペアワイズ索引スキャン

RW

マテリアライズされたユーザー定義表関数の結果を含む作業ファイルのスキャン

V

SELECT内のINSERTステートメントのバッファー

H

ハッシュ アクセス。オーバーフロー状態が発生した場合、ACCESSCREATOR列とACCESSNAME列はハッシュ オーバーフロー索引を示します。

HN

IN述部またはDB2によって生成されたIN述部を使ったハッシュ アクセス。オーバーフロー状態が発生した場合、ACCESSCREATOR列とACCESSNAME列はハッシュ オーバーフロー索引を示します。

IN

突き合わせ述部にIN述部が含まれ、メモリー内の表がINリストによってアクセスされる索引スキャン

MH

ACCESSNAMEに示されるハッシュ オーバーフロー索引の使用

N

DB2が照会を再処理してINキーワードを使用する索引スキャン、または突き合わせ述部にINキーワードが含まれる索引スキャン

O

副照会の結果を含む作業ファイルのスキャン

NR

範囲リスト アクセス

ブランク

INSERTの宛先表、またはUPDATEとDELETEのWHERE CURRENT OFカーソル(それ以外の場合は該当なし)

  • MATCHCOLSは、ACCESSTYPEがI、I1、N、NR、MX、またはDXの場合、索引スキャンで使用される索引列の数を示します。それ以外の場合、MATCHCOLSの値は0になります。

  • SORTN_UJOG

  • 先頭文字は、SORTN_UNIQの値を表します。ソートが新規表で実行され重複する行が削除される場合はY(Yes)、ソートが実行されない場合はN(No)です。

  • 2番めの文字はSORTN_JOINの値を表します。ソートがマージ スキャン結合(METHOD=2)の内部表で実行されるか、ハイブリッド結合(METHOD=4)の内部表RIDと中間表で実行される場合はY(Yes)、ソートが実行されない場合はN(No)です。

  • 3番めの文字は、SORTN_ORDERBYの値を表します。ソートがORDER BY文節の新規表で実行される場合はY(Yes)、ソートが実行されない場合はN(No)です。

  • 4番めの文字は、SORTN_GROUPBYの値を表します。ソートがGROUP BY文節の新規表で実行される場合はY(Yes)、ソートが実行されない場合はN(No)です。

  • SORTC_UJOG

  • 先頭文字は、SORTC_UNIQの値を表します。ソートが複合表で実行され重複する行が削除される場合はY(Yes)、ソートが実行されない場合はN(No)です。

  • 2番めの文字はSORTC_JOINの値を表します。ソートがネストされたループ結合(METHOD=1)の複合表で実行されるか、マージ スキャン結合(METHOD=2)の複合表で実行されるか、ハイブリッド結合(METHOD=4)の複合表RIDと中間表で実行される場合はY(Yes)、ソートが実行されない場合はN(No)です。

  • 3番めの文字は、SORTC_ORDERBYの値を表します。ソートがORDER BY文節の新規表で実行される場合はY(Yes)、ソートが実行されない場合はN(No)です。

  • 4番めの文字は、SORTC_GROUPBYの値を表します。ソートがGROUP BY文節の新規表で実行される場合はY(Yes)、ソートが実行されない場合はN(No)です。

  • TSLOCKMODEは、新規表を含む表スペースのロック モードを以下のように示します。

IS

意図的共用

IX

意図的排他

S

共用

X

排他

SIX

意図的排他の共用

U

更新

N

ロックなし、UR分離

以下の値は、ロック モードがバインド時に判別されなかったことを示します。

NS

実行時の分離レベルが非コミット読み取りの場合、Db2はロックを取得しません。レベルがカーソル固定または反復可能読み取りの場合、Db2は共用ロックを取得します。

NIS

実行時の分離レベルが非コミット読み取りの場合、Db2はロックを取得しません。レベルがカーソル固定または反復可能読み取りの場合、Db2は意図的共用ロックを取得します。

NSS

実行時の分離レベルが非コミット読み取りの場合、Db2はロックを取得しません。レベルがカーソル固定の場合、Db2は意図的共用ロックを取得します。レベルが反復可能読み取りの場合、Db2は共用ロックを取得します。

SS

実行時の分離レベルが非コミット読み取りまたはカーソル固定の場合、Db2は意図的共用ロックを取得します。レベルが反復可能読み取りの場合、Db2は共用ロックを取得します。

  • PREFETCHは、プリフェッチによってデータ ページが事前に読み取られるかどうかを以下のように示します。

D

オプティマイザーは動的プリフェッチを予期

S

順次プリフェッチ(表スペース)

L

リスト プリフェッチ(索引)

U

未ソートRIDリストを使ったリスト プリフェッチ

ブランク

不明またはプリフェッチなし

  • MIXOPSEQは、複数索引操作におけるステップの順序(ACCESSTYPE=MX、MI、MU、DX、DI、DUの場合)、SQLステートメントでのOR述部のシーケンス番号(ACCESSTYPE=NRの場合)、または0を示します。

  • TABNOは、FROM文節で参照される表の順序を示します。TABNOは、同じ表への複数の参照を区別するのに役立ちます。METHOD=3の場合、TABNOには0が含まれます。

  • ACCESS_DEGREE_IDは、照会が起動する並列入出力ストリームの数です。

  • 並列入出力ストリームの数が0の場合には、従属述部がホスト変数を使用してコーディングされているため、DB2がバインド時に並列入出力ストリームの数を判別できなかったことを示しています。

  • 並列入出力ストリームの数が1以上の場合、DB2は並列アクセスを実行した可能性があります。この数はバインド時に判別されますが、実行時に選択される並列入出力ストリームの数が異なることもあります。

  • JOIN_DEGREEは、新規表に複合表を結合するために使用される並列操作またはタスクの数と、その結合処理の並列グループの識別子を示しています。

  • 並列操作の数がNULLではない場合、アクセスは並列実行されます。

  • 並列グループの識別子がNULLの場合、結合は並列実行されません。

並列操作の数と並列グループの識別子は、バインド時に決定されます。実行時の実際の値は異なる場合があります。

  • ACCESS_PGROUP_IDは、新規表にアクセスするための並列グループの識別子です。並列グループの識別子は、バインド時に決められます。実行時の実際のグループ識別子は異なる場合があります。

  • JOIN_PGROUP_IDは、複合表にアクセスするための並列グループの識別子です。並列グループの識別子は、バインド時に決められます。実行時の実際のグループ識別子は異なる場合があります。

  • SORTC_PGROUP_IDは、複合表の並列ソートのための並列グループ識別子です。並列グループとは並列実行される連続操作のことで、同数の並列タスクが含まれます。

  • SORTN_PGROUP_IDは、新規表の並列ソートのための並列グループ識別子です。並列グループとは並列実行される連続操作のことで、同数の並列タスクが含まれます。

  • COLUMN_FN_EVALは、列関数がいつ評価されるかを示しています。

R

データ検索時(ステージ1)

S

ソート時(ステージ2)

ブランク

実行時

  • PAR MODEは、バインド時に使用される並列処理(存在する場合)の種類です。

意味

I

照会入出力並列処理

C

照会CP並列処理

X

シスプレックス照会並列処理

ブランク

並列処理なし

  • COLLIDは、パッケージのコレクション識別子を示しています。BIND処理時にEXPLAIN(YES)を指定した場合、COLLIDはパッケージから実行される組み込みEXPLAINステートメントと、そのパッケージに対して生成されるPLAN_TABLE行にのみ適用されます。それ以外の場合、COLLIDはブランクになります。

    DB2バージョン10以上の場合、以下の値がCOLLID列に含まれることがあります。

意味

DYNAMICSQLCACHE

行は動的ステートメント キャッシュから取得されます。

DSNEXPLAINMODEYES

行は、CURRENT EXPLAIN MODE特殊レジスターの値がYESに指定されているアプリケーションから取得されます。

DSNEXPLAINMODEEXPLAIN

行は、CURRENT EXPLAIN MODE特殊レジスターの値がEXPLAINに指定されているアプリケーションから取得されます。

  • VERSIONは、パッケージのバージョン識別子を示しています。BIND処理時にEXPLAIN(YES)を指定した場合、VERSIONはパッケージから実行される組み込みEXPLAINステートメントと、そのパッケージに対して生成されるPLAN_TABLE行にのみ適用されます。それ以外の場合、VERSIONはブランクになります。

  • PARENT_QBLOCKNOは、親照会ブロックのQBLOCKNOを示しています。

  • PAGE_RANGEは、表がページ範囲スクリーニングの対象となるかどうかを示しています。PAGE_RANGEがYの場合、DB2は必要な区分のみをスキャンするプランを生成します。

  • JOIN_TYPEは、結合のタイプを示しています。

意味

F

全外部結合

L

左外部結合(右外部結合が使用されている場合、JOIN_TYPEがLになるように左外部結合に変換されます。)

P

ペアワイズ結合

S

スター型結合

ブランク

内部結合または結合なし

  • MERGE_JOIN_COLSは、マージ スキャン結合(METHOD=2)中に結合される列数です。結合方式がマージ スキャン結合以外の場合は、ブランクになります。

  • CORRELATION_NAMEは、ステートメントで指定された表または視点の相関名です。相関名が指定されない場合は、ブランクになります。

  • GROUP_MEMBERは、EXPLAINステートメントを実行したDb2のメンバー名です。EXPLAINの実行時にDb2サブシステムがデータ共用環境内に存在しなかった場合には、GROUP_MEMBERはブランクになります。

  • PRIMARY_ACCESSTYPEは、以下の内容を示します。

意味

D

Db2は、行に直接アクセスしようとします。実行時に直接アクセスできない場合には、PLAN_TABLEのACCESSTYPE列に示されたアクセス パスが使用されます。

P

Db2がデータへアクセスするのに、データ区分2次索引とパーツ レベル操作が使用されました(Db2バージョン11で導入)。

T

基本表または結果ファイルは、マテリアライズされて作業ファイルになります。この作業ファイルが、散在索引によってアクセスされます。基本表がSQLに関連する場合、ACCESSTYPE列 は、その基本表へのアクセス方法を示します。

ブランク

Db2は、行に直接アクセスしようとしません。

  • TABLE_TYPEは、新しい表のタイプを示します。

意味

I

INリスト述部で新しい表を生成します。INリスト述部をマッチング述部に選択した場合、表にはメモリー内の表としてアクセスされます。

F

 この表は表関数です。

Q

この表は一時的な中間結果表であり、マテリアライズされません。

T

 この表は表関数、一時表、または作業ファイルではありません。

B

この表は、SELECT from INSERT、SELECT from UPDATE、SELECT from MERGE、またはSELECT from DELETEステートメントのバッファーです。

C

この表は共通表式です。

M

この表はマテリアライズ照会表です。

R

この表は再帰的共通表式です。

S

この表は相関または非相関副照会です。

W

この表は中間結果表であり、マテリアライズされて作業ファイルに入れられます。

 

ブランク

この照会は、暗黙ソートを必要とするGROUP BY、ORDER BY、またはDISTINCTを使用します。

  • WHEN_OPTIMIZEは、アクセス パスの最適化がいつ起こるかを示します。

意味

B

アクセス パスは、あらゆるホスト変数、パラメーター マーカー、または特殊レジスターのデフォルトのフィルター係数を使用して、バインド時に決定されています。このパスは、入力ホスト変数、パラメーター マーカー、または特殊レジスターの入力変数を使用して、実行時に再度最適化されます。REOPT(VARS)バインド オプションを指定する必要があります。

R

アクセス パスは、あらゆるホスト変数、パラメーター マーカー、または特殊レジスターの入力変数を使用して、実行時に決定されています。REOPT(VARS)バインド オプションを指定する必要があります。

ブランク

アクセス パスは、あらゆるホスト変数、パラメーター マーカー、または特殊レジスターのデフォルトのフィルター係数を使用して、バインド時に決定されています。

 

  • HINT_USEDは、HINT_USEDの値がPLAN_TABLEのOPTHINT列の値と同じ場合、DB2が1つまたは複数の最適化ヒントを使用したことを示します。最適化ヒントが使用されていない場合は、ブランクになります。

  • OPTHINTは、PLAN_TABLE行をDB2の最適化ヒントとして使用すべきかどうかを示します。OPTHINTに値がある場合、Db2はアクセス パスを選択するときにこの行を入力として使用します。OPTHINTがブランクの場合、バインド時に最適化ヒントが要求されていません。

  • TABLE_ENCODEは、表のエンコード法を示します。

意味

A

単一のCCSIDセット、ASCII

E

単一のCCSIDセット、EBCDIC

U

単一のCCSIDセット、Unicode

M

複数のCCSIDセット

  • TABLE_SCCSIDは、表のSBCS CCSID値を示します。TABLE_ENCODEがMの場合、TABLE_SCCSIDは0です。

  • TABLE_MCCSIDは、表の混在CCSID値を示します。TABLE_ENCODEがMの場合、TABLE_MSCCSIDは0です。

  • TABLE_DCCSIDは、表のDBCS CCSID値を示します。TABLE_ENCODEがMの場合、TABLE_DSCCSIDは0です。

  • ROUTINE_IDは、IBM専用です。

  • CTEREFは、参照される表が共通表式である場合、最上位の照会ブロック番号です。

  • STMTTOKENは、ユーザー指定のステートメント トークンです。

  • PARENT_PLAN_NOは、対応するプラン番号を示します。

[述部表の行]

述部番号の隣のをクリックすると、その述部行の詳細情報が表示されます。

  • PREDNOは、照会内の述部を示す述部番号です。

  • QBLOCKNOは、個別のSQLステートメントのセクション(照会、副照会、UNIONなど)を示します。QBLOCKNOでは、一番外側のセクションを1として、ステートメント内のセクションに順番が付けられます。これは、実行の順番を示すものではありません。

  • TYPEは、述部のタイプまたは述部の関数を示す文字列です。

  • LEFT_HAND_SIDEは、述部の左辺が表の列である場合、列の名前を示します。

  • LEFT_HAND_PNOは、述部が複合述部である場合、最初の子述部を示します。

  • LHS TABNOは、述部の左辺が表の列または式である場合、照会内の対応する表参照を示す番号です。

  • LHS_QBNOは、述部の左辺が表の列または式である場合、照会の特定のブロックを示す番号です。

  • RIGHT_HAND_SIDEは、述部の右辺が表の列である場合、列の名前を示します。

  • RIGHT_HAND_PNOは、述部が複合述部である場合、2つめの子述部を示します。

  • RHS TABNOは、述部の右辺が表の列または式である場合、照会内の対応する表参照を示す番号です。

  • RHS_QBNOは、述部の右辺が副照会または式である場合、照会の特定のブロックを示す番号です。

  • SEARCHARGは、データ マネージャーが述部を処理できるかどうかを示します。

  • AFTER JOINは、述部評価のフェーズを示します。

  • ADDED PREDは、述部が推移的閉包によって作成されるかどうかを示します。

  • REDUNANT PREDは、述部が冗長述部であるかどうかを示します。

  • KEY FIELDは、適用可能な索引に対する表の索引キー列が述部に含まれるかどうかを示します。

  • FILTER FACTORは、見積もりフィルター係数を示します。

  • BOOLEAN TERMは、述部によってWHERE文節の値が判別できるかどうかを示します。

  • DIRECT ACCESSは、直接行ナビゲーションによって述部にアクセスできるかどうかを示します。

  • MARKERは、述部にホスト変数、パラメーター、レジスターが含まれるかどうかを示します。

  • PARENT PNOは、親述部の番号を示します。

  • NEGATIONは、述部が否定されたかどうかを示します。

  • ORIGINは、述部の起源を示します。

  • CLAUSEは、述部が属する文節を示します。

  • TEXTは、述部のテキストを示します。

  • LITERALSは、リテラル値を示します。

欠落または矛盾するカタログ統計 - 統計フィードバック表の行(DB2バージョン11の新機能)

照会番号の隣のをクリックすると、その照会のカタログ統計フィードバック行の詳細情報が表示されます。

  • QUERYNO(照会番号)は、EXPLAINされたステートメントを識別する照会番号です。

  • TYPE OF STATISTIC REQUIRED(必要な統計タイプ)は、収集された統計のタイプです。

  • DATABASE NAME(データベース名)は、データベースの名前です。

  • TABLESPACE NAME(表スペース名)は、表スペースの名前です。

  • REASON RUNSTATS REQUIRED(RUNSTATSが必要な理由)は、統計が推奨された理由です。

  • SECTION NUMBER(セクション番号)は、ステートメントのセクション番号です。

  • TABLE CREATOR(表作成者)は、表の作成者です。

  • TABLE NAME(表名)は、表の名前です。

  • INDEX CREATOR(索引作成者)は、索引の作成者です。

  • INDEX NAME(索引名)は、索引の名前です。

  • NUMBER OF COLUMNS IN GROUP(グループ内の列数)は、列グループ内の列の数です。

  • COLUMNS IN GROUP(グループ内の列)は、統計に関連付けられた列セットを識別する表現です。

  • PLAN(プラン)は、アプリケーション プランの名前です。

  • PACKAGE(パッケージ)は、EXPLAINされたステートメントが含まれているパッケージの名前です。

  • COLLECTION ID(コレクションID)は、コレクションIDです。

  • GROUP NAME(グループ名)は、EXPLAINを実行したDb2のメンバー名です。

  • TIME EXECUTED(実行された時間)は、EXPLAIN時間です。