db2expln - SQL および XQuery Explain コマンド

db2expln ツールは、SQL および XQuery ステートメント用に選択されたアクセス・プランを記述します。 EXPLAIN データがキャプチャーされなかったときに、このツールを使用して、選択したアクセス・プランの簡単な説明を取得します。 静的 SQL ステートメントおよび XQuery ステートメントの場合、db2expln は、システム・カタログ表に保管されたパッケージを調べます。 動的 SQL ステートメントおよび XQuery ステートメントの場合、db2expln は、照会キャッシュのセクションを調べます。

許可

DBADM または以下のいずれかの権限か特権が必要です。
  • 静的ステートメントの場合、カタログ表に対する SELECT 特権
  • 動的ステートメントの場合、カタログ表に対する SELECT 特権と、以下のいずれかの権限か特権
    • ステートメントをコンパイルするための十分な特権
    • EXPLAIN 権限
    • SQLADM 権限

コマンド構文

Read syntax diagramSkip visual syntax diagramdb2explnconnection-optionsoutput-optionspackage-optionsdynamic-optionsexplain-optionsevent-monitor-options-help
connection-options
Read syntax diagramSkip visual syntax diagram-databasedatabase-name-useruser-idpassword-tn-tenanttenantname
output-options
Read syntax diagramSkip visual syntax diagram -outputoutput-file -terminal
package-options
Read syntax diagramSkip visual syntax diagram -schemaschema-name-package package-name-versionversion-identifier-escapeescape-character-noupper-sectionsection-number
dynamic-options
Read syntax diagramSkip visual syntax diagram-cacheanchIDstmtUIDenvIDvarID-statementquery-statement-stmtfilequery-statement-file-terminatortermination-character-noenv
explain-options
Read syntax diagramSkip visual syntax diagram-graph-opids-setupsetup-file
event-monitor-options
Read syntax diagramSkip visual syntax diagram-actevmevent-monitor-name -appidapplication_id-uowiduow_id-actidactivity_id-actid20-actid2activity_secondary_id

コマンド・パラメーター

オプションは任意の順序で指定できます。

connection-options:

これらのオプションでは、 接続先のデータベースと、その接続のために必要なオプションを指定します。 接続オプションは、-help オプションを指定する場合以外は必須です。

-database database-name
Explain の対象パッケージが入っているデータベースの名前。

後方互換性のために、-database の代わりに -d を使用できます。

-user user-id password
データベース接続を確立するときに使用する許可 ID とパスワード。 User-Id および Password は、 Db2® 命名規則に従って有効でなければならず、データベースによって認識されなければなりません。

後方互換性のために、-user の代わりに -u を使用できます。

-tn | tenant tenantname
Explain の対象パッケージが入っているデータベース内のテナントの名前。 指定がない場合は、デフォルトの SYSTEM テナントが想定されます。
output-options:

これらのオプションでは、db2expln 出力の送信先を指定します。 -help オプションを指定する場合を除き、 最低 1 つの出力オプションを指定しなければなりません。 両方のオプションを指定すると、 出力はファイルと端末の両方に送信されます。

-output output-file
db2expln の出力は、指定したファイルに書き込まれます

後方互換性のために、-output の代わりに -o を使用できます。

-terminal
db2expln 出力は、端末に送信されます。

後方互換性のために、-terminal の代わりに -t を使用できます。

package-options:

これらのオプションでは、Explain の対象として 1 つ以上のパッケージとセクションを指定します。 それらのパッケージとセクションの中にある静的照会だけが Explain の対象になります。

LIKE 述部の場合と同じく、 パターン・マッチング文字としてパーセント記号 (%) と下線 (_) を使用して、 schema-namepackage-nameversion-identifier を指定できます。

-schema schema-name
Explain 対象の 1 つ以上のパッケージの SQL スキーマ。

後方互換性のために、-schema の代わりに -c を使用できます。

-package package-name
Explain の対象パッケージ (複数可) の名前。

後方互換性のために、-package の代わりに -p を使用できます。

-version version-identifier
Explain の対象パッケージ (複数可) のバージョン ID。 デフォルトのバージョンは、空ストリングです。
-escape escape-character
schema-namepackage-nameversion-identifier でパターン・マッチングのエスケープ文字として使用する文字 escape-character
例えば、パッケージ TESTID.CALC% を Explain する db2expln コマンドは、 次のとおりです。
db2expln -schema TESTID -package CALC% .... 
ただし、このコマンドは、CALC で始まる他のプランも Explain します。 TESTID.CALC% パッケージだけを Explain するには、エスケープ文字を使用しなければなりません。 感嘆符 (!) をエスケープ文字として指定すると、コマンドをdb2expln -schema TESTID -escape ! -package CALC!% ... のように変更できます。 それから! 文字はエスケープ文字として使用されるため、!% 「何でもマッチする」パターンではなく、%文字として解釈されます。 デフォルトのエスケープ文字はありません。

後方互換性のために、-escape の代わりに -e を使用できます。

問題を避けるため、オペレーティング・システムのエスケープ文字を db2expln のエスケープ文字として指定しないでください。

-noupper
マッチングするパッケージを検索する前に、 schema-namepackage-nameversion-identifier を大文字に変換しないことを指定します。

デフォルトでは、パッケージの検索前に、これらの変数が大文字に変換されます。 このオプションを指定すると、 これらの値は入力のとおりに使用されます。

後方互換性のために、 -noupperの代わりに -lを使用することができます。これは小文字の L であり、数値 1 ではありません。

-section section-number
選択したパッケージ (複数可) 内で Explain の対象にするセクションの番号。

各パッケージ内のすべてのセクションを Explain するには、数値ゼロ (0) を使用します。 これがデフォルトの動作です。 このオプションを指定しない場合や、 schema-name package-nameversion-identifier のいずれかにパターン・マッチング文字を含めていない場合は、 すべてのセクションが表示されます。

セクション番号を確認するには、 システム・カタログ・ビュー SYSCAT.STATEMENTS を照会してください。 システム・カタログ・ビューの説明については、 「SQL リファレンス」を参照してください。

後方互換性のために、-section の代わりに -s を使用できます。

dynamic-options:

これらのオプションでは、Explain の対象である 1 つ以上の動的照会ステートメントを指定します。

-cache anchID, stmtUID, envID, varID
所定の識別子 (ID) で識別されるステートメントを取り出す動的 SQL キャッシュを指定します。 ID は、 -dynamic オプションを指定した db2pd コマンドを使用して取得できます。
-statement query-statement
Explain の対象として動的に準備される SQL または XQuery 照会ステートメント。 複数のステートメントを Explain するには、 -stmtfile オプションを使用して Explain する照会ステートメントを含むファイルを指定するか、 -terminator オプションを使用して -statement オプションのステートメントを区切るために使用できる終了文字を定義します。
-stmtfile query-statement-file
Explain の対象として動的に生成する 1 つ以上の照会ステートメントを含むファイル。 デフォルトでは、ファイルの各行が別個の照会ステートメントと見なされます。 ステートメントが複数行になる場合は、-terminator オプションを使用して、照会ステートメントの終了を示す文字を指定してください。
-terminator termination-character
動的照会ステートメントの終わりを示す文字。 デフォルトでは、-statement オプションの値は 1 つの照会ステートメントと見なされ、-stmtfile のファイルの各行は別個の照会ステートメントと見なされます。 ここで指定する終了文字を使用して、-statement で複数の照会ステートメントを指定したり、-stmtfile ファイル内のステートメントを複数行にしたりすることができます。
-noenv
コンパイル環境を変更する動的ステートメントを Explain 後に実行しないことを指定します。
デフォルトでは、db2expln は、 以下のステートメントを Explain 後に実行します。
	  SET CURRENT DEFAULT TRANSFORM GROUP
	  SET CURRENT DEGREE
	  SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION
	  SET CURRENT QUERY OPTIMIZATION
	  SET CURRENT REFRESH AGE
	  SET PATH
	  SET SCHEMA
これらのステートメントを実行すれば、db2expln の処理対象になる後続の動的照会ステートメントのために選択されているプランを変更できます。

-noenv を指定した場合、 これらのステートメントは Explain されますが、実行されません。

動的照会を Explain するには、-statement または -stmtfile のいずれかを指定する必要があります。 両方のオプションを db2expln の 1 つの呼び出しで指定できます。

explain-options:

これらのオプションでは、 Explain されたプランで提供する追加の情報を指定します。

-graph
オプティマイザー・プラン・グラフを表示します。 各セクションが調査された後、元のオプティマイザー・プラン・グラフが構成されます。 セクション・プランに含まれる情報に応じて、オプティマイザー・グラフにギャップが表示される可能性があります。

後方互換性のために、-graph の代わりに -g を使用できます。

-opids
Explain されるプラン内に演算子 ID 番号を表示します。

演算子 ID 番号によって、 db2expln からの出力と Explain 機能からの出力との対応関係を示すことができます。 ただし、すべての演算子が ID 番号を持つとは限らず、Explain 機能の出力に現れるいくつかの ID 番号は、db2expln の出力には現れません。

後方互換性のために、-opids の代わりに -i を使用できます。

.
-help
db2expln のヘルプ・テキストを表示します。 このオプションを指定した場合、パッケージは Explain されません。
ほとんどのコマンド行は、 db2exsrv ストアード・プロシージャーで処理されます。 使用可能なすべてのオプションについてヘルプを表示するには、 -helpとともに connection-options を指定する必要があります。 例えば、次のように使用します。
    db2expln -help -database SAMPLE
    

後方互換性のために、-h または -? を指定できます。

-setup setup-file
再コンパイルする必要のある動的ステートメントまたは静的ステートメントの環境をセットアップするのに必要な 1 つ以上のステートメントが含まれるファイル (宣言済み一時表を参照する静的ステートメントなど)。 ファイル内の各ステートメントが実行され、エラーまたは警告があれば報告されます。 ファイル内のステートメントは Explain されません。
event-monitor-options:

これらのオプションでは、Explain の対象として、アクティビティー・イベント・モニターから 1 つ以上のセクション環境を指定します。

-actevm event-monitor-name
activitystmt 論理グループに説明対象となるセクション環境 (section_env監視要素) が含まれるアクティビティー・イベント・モニターの名前を指定します。
-appid application-id
Explain の対象であるセクション環境がある、アクティビティーを発行したアプリケーションを一意的に識別するアプリケーション ID (appl_id モニター・エレメント) を指定します。 -appid を指定する場合は、-actevm を指定する必要があります。
-uowid uow-id
セクション環境を説明する作業単位ID(uow_id監視要素)を指定します。 作業単位 ID は、指定されたアプリケーション内のみで固有です。 -uowid を指定する場合は、-actevm を指定する必要があります。
-actid activity-id
説明対象セクション環境のアクティビティー ID (activity_id監視要素) を指定します。 アクティビティー ID は、指定された作業単位内のみで固有です。 -actid を指定する場合は、-actevm を指定する必要があります。
-actid2 activity-secondary-id
説明対象のセクション環境があるアクティビティーせセカンド ID (activity_secondary_id監視要素) を指定します。 指定されないと、これはデフォルトのゼロになります。 -actid2 を指定する場合は、-actevm を指定する必要があります。

使用上の注意

-help オプションを指定する場合以外は、 package-options または dynamic-options のいずれかを指定しなければなりません。 パッケージと動的 SQL の両方を db2expln の 1 つの呼び出しで Explain できます。

上にリストされたオプション・フラグのいくつかは、 オペレーティング・システムに対して特別な意味を持つことがあるので、 db2expln コマンド行の値が正確に解釈されない可能性があります。 しかし、オペレーティング・システムのエスケープ文字を前に置けば、 その種の文字を入力できます。 詳細については、オペレーティング・システムの資料を参照してください。 オペレーティング・システムのエスケープ文字を db2expln のエスケープ文字として間違って指定しないように注意する必要があります。

db2expln によって生成されるヘルプと初期状況メッセージは、 標準出力に書き込まれます。 Explain ツールによって生成されるすべてのプロンプトと他の状況メッセージは、 標準エラーに書き込まれます。 Explain テキストは、選択した出力オプションに応じて、 標準出力またはファイルに書き込まれます。

db2expln は、スタンバイ・データベースの読み取りフィーチャーが有効になっている HADR スタンバイ・データベースで使用できます。 パッケージをバインドするには、少なくとも 1 回、HADR 1 次データベースでツールを実行する必要があります。 SQL1773N 理由コード 5 が返された場合は、まず 1 次データベースでツールを実行してから、HADR スタンバイ・データベースでツールを使用してください。

db2expln によって以下のメッセージが戻る可能性があります。
  • No packages found for database package pattern: "<creator>".<package> with version "<version>"

    指定のパターンに一致するパッケージがデータベース内にない場合に、このメッセージが出力に表示されます。

  • Bind messages can be found in db2expln.msg

    このメッセージは、db2expln.bnd のバインドが成功しなかった場合に出力に表示されます。 検出問題については、現行ディレクトリーのdb2expln.msg ファイルを参照してください。

  • Section number overridden to 0 (all sections) for potential multiple packages.

    db2expln によって複数のパッケージが検出される可能性がある場合、このメッセージが出力に表示されます。 いずれかのパターン・マッチング文字がパッケージ入力引数または作成者入力引数で使用されていると、このアクションが実行されます。

  • Bind messages for <bind file> can be found in <message file>

    指定のバインド・ファイルのバインドが正常に行われなかった場合に、このメッセージが表示されます。 生じた問題の詳細については、データベース・サーバー上の指定のメッセージ・ファイルに記述されます。

  • No static sections qualify from package.

    指定のパッケージに動的照会ステートメントだけが含まれている、つまり静的セクションがない場合に、このメッセージが出力に表示されます。

  • Package "<creator>"."<package>", "<version>", is not valid. Rebind the package and then rerun db2expln.

    指定のパッケージが現在無効な場合には、このメッセージが出力に表示されます。 データベース内に有効なパッケージを再作成するためのプランに関して BIND コマンドまたは REBIND コマンドを再発行してから、db2expln を再実行します。

以下のステートメントは Explain されません。

  • BEGIN/END COMPOUND
  • BEGIN/END DECLARE SECTION
  • CLOSE カーソル
  • COMMIT および ROLLBACK
  • CONNECT
  • DESCRIBE
  • 動的 DECLARE CURSOR
  • EXECUTE
  • EXECUTE IMMEDIATE
  • FETCH
  • INCLUDE
  • OPEN カーソル
  • PREPARE
  • SQL 制御ステートメント
  • WHENEVER

コンパウンド SQL ステートメント内の各サブステートメントは独自のセクションを持つことができ、こうしたセクションは db2expln によって Explain 可能です。

注: db2expln コマンドは XQuery ステートメントを除外しません。

db2expln の 1 回の呼び出しで複数のプランを Explain する場合は、 -package-schema-version の各オプションを使用し、 LIKE パターンを使用してパッケージと作成者に関するストリング定数を指定します。 つまり、下線 (_) を使用して 1 つの文字を表し、 パーセント記号 (%) を使用してゼロ個以上の文字を表します。

SAMPLEという名前のデータベース内のすべてのパッケージのすべてのセクションを説明し、結果をファイルmy.expに書き込むには、次のように入力します。
  db2expln -database SAMPLE -schema % -package %  -output my.exp
別の例として、ユーザーが "statements.db2" という名の CLP スクリプト・ファイルを持っていて、 そのファイル内のステートメントを Explain するとします。 ファイルには、以下のステートメントが含まれています。
  SET PATH=SYSIBM, SYSFUN, DEPT01, DEPT93@
  SELECT EMPNO, TITLE(JOBID) FROM EMPLOYEE@
これらのステートメントを Explain するには、以下のコマンドを入力します。
  db2expln -database DEPTDATA -stmtfile statements.db2 -terminator @ -terminal
以下のステートメントを Explain します。
  SELECT e.lastname, e.job, d.deptname, d.location, p.projname
    FROM employee AS e, department AS d, project AS p
    WHERE e.workdept = d.deptno AND e.workdept = p.deptno
以下のコマンドを使用します。
  db2expln -database SAMPLE
    -statement "SELECT e.lastname, e.job,
      d.deptname, d.location, p.projname
      FROM employee AS e, department AS d, project AS p
      WHERE e.workdept = d.deptno AND e.workdept = p.deptno"
    -terminal
これは、以下のものを戻します。
Db2 Enterprise Server Edition n.n, nnnn-nnn (c) Copyright IBM Corp. 1991, yyyy
Licensed Material - Program Property of IBM
IBM Db2 Database SQL and XQUERY Explain Tool

******************** DYNAMIC ***************************************

==================== STATEMENT ==========================================

        Isolation Level          = Cursor Stability
        Blocking                 = Block Unambiguous Cursors
        Query Optimization Class = 5

        Partition Parallel       = No
        Intra-Partition Parallel = No

        SQL Path                 = "SYSIBM", "SYSFUN", "SYSPROC", "SYSIBMADM",
                                   "SDINIRO"


Statement:

  SELECT e.lastname, e.job, d.deptname, d.location, p.projname
  FROM employee AS e, department AS d, project AS p
  WHERE e.workdept =d.deptno AND e.workdept =p.deptno


Section Code Page = 1208

Estimated Cost = 22.802252
Estimated Cardinality = 105.000000

Access Table Name = SDINIRO.PROJECT  ID = 2,10
|  #Columns = 2
|  Skip Inserted Rows
|  Avoid Locking Committed Data
|  Currently Committed for Cursor Stability
|  Relation Scan
|  |  Prefetch: Eligible
|  Lock Intents
|  |  Table: Intent Share
|  |  Row  : Next Key Share
|  Sargable Predicate(s)
|  |  Process Build Table for Hash Join
Hash Join
|  Estimated Build Size: 4000
|  Estimated Probe Size: 4000
|  Access Table Name = SDINIRO.DEPARTMENT  ID = 2,6
|  |  #Columns = 3
|  |  Skip Inserted Rows
|  |  Avoid Locking Committed Data
|  |  Currently Committed for Cursor Stability
|  |  Relation Scan
|  |  |  Prefetch: Eligible
|  |  Lock Intents
|  |  |  Table: Intent Share
|  |  |  Row  : Next Key Share
|  |  Sargable Predicate(s)
|  |  |  Process Probe Table for Hash Join
Hash Join
|  Estimated Build Size: 4000
|  Estimated Probe Size: 4000
|  Access Table Name = SDINIRO.EMPLOYEE  ID = 2,7
|  |  #Columns = 3
|  |  Skip Inserted Rows
|  |  Avoid Locking Committed Data
|  |  Currently Committed for Cursor Stability
|  |  Relation Scan
|  |  |  Prefetch: Eligible
|  |  Lock Intents
|  |  |  Table: Intent Share
|  |  |  Row  : Next Key Share
|  |  Sargable Predicate(s)
|  |  |  Process Probe Table for Hash Join
Return Data to Application
|  #Columns = 5

End of section