EXPLAIN_FROM_ACTIVITY プロシージャー - アクティビティー・イベント・モニター情報を使用したステートメントの Explain

EXPLAIN_FROM_ACTIVITY プロシージャーは、アクティビティー・イベント・モニターから得られるセクションの内容を使用して、ステートメントの特定の実行を Explain します。

Explain の出力は Explain 表に格納され、任意の既存の Explain ツール (例えば db2exfmt) を使ってこれを処理できます。 Explain の出力には、存在する場合、アクセス・プランとセクション actuals (アクセス・プランの演算子に関するランタイム統計) がどちらも含まれます。

構文図を読む構文図をスキップするEXPLAIN_FROM_ACTIVITY(appl_id,uow_id ,activity_id,activity_evmon_name ,explain_schema ,explain_requester,explain_time,source_name,source_schema,source_version)

スキーマは SYSPROC です。

許可

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

デフォルトの PUBLIC 特権

なし

表関数パラメーター

appl_id
タイプ VARCHAR(64) の入力引数。セクションを Explain する対象となるアクティビティーを発行したアプリケーションを一意的に識別します。 appl_id が NULL または空ストリングの場合、SQL2032N が戻されます。
uow_id
タイプ INTEGER の入力引数。セクションを Explain する対象となるアクティビティーの作業単位 ID を指定します。 作業単位 ID は、特定のアプリケーション内でのみ固有です。 uow_id が NULL である場合、SQL2032N が戻されます。
activity_id
タイプ INTEGER の入力引数。セクションを Explain する対象となるアクティビティーの ID を指定します。 アクティビティー ID は、作業単位の中でのみ固有です。 activity_id が NULL である場合、SQL2032N が戻されます。
activity_evmon_name
VARCHAR(128) の入力引数。セクションを Explain する対象となるアクティビティーを含む、表への書き込みアクティビティー・イベント・モニターの名前を指定します。 イベント・モニターが存在しない場合、またはアクティビティー・イベント・モニターでない場合には、SQL0204N が戻されます。 イベント・モニターが表への書き込みイベント・モニターでない場合、SQL20502N が戻されます。 activity_evmon_name が指定されない場合、SQL2032N が戻されます。 呼び出し元がアクティビティー・イベント・モニター表に対する SELECT 特権を持っていない場合、SQL0551N が戻されます。
explain_schema
タイプ 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) の出力引数。

以下の例では、一定期間にわたってアクティビティー・イベント・モニターに収集されたデータに対してマイニングを実行していると想定します。以下の照会を使用することで、CPU コストが非常に高い SQL ステートメントの存在に気付きます。
SELECT APPL_ID,
       UOW_ID,
       ACTIVTY_ID,
       USER_CPU_TIME
FROM ACTIVITY_A
ORDER BY USER_CPU_TIME
以下は、この照会の出力例を示しています。 N2.Db2INST1.0B5A12222841 という ID を持つアプリケーションが非常に多くの CPU 時間を消費しています。
   APPL_ID                   UOW_ID     ACTIVITY_ID    USER_CPU_TIME
   ------------------------  -------- -------------- ---------------
   *N2.Db2INST1.0B5A12222841   1              1       92782334234
   *N2.Db2INST1.0B5A12725841   2              7               326

     2 record(s) selected.
このアクティビティーのアクセス・プランを調べる EXPLAIN_FROM_ACTIVITY プロシージャーを使用して、このアクティビティーのチューニング (例えば索引の追加) に効果があるかどうかを判別できます。
CALL EXPLAIN_FROM_ACTIVITY( '*N2.Db2INST1.0B5A12222841', 1, 1, 'A', 'MYSCHEMA',
     ?, ?, ?, ?, ? )

使用上の注意

アクティビティーのセクションに対して Explain を実行するには、アクティビティー・データの収集を有効にするときに COLLECT ACTIVITY DATA WITH SECTION 節を指定する必要があります。こうすると、アクティビティー情報と共にセクションが収集されます。 識別されたアクティビティー項目と共にセクションが保管されていない場合には、SQL20501 が戻されます。

アクティビティーに関するセクション actuals が収集されなかった場合、セクションの Explain は成功しますが、Explain 出力には actuals 情報が含まれません。 以下のようなケースでは、セクション actuals が収集されません。
  • 入力として指定されたアクティビティーが WLM_CAPTURE_ACTIVITY_IN_PROGRESS ストアード・プロシージャーを使ってキャプチャーされた。 この場合、アクティビティー論理グループの partial_record エレメントの値は 1 です。
  • アクティビティー・イベント・モニターの ACTIVITY 表で SECTION_ACTUALS エレメントが欠落している。
  • キャプチャー対象のセクションに関するセクション actuals が有効になっていなかった。 セクション actuals を有効にするには、section_actuals データベース構成パラメーターを使用します。または特定のアプリケーションを対象に、WLM_SET_CONN_ENV プロシージャーを使用します。デフォルトではセクション実行時統計が無効です。
注: アクティビティーに関するセクション actuals が収集されたことを検証するには、ACTIVITY 表の SECTION_ACTUALS エレメントの長さが 0 より大きいかどうか確認してください。
注: アプリケーション用に WLM_SET_CONN_ENV プロシージャーによって指定された section_actuals 設定は、直ちに有効になります。 セクション actuals は、アプリケーションが次に発行するステートメントについて収集されます。
注: パーティション・データベース環境では、アクティビティー・データが収集されるメンバーでのみセクション actuals が収集されます。 すべてのメンバーで実行時統計を収集するには、必ず COLLECT ACTIVITY DATA ON ALL MEMBERS WITH DETAILS, SECTION 節を使用してアクティビティーを収集してください。 特定のアプリケーションを対象にすべてのメンバーでの収集を有効にするには、WLM_SET_CONN_ENV プロシージャーを呼び出すときに、2 番目の引数に値を「ALL」に設定した <collectactpartition> タグを含めることができます。

入力した appl_iduow_id、および activity_id に一致するアクティビティーが見つからない場合、SQL20501 が戻されます。 実行中に WLM_CAPTURE_ACTIVITY_IN_PROGRESS ストアード・プロシージャーを使ってアクティビティーが複数回にわたって収集された場合には、複数のアクティビティーがこれらに一致する可能性があります。そのような場合、セクションのキャプチャー対象となった最新の項目が Explain に使用されます。

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

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

ACTIVITYSTMT 論理グループの中には、エレメント STMT_TEXT、 ORIGINAL_STMT_TEXT、 SECTION_ENV、 EXECUTABLE_ID、 APPL_ID、 ACTIVITY_ID、 UOW_ID が含まれる必要があります。 これらのいずれかのエレメントが欠落している場合、ストアード・プロシージャーは SQL206 を戻します。