EXPLAIN_FROM_SECTION プロシージャー - パッケージ・キャッシュまたはパッケージ・キャッシュ・イベント・モニター情報を使用したステートメントの Explain

EXPLAIN_FROM_SECTION プロシージャーは、パッケージ・キャッシュまたはパッケージ・キャッシュ・イベント・モニターから得られるセクションの内容を使ってステートメントを Explain します。

Explain の出力は Explain 表に格納され、任意の既存の Explain ツール (例えば db2exfmt) を使ってこれを処理できます。

スキーマは SYSPROC です。

許可

このルーチンを実行するには、以下のいずれかの権限または特権が必要です。
  • ルーチンに対する EXECUTE 特権
  • DATAACCESS 権限
  • DBADM 権限
  • SQLADM 権限
  • EXPLAIN 権限
さらに、グループに付与された特権を含め、セッションの許可 ID によって保持されている特権には、少なくとも以下のいずれかが含まれていなければなりません。
  • 指定されたスキーマ内の Explain 表に対する INSERT 特権
  • 指定されたスキーマ内の Explain 表に対する CONTROL 特権
  • DATAACCESS 権限

デフォルトの PUBLIC 特権

なし

構文

Read syntax diagramSkip visual syntax diagramEXPLAIN_FROM_SECTION(executable_id,section_source_type ,section_source_name,member ,explain_schema ,explain_requester,explain_time ,source_name,source_schema ,source_version)

プロシージャー・パラメーター

executable_id
Explain されるセクションを一意的に識別する、タイプ VARCHAR(32) FOR BIT DATA の入力引数。 この引数が NULL または空ストリングである場合、SQL2032 が戻されます。
セクション・ソース・タイプ (section_source_type)
Explain されるセクションのソースを指定する、タイプ CHAR(1) の入力引数。 有効な値は以下のとおりです。
  • M - メモリー内のパッケージ・キャッシュからセクションが取得されます
  • P - パッケージ・キャッシュ・イベント・モニターからセクションが取得されます。 通常の表、または未フォーマット・イベント表のどちらかをイベント・モニターの出力タイプとして使用できます。

静的 SQL では、section_source_type が M でセクションがパッケージ・キャッシュに存在しない場合、カタログ表の中でセクションが検索されます。

セクション・ソース名 (section_source_name)
section_source_type が P の場合に、パッケージ・キャッシュ・イベント・モニターの名前を指定する VARCHAR(128) の入力引数。 section_source_type が M の場合、パッケージ・キャッシュ・イベント・モニターの名前をオプションで指定できます。 パッケージ・キャッシュ内にセクションが見つからない場合 (例えば EXPLAIN_FROM_SECTION ストアード・プロシージャーの呼び出し前にセクションがパッケージ・キャッシュからフラッシュされた場合)、イベント・モニターの中でセクションが検索されます。 ソース入力イベント・モニターが、COLLECT DETAILED DATA オプションを使って作成されたパッケージ・キャッシュ・イベント・モニターではない場合、SQL0204N が戻されます。 呼び出し元がパッケージ・キャッシュ・イベント・モニター表に対する SELECT 特権を持っていない場合、SQL0551N が戻されます。
member
section_source_typeM の場合に、説明されるセクションがメモリー内にあるメンバーを指定するタイプ INTEGER の入力引数。 -1 が指定されている場合、プロシージャーは、現行コーディネーター・メンバーおよびセクション・コンパイル・メンバーでセクションを検索します。 section_source_typeM 以外の場合には、この引数は無視されます。
スキーマの説明
タイプ VARCHAR(128) のオプションの入力または出力引数。Explain 情報が書き込まれる Explain 表を含むスキーマを指定します。 空ストリングまたは NULL を指定した場合、セッション許可 ID のもとで Explain 表が検索され、その後、SYSTOOLS スキーマで検索されます。 Explain 表が見つからない場合、SQL0219N が戻されます。 呼び出し元が Explain 表に対する INSERT 特権を持っていない場合、SQL0551N が戻されます。 出力の場合、このパラメーターは、情報が書き込まれた Explain 表を含んでいるスキーマに設定されます。
EXPLAIN_REQUESTER
タイプ VARCHAR(128) の出力引数。このルーチンが呼び出された接続のセッション許可 ID が格納されます。
EXPLAIN_TIME
Explain 要求の開始時刻を格納する、タイプ TIMESTAMP の出力引数。
source_name
タイプ VARCHAR (128) の出力引数。ステートメントの準備時またはコンパイル時に実行されていたパッケージの名前を格納します。
SOURCE_SCHEMA
ソース Explain 要求のスキーマまたは修飾子を格納する、タイプ VARCHAR(128) の出力引数。
SOURCE_VERSION
Explain 要求のソースのバージョンを格納する、タイプ VARCHAR(64) の出力引数。

使用上の注意

入力の実行可能 ID に一致するセクションが見つからない場合、SQL20501 が戻されます。 入力 executable_id は、以下のソースから入手可能です。
  • アクティビティー・イベント・モニター
  • パッケージ・キャッシュ・イベント・モニター
  • MON_GET_ACTIVITY_DETAILS 表関数
  • MON_GET_PKG_CACHE_STMT 表関数
  • WLM_GET_WORKLOAD_OCCURRENCE_ACTIVITIES 表関数
  • WLM_GET_SERVICE_CLASS_AGENTS 表関数
  • MON_GET_PKG_CACHE_STMT_DETAILS 表関数
  • MON_GET_APPL_LOCKWAIT 表関数

出力パラメーター explain_requesterexplain_timesource_namesource_schemasource_version はキーを構成し、これを使って Explain 表内のセクションに関する情報を検索します。 これらのパラメーターをいずれかの既存の Explain ツール (例えば db2exfmt) で使用して、セクションから取得される Explain 情報をフォーマットします。

このプロシージャーは、Explain 表への挿入後に COMMIT ステートメントを発行しません。 プロシージャーの呼び出し元が COMMIT を発行する必要があります。

この例は、セクションごとに入手可能なモニタリング・メトリックを調べることで、パッケージ・キャッシュ内の非常にコストが高いステートメントを識別して分析する方法を示しています。 まず、セクションによる CPU 時間の使用状況を判別するために、以下の SELECT ステートメントのような照会を発行します。
SELECT executable_id,
       Total_cpu_time,
       Varchar(stmt_text, 100) as stmt_text
FROM TABLE(MON_GET_PKG_CACHE_STMT (NULL, NULL,NULL, -1)) AS T
以下は、この照会の出力例を示しています。
EXECUTABLE_ID                                 TOTAL_CPU_TIME ...
--------------                                -------------- ...
x'010000000000000012...200200811261904103698' 91875622       ...
x'010000000000000007...200200811261904103238'      300       ...

     2 record(s) selected.
以下は、この照会の出力例の続きを示しています。
...STMT_TEXT
...----------------------
...SELECT * FROM SYSCAT.TABLES
...INSERT INTO T1 VALUES(123)

     2 record(s) selected.
高コストの SELECT ステートメントのアクセス・プランを調べるには、その executable_id を EXPLAIN_FROM_SECTION プロシージャーに渡します。 出力を MYSCHEMA スキーマの Explain 表に入れます。
CALL EXPLAIN_FROM_SECTION
     ( x'01000000000000001200000000000000000000000200200811261904103698', 
      'M', NULL, 0, 'MYSCHEMA', ?, ?, ?, ?, ? )