Data Virtualizationで'EXPLAIN_FORMAT
ストアドプロシージャを実行し、'db2exfmt
コマンドを実行することができる。 照会アクセス・プランの作成時に生成される EXPLAIN
情報のフォーマットを指定し、生成された EXPLAIN
出力をテキスト・ファイルにダウンロードすることができます。
EXPLAIN_FORMAT
プロシージャーは、指定されたパラメーターに基づいて EXPLAIN
表の内容をフォーマットし、EXPLAIN_STATEMENT 表の EXPLAIN_FORMAT_TEXT 列の下にあるフォーマット済みデータを更新します。 また、このプロシージャーは、SQL ステートメントを OUTPUT パラメーターとして返します。このパラメーターを使用して、EXPLAIN_STATEMENT 表から定様式データを取り出すことができます。 EXPLAIN
表について詳しくは、 Db2® 資料の EXPLAIN_STATEMENT 表 を参照してください。
プロシージャーは、 EXPLAIN
表の更新後に COMMIT
ステートメントを発行しません。 プロシージャーの呼び出し側は、 COMMIT
ステートメントを発行する必要があります。
スキーマは SYSPROC
です。
権限
- ルーチンに対する EXECUTE 特権
- DATAACCESS 権限
- DBADM 権限
- SQLADM 権限
- 指定されたスキーマ内の Explain 表に対する INSERT 特権
- 指定されたスキーマ内の Explain 表に対する CONTROL 特権
- DATAACCESS 権限
- デフォルトの PUBLIC 特権
- 実行
構文
---
[source,c++]
>>--EXPLAIN_FORMAT----(-- explain_schema-- , --explain_requester--, --explain_time-- , --------------->
>-- ------------ source_name------- , ---------source_schema-------- , --------source_version-- , --->
>-- ------------ object_type------- , ----------------------------object_module----------------------->
v--------|
>-- --section_number-- , ----format_flags------+-----+------- , ---graph_flags-----+---+-------+--------+-----<>
'--O--' '-x-' '--- O --'
'--Y--' '--- I --'
'--C--' '--- C --'
'--- T --'
'--- F --'
---
プロシージャー・パラメーター
- 説明スキーマ
- EXPLAIN 情報の書き込み先の Explain 表を含むスキーマを指定する、タイプ VARCHAR (128) の入力または出力引数。 空ストリングまたは NULL が指定された場合、現行の許可 ID のデフォルト・スキーマの下で Explain 表が検索され、次に SYSTOOLS スキーマが検索されます。 指定されたスキーマの下に Explain 表が見つからない場合は、 SQL0219N が戻されます。 指定されたスキーマ内の Explain 表に対する INSERT 特権が呼び出し元にない場合は、 SQL0551N が戻されます。
- EXPLAIN_REQUESTER
- この Explain 要求のイニシエーターの許可 ID を指定する、タイプ VARCHAR (128) の入力または出力引数。 空ストリングまたは NULL が指定された場合、現行セッションの下で Explain 表の検索が行われます。
- EXPLAIN_TIME
- Explain 要求の開始時刻を格納する、タイプ TIMESTAMP の入力または出力引数。 NULL が指定されている場合は、最新の Explain 要求を取得してください。
- SOURCE_NAME
- Explain 要求のパッケージ名 (SOURCE_NAME) またはオブジェクト名を指定する、タイプ VARCHAR (128) の入力または出力引数。 object_type オプションが指定されていない場合は、パッケージが想定されます。
- SOURCE_SCHEMA
- パッケージ要求のパッケージ・スキーマ (SOURCE_SCHEMA) を指定する、タイプ VARCHAR (128) の入力または出力引数。 パッケージ・スキーマが指定されない場合、このオプションは「%」に設定されます。 プロシージャーまたは関数に object_module パラメーターが指定されている場合、このオプションはモジュール・スキーマに対応します。 オブジェクト・タイプがプロシージャー、関数、またはトリガーの場合、これは関連オブジェクトのスキーマです。 オブジェクト・タイプがプロシージャー、関数、またはトリガーではなく、object_module パラメーターが指定されていない場合、スキーマは CURRENT SCHEMA 特殊レジスターの値に設定されます。
- SOURCE_VERSION
- Explain 要求のパッケージ・バージョン (SOURCE_VERSION) を指定する、タイプ VARCHAR (128) の入力または出力引数。 デフォルト値は% です。
- section_number
- ソース内のセクション番号を含む、タイプ INTEGER の入力または出力引数。 すべてのセクションを要求するには、ゼロを指定します。
- オブジェクト・タイプ
- 指定されたオブジェクトのタイプ。 デフォルト・タイプはパッケージです。
- object_module
- object_type オプションが P、SP、F、または SF の場合のルーチンのモジュール名。 object_type パラメーターが指定されていない場合、モジュール名は無視されます。
- フォーマット・フラグ
- 1 つのストリングとして結合できる複数のフラグを含む、タイプ VARCHAR (128) の入力引数。 空ストリングまたは NULL が指定された場合、フォーマット・オプションは自動的に決定されます。
- O: オペレーターの要約
- Y: 列 EXPLAIN_STATEMENT.EXPLAIN_TEXT にフォーマット設定が含まれています。 デフォルトの動作は、ステートメントのフォーマット設定が必要かどうかを自動的に検出し、元のフォーマット設定が存在するのであれば、それを使用します。
- C: ステートメントおよび述部のフォーマット設定時に、よりコンパクトなモードを使用します。 デフォルトは拡張モードです。 Y を指定しないと、自動検出によってステートメントのフォーマットが必要であると判断された場合にのみ、C が有効になります。
- グラフ・フラグ
- ストリングとして結合できる複数のグラフ・フラグを含む、タイプ VARCHAR (128) の入力引数。 空ストリングまたは NULL が指定されている場合、「TIC」がデフォルト・オプションです。
- extract_sql (抽出 SQL)
- フォーマット済みデータを EXPLAIN_STATEMENT に対して抽出するために使用できる SQL ステートメントを含む、タイプ VARCHAR (2048) の出力引数。
使用上の注意
パラメーター explain_schema、explain_requester、explain_time、source_schema、source_name、source_version、section_number は、Explain 表のセクションの情報を検索するために使用されるキーを構成します。 これらのパラメーターに NULL、空、またはワイルドカード入力が指定されている場合、使用される実際の値は戻り時にパラメーター内で更新されます。
- 渡されたパラメーターを使用して、Explain 表から取得した EXPLAIN 情報をフォーマットします。
- 列 EXPLAIN_FORMAT_TEXT の下の EXPLAIN_STATEMENT 表のフォーマット済みデータを更新します。
- すべての INOUT パラメーター (explain_schema、explain_requester、explain_time、source_schema、source_name、source_version、section_number) に使用される実際の値を返します。
- プロシージャーが正常に実行されると、OUT パラメーター EXTRACT_SQL に、EXPLAIN_STATEMENT 表からフォーマット済みデータを取得するために使用できる SQL ステートメントの例が取り込まれます。 それ以外の場合は、エラー・メッセージが表示されます。
例
- 「 https://www.ibm.com/docs/en/db2/11.5?topic=optimization-explain-facility」に記載されている方法を使用して、Explain 表を作成し、関心のある照会の Explain データを収集します。
- 以下のようにして、
EXPLAIN_FORMAT
ストアード・プロシージャーを呼び出します。Call explain_format('DB2INST1', 'DB2INST1', '2022-11-08-02.28.42.810882', 'SQLC2P31', 'NULLID', '', 0, '', '', 'T', ?)
以下の表のパラメーターを使用します。
タイプ パラメーター・リスト 上記の例のサンプル値 INOUT 説明スキーマ (Explain_Schema) DB2INST1 INOUT EXPLAIN_REQUESTER DB2INST1 INOUT EXPLAIN_TIME 2022-11-08-02.28.42.810882 INOUT SOURCE_NAME SQLC2P31 INOUT SOURCE_SCHEMA NULLID INOUT SOURCE_VERSION INOUT SECTION_NUMBER 0 IN OBJECT_TYPE IN object_module IN グラフ・フラグ T OUT SQL の抽出 ? - extract_sql OUT パラメーターから以下の SQL ステートメントを実行して、フォーマット済みデータを EXPLAIN_STATEMENT 表から抽出します。
この照会では、以下の例のようなフォーマット済み Explain プランが表示されます。select EXPLAIN_FORMAT_TEXT from "DB2INST1".EXPLAIN_STATEMENT where EXPLAIN_REQUESTER='DB2INST1' and EXPLAIN_TIME='2022-11-08-02.28.42.810882' and SOURCE_NAME='SQLC2P31' and SOURCE_SCHEMA='NULLID' and SOURCE_VERSION='' and SECTION_NUMBER=0 and EXPLAIN_LEVEL='O' FOR READ ONLY;
Explain インスタンス:DB2 Universal Database Version 11.5, 5622-044 (c) Copyright IBM Corp. 1991, 2019 Licensed Material - Program Property of IBM IBM DATABASE 2 Explain Table Format Tool
DB2_VERSION: 11.05.9 FORMATTED ON DB: SAURABH SOURCE_NAME: SQLC2P31 SOURCE_SCHEMA: NULLID SOURCE_VERSION: EXPLAIN_TIME: 2022-11-08-02.28.42.810882 EXPLAIN_REQUESTER: DB2INST1
Database Context: ---------------- Parallelism: None CPU Speed: 4.000000e-05 Comm Speed: 0 Buffer Pool size: 697394 Sort Heap size: 3090 Database Heap size: 5099 Lock List size: 106213 Maximum Lock List: 98 Average Applications: 1 Locks Available: 3330839
Package Context: --------------- SQL Type: Dynamic Optimization Level: 5 Blocking: Block All Cursors Isolation Level: Cursor Stability
---------------- STATEMENT 1 SECTION 201 ---------------- QUERYNO: 1 QUERYTAG: CLP Statement Type: Select Updatable: No Deletable: No Query Degree: 1
Original Statement: ------------------ select * from EXPLAIN_ACTUALS
Optimized Statement: ------------------- SELECT Q1.EXPLAIN_REQUESTER AS "EXPLAIN_REQUESTER", Q1.EXPLAIN_TIME AS "EXPLAIN_TIME", Q1.SOURCE_NAME AS "SOURCE_NAME", Q1.SOURCE_SCHEMA AS "SOURCE_SCHEMA", Q1.SOURCE_VERSION AS "SOURCE_VERSION", Q1.EXPLAIN_LEVEL AS "EXPLAIN_LEVEL", Q1.STMTNO AS "STMTNO", Q1.SECTNO AS "SECTNO", Q1.OPERATOR_ID AS "OPERATOR_ID", Q1.DBPARTITIONNUM AS "DBPARTITIONNUM", Q1.PREDICATE_ID AS "PREDICATE_ID", Q1.HOW_APPLIED AS "HOW_APPLIED", Q1.ACTUAL_TYPE AS "ACTUAL_TYPE", Q1.ACTUAL_VALUE AS "ACTUAL_VALUE" FROM DB2INST1.EXPLAIN_ACTUALS AS Q1
Access Plan: ----------- Total Cost: 9.33976 Query Degree: 1
Rows RETURN ( 1) Cost I/O | 7 TBSCAN ( 2) 9.33976 1 | 7 TABLE: DB2INST1 EXPLAIN_ACTUALS Q1
Extended Diagnostic Information: -------------------------------- Diagnostic Identifier: 1 Diagnostic Details: EXP0020W Statistics have not been collected for table "DB2INST1"."EXPLAIN_ACTUALS". This may result in a sub-optimal access plan and poor performance. Statistics should be collected for this table.
Plan Details: ------------- 1) RETURN: (Return Result) Cumulative Total Cost: 9.33976 Cumulative CPU Cost: 64369 Cumulative I/O Cost: 1 Cumulative Re-Total Cost: 0.55104 Cumulative Re-CPU Cost: 13776 Cumulative Re-I/O Cost: 0 Cumulative First Row Cost: 8.8576 Estimated Bufferpool Buffers: 1 Arguments: --------- BLDLEVEL: (Build level) DB2 v11.5.9.0 : z2201010100 CPUCACHE: (Per-thread CPU cache size) 16777216 HEAPUSE : (Maximum Statement Heap Usage) 96 Pages PLANID : (Access plan identifier) 4e88ef7dccf8bbe7 PREPTIME: (Statement prepare time) 37 milliseconds SEMEVID : (Semantic environment identifier) e58edaa6cc913871 STMTHEAP: (Statement heap size) 8192 STMTID : (Normalized statement identifier) 226ceef303eb75ac TENANTID: (Compiled In Tenant ID) 0 TENANTNM: (Compiled In Tenant Name) SYSTEM Input Streams: ------------- 2) From Operator #2 Estimated number of rows: 7 Number of columns: 14 Subquery predicate ID: Not Applicable Column Names: ------------ +Q2.ACTUAL_VALUE+Q2.ACTUAL_TYPE+Q2.HOW_APPLIED +Q2.PREDICATE_ID+Q2.DBPARTITIONNUM +Q2.OPERATOR_ID+Q2.SECTNO+Q2.STMTNO +Q2.EXPLAIN_LEVEL+Q2.SOURCE_VERSION +Q2.SOURCE_SCHEMA+Q2.SOURCE_NAME +Q2.EXPLAIN_TIME+Q2.EXPLAIN_REQUESTER 2) TBSCAN: (Table Scan) Cumulative Total Cost: 9.33976 Cumulative CPU Cost: 64369 Cumulative I/O Cost: 1 Cumulative Re-Total Cost: 0.55104 Cumulative Re-CPU Cost: 13776 Cumulative Re-I/O Cost: 0 Cumulative First Row Cost: 8.8576 Estimated Bufferpool Buffers: 1 Arguments: --------- CUR_COMM: (Currently Committed) TRUE LCKAVOID: (Lock Avoidance) TRUE MAXPAGES: (Maximum pages for prefetch) ALL PREFETCH: (Type of Prefetch) NONE ROWLOCK : (Row Lock intent) SHARE (CS/RS) SCANDIR : (Scan Direction) FORWARD SKIP_INS: (Skip Inserted Rows) TRUE SPEED : (Assumed speed of scan, in sharing structures) FAST TABLOCK : (Table Lock intent) INTENT SHARE TBISOLVL: (Table access Isolation Level) CURSOR STABILITY THROTTLE: (Scan may be throttled, for scan sharing) TRUE VISIBLE : (May be included in scan sharing structures) TRUE WRAPPING: (Scan may start anywhere and wrap) TRUE Input Streams: ------------- 1) From Object DB2INST1.EXPLAIN_ACTUALS Estimated number of rows: 7 Number of columns: 15 Subquery predicate ID: Not Applicable Column Names: ------------ +Q1.$RID$+Q1.ACTUAL_VALUE+Q1.ACTUAL_TYPE +Q1.HOW_APPLIED+Q1.PREDICATE_ID +Q1.DBPARTITIONNUM+Q1.OPERATOR_ID+Q1.SECTNO +Q1.STMTNO+Q1.EXPLAIN_LEVEL+Q1.SOURCE_VERSION +Q1.SOURCE_SCHEMA+Q1.SOURCE_NAME +Q1.EXPLAIN_TIME+Q1.EXPLAIN_REQUESTER Output Streams: -------------- 2) To Operator #1 Estimated number of rows: 7 Number of columns: 14 Subquery predicate ID: Not Applicable Column Names: ------------ +Q2.ACTUAL_VALUE+Q2.ACTUAL_TYPE+Q2.HOW_APPLIED +Q2.PREDICATE_ID+Q2.DBPARTITIONNUM +Q2.OPERATOR_ID+Q2.SECTNO+Q2.STMTNO +Q2.EXPLAIN_LEVEL+Q2.SOURCE_VERSION +Q2.SOURCE_SCHEMA+Q2.SOURCE_NAME +Q2.EXPLAIN_TIME+Q2.EXPLAIN_REQUESTER Objects Used in Access Plan: --------------------------- Schema: DB2INST1 Name: EXPLAIN_ACTUALS Type: Table Time of creation: 2022-11-08-02.27.27.843587 Last statistics update: Number of columns: 14 Number of rows: 7 Width of rows: 392 Number of buffer pool pages: 1 Number of data partitions: 1 Distinct row values: No Tablespace name: USERSPACE1 Tablespace overhead: 6.725000 Tablespace transfer rate: 0.040000 Source for statistics: Single Node Prefetch page count: 32 Container extent page count: 32 Table overflow record count: 0 Table Active Blocks: -1 Average Row Compression Ratio: -1 Percentage Rows Compressed: -1 Average Compressed Row Size: -1