db2exfmt - Explain 表フォーマット・コマンド
EXPLAIN 表の内容をフォーマットします。
このツールは、インスタンスsqllibディレクトリのmiscサブディレクトリにあります。 EXPLAIN スナップショットが使用可能であれば、このツールは EXPLAIN スナップショットの統計を使用します。
許可
このツールを使用するには、フォーマットする Explain 表に対する読み取りアクセスが必要です。
コマンド構文
コマンド・パラメーター
- db2exfmt
- オプションを指定しない場合、コマンドは対話モードに入り、ユーザーは入力するよう促されます。
- -1
- デフォルトの使用
-e % -n % -s % -v % -w -1 -# 0
Explainスキーマが提供されない場合、環境変数$USERまたは$USERNAMEの内容がデフォルトとして使用されます。 この変数が見つからない場合は、Explain スキーマを指定するよう求めるプロンプトが出されます。
- -d dbname
- パッケージを含むデータベースの名前。
- -tn tenantname
- フォーマット設定する Explain 表が含まれる、データベース内のテナントの名前。 指定がない場合は、デフォルトの SYSTEM テナントが想定されます。
- -e schema
- Explain 表 SQL スキーマ。
- -f
- フォーマット・フラグ。 複数のフラグを、ストリングとして結合することができます。 例えば、以前のバージョンの Db2® データベース製品と同様の出力を得るには、 C オプションと Y オプションを -f CYと組み合わせることができます。
- O
- 演算子の要約。
- Y
- 列 EXPLAIN_STATEMENT.EXPLAIN_TEXT にフォーマット設定が含まれている場合であっても、元のステートメントを強制的にフォーマット設定します。 デフォルトの動作は、ステートメントのフォーマット設定が必要かどうかを自動的に検出し、元のフォーマット設定が存在するのであれば、それを使用します。
- C
- ステートメントと述部をフォーマット設定する際によりコンパクトなモードを使用します。 デフォルトは、読みやすい拡張モードです。 Y が指定されていない場合、自動検出によってステートメントのフォーマット設定が必要であると判断された場合にのみ、C が効力を持ちます。
- -g
- グラフ・プラン。
- x
- オプションを OFF にします (デフォルトは ON です)。
- O
- グラフだけを生成します。 表の内容はフォーマットしません。
- T
- グラフ内の各演算子の下に合計コストを組み込みます。
- F
- グラフ内の最初のタプルのコストを組み込みます。
- I
- グラフ内の各演算子の下に I/O コストを組み込みます。
- C
- グラフ内の各演算子の予期出力カーディナリティー (タプル数) を組み込みます。
これらのオプションを任意に組み合わせることができますが、相互に排他的な F と T は例外です。
- -l
- パッケージ名の処理時に大文字小文字を区別します。
- -m module_name
- -ot オプションが P、SP、F、または SF の場合の、ルーチンのモジュール名。 このパラメーターを指定しない場合は、モジュール・ルーチンは無視されます。 このパラメーターには、大文字と小文字の区別があります。
- -n name
- Explain 要求のパッケージ名 (SOURCE_NAME) またはオブジェクト名。 -ot が指定されない場合、パッケージであると見なされます。 このパラメーターには、大文字と小文字の区別があります。
- -no_map_char
- 表示できない 1 文字の「.」へのマッピングを実行しないようにします。 このマッピングは、1 バイトが表示できないマルチバイト文字の場合、および表示できないバイナリー文字の場合に発生する可能性があります。
- -no_prompt
- db2exfmt で欠落した入力オプションのプロンプトが表示されないようにします。 欠落した入力のデフォルト値が使用されます。
- -s schema
- パッケージ要求のパッケージ・スキーマ (SOURCE_SCHEMA)。 パッケージ・スキーマが指定されない場合、このオプションは「%」に設定されます。 オブジェクト・タイプがプロシージャー、関数、またはトリガーの場合、これは関連オブジェクトのスキーマです。 オブジェクト・タイプがプロシージャーでも、関数でも、トリガーでもない場合、スキーマは CURRENT SCHEMA 特殊レジスターの値に設定されます。 モジュールがプロシージャーまたは関数に提供されている場合、このオプションはモジュール・スキーマに相当します。 このパラメーターには、大文字と小文字の区別があります。
- -ot
- -n オプションと共に指定されるオブジェクトのタイプ。 デフォルト・タイプはパッケージです。
- PK
- パッケージ名
- P
- SQL プロシージャー名
- SP
- 特定の SQL プロシージャー名
- F
- コンパイル済み関数
- SF
- 特定のコンパイル済み関数名
- T
- コンパイル済みトリガー
- -runstats
- runstats に Explain 表に対する実行を強制します。 このオプションは、自動統計収集が使用可能になっている場合には指定する必要はありません。
- -o outfile
- 出力ファイル名。
- -t
- 出力を端末に送信します。
- -u userID password
- データベースに接続時に、指定のユーザー ID とパスワードを使用します。
ユーザー ID とパスワードはいずれも、 命名規則に従った有効な値でなければならず、 データベースによって認識される値でなければなりません。
- -w timestamp
- Explain タイム・スタンプ。 -1 を指定すれば、最新の Explain 要求を取得できます。
- -# sectnbr
- ソース内のセクション番号。 すべてのセクションを要求するには、ゼロを指定します。
- -v srcvers
- Explain 要求のパッケージ・バージョン (SOURCE_VERSION)。 デフォルト値は %です。
- -h
- ヘルプ情報を表示します。 このオプションを指定すると、他のすべてのオプションは無視され、ヘルプ情報のみが返されます。
使用上の注意
-hオプションと-lオプションではない限り、未指定パラメーター値、または不完全に指定されたパラメーター値については、プロンプトが出されます。
Explain 表のSQLスキーマが提供されない場合、環境変数USERの値がデフォルトとして使われます。 この変数が見つからない場合、Explain 表 SQL スキーマを指定するよう求めるプロンプトが出されます。
パッケージ名を使用して Explain 情報をフォーマットする場合、ソース名、ソース SQL スキーマ、Explain タイム・スタンプは、LIKE 述部形式で指定できます。 この場合、パーセント記号 (%) と下線 (_) をパターン・マッチング文字として使用して、1 つの呼び出しで複数のソースを選択できます。 EXPLAIN された最新のステートメントの場合は、 Explain タイム・スタンプを -1 と指定できます。
-oがファイル名なしに指定され、-tが指定されない場合、ユーザーにファイル名の入力を求めるプロンプトが出されます(デフォルト名はdb2exfmt.outです)。 -oまたは-tが指定されない場合、ファイル名の入力を求めるプロンプトが出されます (デフォルト・オプションは端末出力です)。 -o と -t の両方を指定すると、出力は端末に送られます。
Explain スナップショットが使用可能であれば、db2exfmt コマンドは Explain スナップショットの統計を返します。 使用可能でなければ、db2exfmt は、EXPLAIN_OBJECT 表に保管されている統計と、システム・カタログから直接取得された統計を返します。
パーティションごとの使用量、転送速度、およびプリフェッチ・サイズとして返される値は、db2exfmt コマンドの実行時に取得されます。 そのため、これらの値はステートメントが Explain されたときに使用された実際の値とは異なる可能性があります。
db2exfmt 出力に返される OVERHEAD 値、TRANSFERRATE 値および PREFETCHSIZE 値は、ステートメントがコンパイルされたときに使用された実際の値とは異なる可能性があります。
プロシージャー、関数、またはコンパイル済みトリガー・タイプが指定された場合、そのルーチンに関係する Explain 表内で使用可能なセクションすべてがフォーマットされます。 プロシージャーまたは関数が多重定義されている場合、プロシージャーまたは関数の特定名を指定する必要があります。
例
db2 explain plan with snapshot for query
db2exfmt
または、db2 set current explain mode yes
db2 set current explain snapshot yes
query
db2exfmt
db2 "CALL SET_ROUTINE_OPTS('EXPLAIN YES')"
db2 "CALL REBIND_ROUTINE_PACKAGE('T', 'PARAMNT', '', 'TRIg2', '')"
db2exfmt -d MYDB -ot T -s PARAMNT -n \"TRIg2\" -no_prompt
db2exfmt -d MYDB -ot T -s PARAMNT -n \"TRIg2\" -#4 -no_prompt