db2expln - SQL および XQuery Explain コマンド
許可
- 静的ステートメントの場合、カタログ表に対する SELECT 特権
- 動的ステートメントの場合、カタログ表に対する SELECT 特権と、以下のいずれかの権限か特権
- ステートメントをコンパイルするための十分な特権
- EXPLAIN 権限
- SQLADM 権限
コマンド構文
コマンド・パラメーター
オプションは任意の順序で指定できます。
- connection-options:
これらのオプションでは、 接続先のデータベースと、その接続のために必要なオプションを指定します。 接続オプションは、-help オプションを指定する場合以外は必須です。
- -database database-name
- Explain の対象パッケージが入っているデータベースの名前。
後方互換性のために、-database の代わりに -d を使用できます。
- -user user-id password
- データベース接続を確立するときに使用する許可 ID とパスワード。
user-id と password はいずれも、Db2® 命名規則に従った有効な値でなければならず、データベースによって認識される値でなければなりません。
後方互換性のために、-user の代わりに -u を使用できます。
- output-options:
これらのオプションでは、db2expln 出力の送信先を指定します。 -help オプションを指定する場合を除き、 最低 1 つの出力オプションを指定しなければなりません。 両方のオプションを指定すると、 出力はファイルと端末の両方に送信されます。
- -output output-file
- db2expln の出力は、指定したファイルに書き込まれます
後方互換性のために、-output の代わりに -o を使用できます。
- -terminal
- db2expln 出力は、端末に送信されます。
後方互換性のために、-terminal の代わりに -t を使用できます。
- package-options:
これらのオプションでは、Explain の対象として 1 つ以上のパッケージとセクションを指定します。 それらのパッケージとセクションの中にある静的照会だけが Explain の対象になります。
LIKE 述部の場合と同じく、 パターン・マッチング文字としてパーセント記号 (%) と下線 (_) を使用して、 schema-name、 package-name、 version-identifier を指定できます。
- -schema schema-name
- Explain 対象の 1 つ以上のパッケージの SQL スキーマ。
後方互換性のために、-schema の代わりに -c を使用できます。
- -package package-name
- Explain の対象パッケージ (複数可) の名前。
後方互換性のために、-package の代わりに -p を使用できます。
- -version version-identifier
- Explain の対象パッケージ (複数可) のバージョン ID。 デフォルトのバージョンは、空ストリングです。
- -escape escape-character
- schema-name、package-name、
version-identifier でパターン・マッチングのエスケープ文字として使用する文字 escape-character。
例えば、パッケージ TESTID.CALC% を Explain する db2expln コマンドは、 次のとおりです。
ただし、このコマンドは、CALC で始まる他のプランも Explain します。 TESTID.CALC% パッケージだけを Explain するには、エスケープ文字を使用しなければなりません。 感嘆符 (!) をエスケープ文字として指定した場合のコマンドは、db2expln -schema TESTID -package CALC% ....db2expln -schema TESTID -escape ! -package CALC!% ...になります。 この場合、! 文字をエスケープ文字として使用しているので、 !% は「何にでもマッチングする」パターンではなく、% 文字として解釈されます。 デフォルトのエスケープ文字はありません。後方互換性のために、-escape の代わりに -e を使用できます。
問題を避けるため、オペレーティング・システムのエスケープ文字を db2expln のエスケープ文字として指定しないでください。
- -noupper
- マッチングするパッケージを検索する前に、
schema-name、package-name、
version-identifier を大文字に変換しないことを指定します。
デフォルトでは、パッケージの検索前に、これらの変数が大文字に変換されます。 このオプションを指定すると、 これらの値は入力のとおりに使用されます。
後方互換性のために、-noupper の代わりに -l (数字の 1 ではなく L の小文字) を使用できます。
- -section section-number
- 選択したパッケージ (複数可) 内で Explain の対象にするセクションの番号。
各パッケージ内のすべてのセクションを Explain するには、数値ゼロ (0) を使用します。 これがデフォルトの動作です。 このオプションを指定しない場合や、 schema-name、 package-name、 version-identifier のいずれかにパターン・マッチング文字を含めていない場合は、 すべてのセクションが表示されます。
セクション番号を確認するには、 システム・カタログ・ビュー SYSCAT.STATEMENTS を照会してください。 システム・カタログ・ビューの説明については、 「SQL リファレンス」を参照してください。
後方互換性のために、-section の代わりに -s を使用できます。
- dynamic-options:
これらのオプションでは、Explain の対象である 1 つ以上の動的照会ステートメントを指定します。
- -cache anchID, stmtUID, envID, varID
- 所定の識別子 (ID) で識別されるステートメントを取り出す動的 SQL キャッシュを指定します。 この ID は、db2pd コマンドに -dynamic オプションを指定して使用すると取得できます。
- -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 後に実行します。
これらのステートメントを実行すれば、db2expln の処理対象になる後続の動的照会ステートメントのために選択されているプランを変更できます。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-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
- アクティビティー・イベント・モニターの名前で、このモニターには、Explain の対象である、(section_env モニター・エレメントにある) セクション環境が含まれる
activitystmt論理グループ化を指定します。- -appid application-id
- Explain の対象であるセクション環境がある、アクティビティーを発行したアプリケーションを一意的に識別するアプリケーション ID (appl_id モニター・エレメント) を指定します。-appid を指定する場合は、-actevm を指定する必要があります。
- -uowid uow-id
- Explain の対象であるセクション環境がある、作業単位 ID (uow_id モニター・エレメント) を指定します。作業単位 ID は、指定されたアプリケーション内のみで固有です。-uowid を指定する場合は、-actevm を指定する必要があります。
- -actid activity-id
- Explain の対象であるセクション環境がある、アクティビティー ID (activity_id モニター・エレメント) を指定します。アクティビティー ID は、指定された作業単位内のみで固有です。-actid を指定する場合は、-actevm を指定する必要があります。
- -actid2 activity-secondary-id
- Explain の対象であるセクション環境がある、アクティビティー 2 次 ID (activity_secondary_id モニター・エレメント) を指定します。指定されないと、これはデフォルトのゼロになります。-actid2 を指定する場合は、-actevm を指定する必要があります。
使用上の注意
-help オプションを指定する場合以外は、 package-options または dynamic-options のいずれかを指定しなければなりません。 パッケージと動的 SQL の両方を db2expln の 1 つの呼び出しで Explain できます。
上にリストされたオプション・フラグのいくつかは、 オペレーティング・システムに対して特別な意味を持つことがあるので、 db2expln コマンド行の値が正確に解釈されない可能性があります。 しかし、オペレーティング・システムのエスケープ文字を前に置けば、 その種の文字を入力できます。 詳細については、オペレーティング・システムの資料を参照してください。 オペレーティング・システムのエスケープ文字を db2expln のエスケープ文字として間違って指定しないように注意する必要があります。
db2expln によって生成されるヘルプと初期状況メッセージは、 標準出力に書き込まれます。 Explain ツールによって生成されるすべてのプロンプトと他の状況メッセージは、 標準エラーに書き込まれます。 Explain テキストは、選択した出力オプションに応じて、 標準出力またはファイルに書き込まれます。
- 以下のデータベース・パッケージ・パターンのパッケージが見つかりませんでした: バージョン "<version>" の "<creator>".<package> (No packages found for database package pattern: "<creator>".<package>
with version "<version>")
指定のパターンに一致するパッケージがデータベース内にない場合に、このメッセージが出力に表示されます。
- db2expln.msg にはバインド・メッセージがあります (Bind messages can be found in db2expln.msg)
db2expln.bnd のバインドが正常に行われなかった場合に、このメッセージが出力に表示されます。生じた問題の詳細については、現行ディレクトリーの db2expln.msg ファイルに記されます。
- 複数パッケージの可能性があるため、セクション番号が 0 (すべてのセクション) にオーバーライドされました (Section number overridden to 0 (all sections) for potential
multiple packages)。
db2expln によって複数のパッケージが検出される可能性がある場合、このメッセージが出力に表示されます。 いずれかのパターン・マッチング文字がパッケージ入力引数または作成者入力引数で使用されていると、このアクションが実行されます。
- <bind file> のバインド・メッセージは <message file> にあります (Bind messages for <bind file> can be found in <message file>)
指定のバインド・ファイルのバインドが正常に行われなかった場合に、このメッセージが表示されます。生じた問題の詳細については、データベース・サーバー上の指定のメッセージ・ファイルに記述されます。
- パッケージに適格な静的セクションがありません (No static sections qualify from package)。
指定のパッケージに動的照会ステートメントだけが含まれている、つまり静的セクションがない場合に、このメッセージが出力に表示されます。
- パッケージ "<creator>"."<package>", "<version>", が無効です。パッケージを再バインドしてから、db2expln を再実行してください (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 の 1 回の呼び出しで複数のプランを Explain する場合は、 -package、 -schema、-version の各オプションを使用し、 LIKE パターンを使用してパッケージと作成者に関するストリング定数を指定します。 つまり、下線 (_) を使用して 1 つの文字を表し、 パーセント記号 (%) を使用してゼロ個以上の文字を表します。
my.exp ファイルに書き込むには、以下のようにします。
db2expln -database SAMPLE -schema % -package % -output my.exp SET PATH=SYSIBM, SYSFUN, DEPT01, DEPT93@
SELECT EMPNO, TITLE(JOBID) FROM EMPLOYEE@ これらのステートメントを Explain するには、以下のコマンドを入力します。
db2expln -database DEPTDATA -stmtfile statements.db2 -terminator @ -terminal
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