トップ 一覧 ping 検索 ヘルプ RSS ログイン

DB2 EXPLAIN の実行の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!DB2 EXPLAIN の実行
[DB2][Database]{{category DBパフォーマンス}}
!!EXPLAIN
*Explain 可能ステートメント のアクセスパス選択情報を入手
* Explain  可能ステートメントとは、SELECT  または INSERT  ステートメント、または検索形式の UPDATE  または DELETE  ステートメント

!呼び出し
*事前にプラン表を作成しておく
*以下の呼び出しで、explainable-sql-statement の分析結果がプラン表に格納される
::例1
 EXPLAIN PLAN FOR explainable-sql-statement
::例2
 EXPLAIN PLAN SET  QUERYNO=integer FOR explainable-sql-statement

!!プラン表の作成

*http://www-01.ibm.com/support/docview.wss?uid=swg21596631
!【V9.1 の作成方法】
Unix/Linux 環境では $INSTHOME/sqllib/misc/EXPLAIN.DDL に、Windows 環境では %DB2PATH%\MISC\EXPLAIN.DDL に EXPLAIN 表の DDL が保管されています。
DDL では表のスキーマ名や表スペースは指定されていないため、表は CURRENT SCHEMA のスキーマ名で、ユーザーに USE 特権が付与されている表スペース内に作成されます。
以下のように DDL を実行してください。
*[Unix/Linux 環境の場合] 
 $ db2 connect to [データベース名] 
 $ db2 -tf ~/sqllib/misc/EXPLAIN.DDL 
*[Windows 環境の場合] 
 > db2 connect to [データベース名] 
 > db2 -tf "%DB2PATH%\MISC\EXPLAIN.DDL" 

!【V9.1 の削除方法】 
EXPLAIN.DDL の中で CREATE されているオブジェクトを確認し DROP してください。 
オブジェクトの中には依存関係が設定されているものがあるため、CREATE の時と逆の順番で削除してください。 
!【V9.5 以降の作成方法】 
V9.5 以降では上記の EXPLAIN.DDL を利用する以外に、SYSINSTALLOBJECTS プロシージャーを利用して EXPLAIN 表を作成することもできます。 
プロシージャーの第 3 引数は表を作成する表スペース名を、第 4 引数には表のスキーマ名を指定してください。 
それぞれ NULL もしくは空文字の場合、SYSTOOLSPACE 表スペースに SYSTOOLS スキーマで作成されます。 
SYSTOOLSPACE 表スペースがまだ存在しない場合、自動で作成されます。 

以下の実行例では、SYSTOOLSPACE 表スペースに、接続ユーザー名のスキーマで Explain 表を作成します。 
 $ db2 connect to [データベース名] 
 $ db2 "call SYSPROC.SYSINSTALLOBJECTS( 'EXPLAIN', 'C' , '', CURRENT USER )" 

!【V9.5 以降の削除方法】 
SYSINSTALLOBJECTS プロシージャーを利用して、Explain 表を削除できます。 
第 4 引数には DROP する表のスキーマ名を指定してください。 
NULL もしくは空文字の場合、SYSTOOLS スキーマの表が削除されます。 

以下の実行例では、接続ユーザー名のスキーマの Explain 表を削除します。 
 $ db2 connect to [データベース名] 
 $ db2 "call SYSPROC.SYSINSTALLOBJECTS( 'EXPLAIN', 'D', '', CURRENT USER )"

!以下の SQL  ステートメントを実行

 CREATE TABLE userid.PLAN_TABLE
    (QUERYNO            INTEGER       NOT NULL,
     QBLOCKNO           SMALLINT      NOT NULL,
     APPLNAME           CHAR(8)       NOT NULL,
     PROGNAME           CHAR(8)       NOT NULL,
     PLANNO             SMALLINT      NOT NULL,
     METHOD             SMALLINT      NOT NULL,
     CREATOR            CHAR(8)       NOT NULL,
     TNAME              CHAR(18)      NOT NULL,
     TABNO              SMALLINT      NOT NULL,
     ACCESSTYPE         CHAR(2)       NOT NULL,
     MATCHCOLS          SMALLINT      NOT NULL,
     ACCESSCREATOR      CHAR(8)       NOT NULL,
     ACCESSNAME         CHAR(18)      NOT NULL,
     INDEXONLY          CHAR(1)       NOT NULL,
     SORTN_UNIQ         CHAR(1)       NOT NULL,
     SORTN_JOIN         CHAR(1)       NOT NULL,
     SORTN_ORDERBY      CHAR(1)       NOT NULL,
     SORTN_GROUPBY      CHAR(1)       NOT NULL,
     SORTC_UNIQ         CHAR(1)       NOT NULL,
     SORTC_JOIN         CHAR(1)       NOT NULL,
     SORTC_ORDERBY      CHAR(1)       NOT NULL,
     SORTC_GROUPBY      CHAR(1)       NOT NULL,
     TSLOCKMODE         CHAR(3)       NOT NULL,
     TIMESTAMP          CHAR(16)      NOT NULL,
     REMARKS            VARCHAR(254)  NOT NULL,
     PREFETCH           CHAR(1)       NOT NULL WITH DEFAULT,
     COLUMN_FN_EVAL     CHAR(1)       NOT NULL WITH DEFAULT,
     MIXOPSEQ           SMALLINT      NOT NULL WITH DEFAULT,
     VERSION            VARCHAR(64)   NOT NULL WITH DEFAULT,
     COLLID             CHAR(18)      NOT NULL WITH DEFAULT,
     ACCESS_DEGREE      SMALLINT      ,   
     ACCESS_PGROUP_ID   SMALLINT      ,
     JOIN_DEGREE        SMALLINT      ,
     JOIN_PGROUP_ID     SMALLINT      ,
     SORTC_PGROUP_ID    SMALLINT      ,
     SORTN_PGROUP_ID    SMALLINT      ,
     PARALLELISM_MODE   CHAR(1)       ,
     MERGE_JOIN_COLS    SMALLINT      ,
     CORRELATION_NAME   CHAR(18)      ,
     PAGE_RANGE         CHAR(1)       NOT NULL WITH DEFAULT,
     JOIN_TYPE          CHAR(1)       NOT NULL WITH DEFAULT,
     GROUP_MEMBER       CHAR(8)       NOT NULL WITH DEFAULT,
     IBM_SERVICE_DATA   VARCHAR(254)  NOT NULL WITH DEFAULT,
     WHEN_OPTIMIZE      CHAR(1)       NOT NULL WITH DEFAULT,
     QBLOCK_TYPE        CHAR(6)       NOT NULL WITH DEFAULT,
     BIND_TIME          TIMESTAMP     NOT NULL WITH DEFAULT,
     OPTHINT            CHAR(8)       NOT NULL WITH DEFAULT,
     HINT_USED          CHAR(8)       NOT NULL WITH DEFAULT,
     PRIMARY_ACCESSTYPE CHAR(1)       NOT NULL WITH DEFAULT,
     PARENT_QBLOCKNO    SMALLINT      NOT NULL WITH DEFAULT,
     TABLE_TYPE         CHAR(1)       )
 IN database-name.table-space-name;

""database-name.able-space-name  は、使用許可を持つデータベースおよび表スペースを示しています。

!!列に格納される値の意味
,列,内容
,QUERYNO,ステートメントを識別する番号
,QBLOCKNO,ステートメント内の照会の位置 (最外部の照会は 1、次の照会は 2、以下同様)
,APPLNAME,アプリケーション・プランの名前
,PROGNAME,ステートメントを含むプログラムまたはパッケージの名前
,PLANNO,QBLOCKNO  で示された照会が処理されたステップの番号
,METHOD,※ 下表参照
,CREATOR,表の作成者
,TNAME,表、一時表、View、表式の名前
,TABNO,IBM  のみが使用
,ACCESSTYPE,※ 下表参照
,MATCHCOLS,索引走査で使われる索引キーの数
,ACCESSCREATOR,索引の作成者
,ACCESSNAME,索引の名前
,INDEXONLY,ステップを実行するのに索引のアクセスだけで間に合うのか
,SORTN_UNIQ,重複行を取り除くため、新しい表でソートを行うのか
,SORTN_JOIN,結合方式が 2  または 4  の場合に、新しい表でソートを行うのか
,SORTN_ORDERBY,ORDER  BY  の場合、新しい表でソートを行うのか
,SORTN_GROUPBY,GROUP  BY  の場合、新しい表でソートを行うのか
,SORTC_UNIQ,重複行を取り除くため、複合表でソートを行うのか
,SORTC_JOIN, 結合方式が 1、2、または 4  の場合に、複合表でソートを行うのか
,SORTC_ORDERBY, ORDER  BY  文節または比較述部の場合、複合表でソートを行うのか
,SORTC_GROUPBY, GROUP  BY  文節の場合に、複合表でソートを行うのか
,TSLOCKMODE,必要とされるロックのモードの指示 ※ 下表参照
,TIMESTAMP,通常は、行が処理される時刻
,REMARKS,文字ストリングを挿入できるフィールド。
,PREFETCH,事前取り出しによりデータ・ページを前もって読み取るのかどうか。 S  =  純粋な順次事前取り出し。 L  =  ページ・リストを介しての事前取り出し。ブランク =  不明あるいは事前取り出しなし
,COLUMN_FN_EVAL SQL, 列関数がいつ評価されるのか。 R  =  表または索引からのデータの読み取り時。S  =  GROUP  BY  文節を満たすためのソート実行時。ブランク =  データ検索後およびソート後
,MIXOPSEQ,複数索引の操作でのステップの順序番号。複数索引プロシージャーのステップの場合 (ACCESSTYPE  はMX、MI、または MU)0 その他の行の場合 (ACCESSTYPE  は I、I1、M、N、R、またはブランク)
,VERSION,パッケージのバージョン ID
,COLLID,パッケージの収集 ID
,ACCESS_DEGREE,照会によってアクティブ化される並列タスクまたは操作の数
,ACCESS_PGROUP_ID,新しい表をアクセスするための並列グループの ID
,JOIN_DEGREE,複合表を新しい表と結合するのに使用される並列操作またはタスクの数
,JOIN_PGROUP_ID,複合表を新しい表と結合するための並列グループのID
,SORTC_PGROUP_ID,複合表の並列ソートのための並列グループ ID
,SORTN_PGROUP_ID,新しい表の並列ソートのための並列グループ ID
,PARALLELISM_MODE,バインド時に使用される並列処理の種類。I 照会入出力並列処理 C 照会 CP  並列処理 X シスプレックス照会並列処理
,MERGE_JOIN_COLS,マージ走査結合時に結合される列の数
,CORRELATION_NAME,ステートメントで指定された表または視点の相関名
,PAGE_RANGE,ページ範囲のスクリーニングのために表を修飾し、プランが必要な区画のみを走査するようにするかどうか
,JOIN_TYPE,※ 下表参照
,GROUP_MEMBER,DB2のメンバー名
,WHEN_OPTIMIZE,アクセス・パスが決定されるとき ※ 下表参照
,QBLOCK_TYPE,各照会ブロックについて、実行する SQL  操作のタイプの指示 
,BIND_TIME,バインドされた時刻
,OPTHINT,最適化ヒントとして指定する際に使用するストリング。 DB2 は、アクセス・パスを選択するときに、入力データとしてこの行を使用
,HINT_USED,ヒントのID
,PRIMARY_ACCESSTYPE,直接行アクセスが最初にアクセスされるかどうかを指示 D=使用しようとする、ブランク=使用しようとしない
,PARENT_QBLOCKNO,親照会ブロックの QBLOCKNO  を示す
,TABLE_TYPE,新しい表のタイプ ※ 下表参照

::METHOD
,値,意味
,0,アクセスされた最初の表、前にアクセスされた表の続き、または未使用。
,1,ネストされたループ 結合。 現在の複合表の各行ごとに、新しい表から一致する行を探して結合。
,2,マージ走査 結合。 現在の複合表と新しい表を結合列の順序で走査し、一致する行を結合。
,3,ORDER  BY、GROUP  BY、 SELECT  DISTINCT、UNION、比較述部、または IN  述部で必要なソートを行う。新しい表をアクセスしません。
,4,ハイブリッド 結合。 現在の複合表を、新しい表の結合列の行の順序で走査。 新しい表は、リスト事前取り出しを使ってアクセス。

::ACCESSTYPE
*新しい表をアクセスする方法:

,値,意味
,I,索引 (ACCESSCREATOR  および ACCESSNAME  で指定される)  による方法。
,I1,1  個の取り出し索引走査による方法。
,N,一致する述部に IN  キーワードが含まれている場合の索引走査による方法。
,R,表スペース走査による方法。
,M,複数索引の走査による方法。(MX、MI、または MU  が後に続きます。)
,MX,ACCESSNAME  で指定される索引を使った索引走査による方法。
,MI,複数索引の交差による方法。
,MU,複数索引の組み合わせによる方法。
,T,疎索引による方法 (星型結合作業ファイル)
,ブランク,現在行には該当しない。

::TSLOCKMODE
* バインド実行時に分離を決定できる
,値,意味
,IS,意図共用ロック
,IX,意図排他ロック
,S,共用ロック
,U,更新ロック
,X,排他ロック
,SIX,意図排他ロックによる共用
,N,UR  分離、ロックなし
*バインド実行時に分離を決定できない
,値,意味
,NS,UR  分離の場合、ロックなし。CS、RS、または RR  の場合、S  ロック。
,NIS,UR  分離の場合、ロックなし。CS、RS、または RR  の場合、IS  ロック。
,NSS,UR  分離の場合、ロックなし。CS  または RS  の場合、IS  ロック。 RR  の場合、S  ロック。
,SS,UR、CS、または RS  分離の場合、IS  ロック。RR  の場合、S  ロック。

::JOIN_TYPE
,値,意味
,F,FULL  OUTER  JOIN
,L,LEFT  OUTER  JOIN
,S,STAR  JOIN
,ブランク,INNER  JOIN  または結合なし

""RIGHT  OUTER  JOIN  は、使用時に LEFT  OUTER  JOIN  へ変換される

::WHEN_OPTIMIZE
,値,内容
,ブランク,バインド時
,B,バインド時。ただし、ステートメントは実行時に、再度最適化
,R,実行時

::TABLE_TYPE
,値,内容
,F,表関数
,Q,一時中間結果表
,T,表
,W,作業ファイル