| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==[[DB2 EXPLAIN の実行]]==[[DB2]] | [[Database]] | {{category [[Category:DBパフォーマンス}}]]
===EXPLAIN===
*Explain 可能ステートメント のアクセスパス選択情報を入手
* Explain 可能ステートメントとは、SELECT または INSERT INSE[[R]]T ステートメント、または検索形式の UPDATE または DELETE ステートメント
====呼び出し====
*以下の呼び出しで、explainable-sql-statement の分析結果がプラン表に格納される
=====例1=====
EXPLAIN PLAN FOR FO[[R]] explainable-sql-statement
=====例2=====
EXPLAIN PLAN SET QUERYNOQUE[[R]]YNO=integer FOR FO[[R]] explainable-sql-statement
===プラン表の作成===
*http://www-01.ibm.com/support/docviewdoc[[vi]]ew.wss?uid=swg21596631
====【V9.1 の作成方法】====
Unix/Linux 環境では $INSTHOME/sqllib/misc/EXPLAIN.DDL に、Windows に、[[Windows]] 環境では %DB2PATH%\MISC\EXPLAIN.DDL に EXPLAIN 表の DDL が保管されています。DDL では表のスキーマ名や表スペースは指定されていないため、表は CURRENT CU[[R]][[R]]ENT SCHEMA のスキーマ名で、ユーザーに USE 特権が付与されている表スペース内に作成されます。
以下のように DDL を実行してください。
*[Unix/Linux 環境の場合]
*[Windows 環境の場合]
> db2 connect to [データベース名]
> db2 -tf "%DB2PATH[[DB2]]PATH%\MISC\EXPLAIN.DDL"
====【V9.1 の削除方法】 ====
EXPLAIN.DDL の中で CREATE C[[R]]EATE されているオブジェクトを確認し DROP D[[R]]OP してください。 オブジェクトの中には依存関係が設定されているものがあるため、CREATE オブジェクトの中には依存関係が設定されているものがあるため、C[[R]]EATE の時と逆の順番で削除してください。
====【V9.5 以降の作成方法】 ====
V9.5 以降では上記の EXPLAIN.DDL を利用する以外に、SYSINSTALLOBJECTS プロシージャーを利用して EXPLAIN 表を作成することもできます。
以下の実行例では、SYSTOOLSPACE 表スペースに、接続ユーザー名のスキーマで Explain 表を作成します。
$ db2 connect to [データベース名]
$ db2 "call SYSPROCSYSP[[R]]OC.SYSINSTALLOBJECTS( 'EXPLAIN', 'C' , '', CURRENT USER CU[[R]][[R]]ENT USE[[R]] )"
====【V9.5 以降の削除方法】 ====
SYSINSTALLOBJECTS プロシージャーを利用して、Explain 表を削除できます。
第 4 引数には DROP D[[R]]OP する表のスキーマ名を指定してください。
NULL もしくは空文字の場合、SYSTOOLS スキーマの表が削除されます。
以下の実行例では、接続ユーザー名のスキーマの Explain 表を削除します。
$ db2 connect to [データベース名]
$ db2 "call SYSPROCSYSP[[R]]OC.SYSINSTALLOBJECTS( 'EXPLAIN', 'D', '', CURRENT USER CU[[R]][[R]]ENT USE[[R]] )"
====以下の [[SQL ]] ステートメントを実行====
CREATE C[[R]]EATE TABLE userid.PLAN_TABLE (QUERYNO QUE[[R]]YNO INTEGER INTEGE[[R]] NOT NULL,
QBLOCKNO SMALLINT NOT NULL,
APPLNAME CHARCHA[[R]](8) NOT NULL, PROGNAME P[[R]]OGNAME CHARCHA[[R]](8) NOT NULL,
PLANNO SMALLINT NOT NULL,
METHOD SMALLINT NOT NULL,
CREATOR C[[R]]EATO[[R]] CHARCHA[[R]](8) NOT NULL, TNAME CHARCHA[[R]](18) NOT NULL,
TABNO SMALLINT NOT NULL,
ACCESSTYPE CHARCHA[[R]](2) NOT NULL,
MATCHCOLS SMALLINT NOT NULL,
ACCESSCREATOR ACCESSC[[R]]EATO[[R]] CHARCHA[[R]](8) NOT NULL, ACCESSNAME CHARCHA[[R]](18) NOT NULL, INDEXONLY CHARCHA[[R]](1) NOT NULL, SORTN_UNIQ SO[[R]]TN_UNIQ CHARCHA[[R]](1) NOT NULL, SORTN_JOIN SO[[R]]TN_JOIN CHARCHA[[R]](1) NOT NULL, SORTN_ORDERBY SO[[R]]TN_O[[R]]DE[[R]]BY CHARCHA[[R]](1) NOT NULL, SORTN_GROUPBY SO[[R]]TN_G[[R]]OUPBY CHARCHA[[R]](1) NOT NULL, SORTC_UNIQ SO[[R]]TC_UNIQ CHARCHA[[R]](1) NOT NULL, SORTC_JOIN SO[[R]]TC_JOIN CHARCHA[[R]](1) NOT NULL, SORTC_ORDERBY SO[[R]]TC_O[[R]]DE[[R]]BY CHARCHA[[R]](1) NOT NULL, SORTC_GROUPBY SO[[R]]TC_G[[R]]OUPBY CHARCHA[[R]](1) NOT NULL, TSLOCKMODE CHARCHA[[R]](3) NOT NULL, TIMESTAMP CHARCHA[[R]](16) NOT NULL, REMARKS [[R]]EMA[[R]]KS VARCHARVA[[R]]CHA[[R]](254) NOT NULL, PREFETCH P[[R]]EFETCH CHARCHA[[R]](1) NOT NULL WITH DEFAULT, COLUMN_FN_EVAL CHARCHA[[R]](1) NOT NULL WITH DEFAULT,
MIXOPSEQ SMALLINT NOT NULL WITH DEFAULT,
VERSION VE[[R]]SION VARCHARVA[[R]]CHA[[R]](64) NOT NULL WITH DEFAULT, COLLID CHARCHA[[R]](18) NOT NULL WITH DEFAULT, ACCESS_DEGREE ACCESS_DEG[[R]]EE SMALLINT , ACCESS_PGROUP_ID ACCESS_PG[[R]]OUP_ID SMALLINT , JOIN_DEGREE JOIN_DEG[[R]]EE SMALLINT , JOIN_PGROUP_ID JOIN_PG[[R]]OUP_ID SMALLINT , SORTC_PGROUP_ID SO[[R]]TC_PG[[R]]OUP_ID SMALLINT , SORTN_PGROUP_ID SO[[R]]TN_PG[[R]]OUP_ID SMALLINT , PARALLELISM_MODE PA[[R]]ALLELISM_MODE CHARCHA[[R]](1) , MERGE_JOIN_COLS ME[[R]]GE_JOIN_COLS SMALLINT , CORRELATION_NAME CO[[R]][[R]]ELATION_NAME CHARCHA[[R]](18) , PAGE_RANGE PAGE_[[R]]ANGE CHARCHA[[R]](1) NOT NULL WITH DEFAULT, JOIN_TYPE CHARCHA[[R]](1) NOT NULL WITH DEFAULT, GROUP_MEMBER G[[R]]OUP_MEMBE[[R]] CHARCHA[[R]](8) NOT NULL WITH DEFAULT, IBM_SERVICE_DATA IBM_SE[[R]]VICE_DATA VARCHARVA[[R]]CHA[[R]](254) NOT NULL WITH DEFAULT, WHEN_OPTIMIZE CHARCHA[[R]](1) NOT NULL WITH DEFAULT, QBLOCK_TYPE CHARCHA[[R]](6) NOT NULL WITH DEFAULT,
BIND_TIME TIMESTAMP NOT NULL WITH DEFAULT,
OPTHINT CHARCHA[[R]](8) NOT NULL WITH DEFAULT, HINT_USED CHARCHA[[R]](8) NOT NULL WITH DEFAULT, PRIMARY_ACCESSTYPE CHARP[[R]]IMA[[R]]Y_ACCESSTYPE CHA[[R]](1) NOT NULL WITH DEFAULT, PARENT_QBLOCKNO PA[[R]]ENT_QBLOCKNO SMALLINT NOT NULL WITH DEFAULT, TABLE_TYPE CHARCHA[[R]](1) )
IN database-name.table-space-name;
!内容
|-
|QUERYNOQUE[[R]]YNO
|ステートメントを識別する番号
|-
|アプリケーション・プランの名前
|-
|PROGNAMEP[[R]]OGNAME
|ステートメントを含むプログラムまたはパッケージの名前
|-
|※ 下表参照
|-
|CREATORC[[R]]EATO[[R]]
|表の作成者
|-
|索引走査で使われる索引キーの数
|-
|ACCESSCREATORACCESSC[[R]]EATO[[R]]
|索引の作成者
|-
|ステップを実行するのに索引のアクセスだけで間に合うのか
|-
|SORTN_UNIQSO[[R]]TN_UNIQ
|重複行を取り除くため、新しい表でソートを行うのか
|-
|SORTN_JOINSO[[R]]TN_JOIN
|結合方式が 2 または 4 の場合に、新しい表でソートを行うのか
|-
|SORTN_ORDERBYSO[[R]]TN_O[[R]]DE[[R]]BY|ORDER O[[R]]DE[[R]] BY の場合、新しい表でソートを行うのか
|-
|SORTN_GROUPBYSO[[R]]TN_G[[R]]OUPBY|GROUP G[[R]]OUP BY の場合、新しい表でソートを行うのか
|-
|SORTC_UNIQSO[[R]]TC_UNIQ
|重複行を取り除くため、複合表でソートを行うのか
|-
|SORTC_JOINSO[[R]]TC_JOIN
| 結合方式が 1、2、または 4 の場合に、複合表でソートを行うのか
|-
|SORTC_ORDERBYSO[[R]]TC_O[[R]]DE[[R]]BY| ORDER O[[R]]DE[[R]] BY 文節または比較述部の場合、複合表でソートを行うのか
|-
|SORTC_GROUPBYSO[[R]]TC_G[[R]]OUPBY| GROUP G[[R]]OUP BY 文節の場合に、複合表でソートを行うのか
|-
|TSLOCKMODE
|通常は、行が処理される時刻
|-
|REMARKS[[R]]EMA[[R]]KS
|文字ストリングを挿入できるフィールド。
|-
|PREFETCHP[[R]]EFETCH
|事前取り出しによりデータ・ページを前もって読み取るのかどうか。 S = 純粋な順次事前取り出し。 L = ページ・リストを介しての事前取り出し。ブランク = 不明あるいは事前取り出しなし
|-
|COLUMN_FN_EVAL [[SQL]]
| 列関数がいつ評価されるのか。 R = 表または索引からのデータの読み取り時。S = GROUP BY 文節を満たすためのソート実行時。ブランク = データ検索後およびソート後
|-
|MIXOPSEQ
|複数索引の操作でのステップの順序番号。複数索引プロシージャーのステップの場合 (ACCESSTYPE はMX、MI、または MU)0 その他の行の場合 [[その他]]の行の場合 (ACCESSTYPE は I、I1、M、N、R、またはブランク)
|-
|VERSIONVE[[R]]SION
|パッケージのバージョン ID
|-
|パッケージの収集 ID
|-
|ACCESS_DEGREEACCESS_DEG[[R]]EE
|照会によってアクティブ化される並列タスクまたは操作の数
|-
|ACCESS_PGROUP_IDACCESS_PG[[R]]OUP_ID
|新しい表をアクセスするための並列グループの ID
|-
|JOIN_DEGREEJOIN_DEG[[R]]EE
|複合表を新しい表と結合するのに使用される並列操作またはタスクの数
|-
|JOIN_PGROUP_IDJOIN_PG[[R]]OUP_ID
|複合表を新しい表と結合するための並列グループのID
|-
|SORTC_PGROUP_IDSO[[R]]TC_PG[[R]]OUP_ID
|複合表の並列ソートのための並列グループ ID
|-
|SORTN_PGROUP_IDSO[[R]]TN_PG[[R]]OUP_ID
|新しい表の並列ソートのための並列グループ ID
|-
|PARALLELISM_MODEPA[[R]]ALLELISM_MODE
|バインド時に使用される並列処理の種類。I 照会入出力並列処理 C 照会 CP 並列処理 X シスプレックス照会並列処理
|-
|MERGE_JOIN_COLSME[[R]]GE_JOIN_COLS
|マージ走査結合時に結合される列の数
|-
|CORRELATION_NAMECO[[R]][[R]]ELATION_NAME
|ステートメントで指定された表または視点の相関名
|-
|PAGE_RANGEPAGE_[[R]]ANGE
|ページ範囲のスクリーニングのために表を修飾し、プランが必要な区画のみを走査するようにするかどうか
|-
|-
|GROUP_MEMBER
|DB2のメンバー名[[DB2]]のメンバー名
|-
|WHEN_OPTIMIZE
|-
|QBLOCK_TYPE
|各照会ブロックについて、実行する [[SQL ]] 操作のタイプの指示
|-
|BIND_TIME
|-
|OPTHINT
|最適化ヒントとして指定する際に使用するストリング。 [[DB2 ]] は、アクセス・パスを選択するときに、入力データとしてこの行を使用
|-
|HINT_USED
|ヒントのID
|-
|PRIMARY_ACCESSTYPEP[[R]]IMA[[R]]Y_ACCESSTYPE
|直接行アクセスが最初にアクセスされるかどうかを指示 D=使用しようとする、ブランク=使用しようとしない
|-
|PARENT_QBLOCKNOPA[[R]]ENT_QBLOCKNO
|親照会ブロックの QBLOCKNO を示す
|-
|-
|3
|ORDER O[[R]]DE[[R]] BY、GROUP BY、G[[R]]OUP BY、 SELECT DISTINCT、UNION、比較述部、または IN 述部で必要なソートを行う。新しい表をアクセスしません。
|-
|4
|-
|I
|索引 (ACCESSCREATOR ACCESSC[[R]]EATO[[R]] および ACCESSNAME で指定される) による方法。
|-
|I1
|一致する述部に IN キーワードが含まれている場合の索引走査による方法。
|-
|[[R]]
|表スペース走査による方法。
|-
|-
|N
|UR U[[R]] 分離、ロックなし
|-
|}
|-
|NS
|UR U[[R]] 分離の場合、ロックなし。CS、RS、または RR 分離の場合、ロックなし。CS、[[R]]S、または [[R]][[R]] の場合、S ロック。
|-
|NIS
|UR U[[R]] 分離の場合、ロックなし。CS、RS、または RR 分離の場合、ロックなし。CS、[[R]]S、または [[R]][[R]] の場合、IS ロック。
|-
|NSS
|UR U[[R]] 分離の場合、ロックなし。CS または RS [[R]]S の場合、IS ロック。 RR [[R]][[R]] の場合、S ロック。
|-
|SS
|UR、CS、または RS U[[R]]、CS、または [[R]]S 分離の場合、IS ロック。RR ロック。[[R]][[R]] の場合、S ロック。
|-
|}
|-
|F
|FULL OUTER OUTE[[R]] JOIN
|-
|L
|LEFT OUTER OUTE[[R]] JOIN
|-
|S
|STAR STA[[R]] JOIN
|-
|ブランク
|INNER INNE[[R]] JOIN または結合なし
|-
|}
<blockquote>RIGHT [[R]]IGHT OUTER OUTE[[R]] JOIN は、使用時に LEFT OUTER OUTE[[R]] JOIN へ変換される</blockquote>
=====WHEN_OPTIMIZE=====
|バインド時。ただし、ステートメントは実行時に、再度最適化
|-
|[[R]]
|実行時
|-

案内メニュー