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

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

Explain の出力は Explain 表に入れられ、既存の Explain ツール (例えば、 db2exfmt) を使用して処理できます。 Explain の出力には、アクセス・プランとセクション actuals (アクセス・プランのオペレーターのランタイム統計) の両方が含まれます (使用可能な場合)。

Read syntax diagramSkip visual syntax diagramEXPLAIN_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 が戻されます。
スキーマの説明
タイプ 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,
       ACTIVITY_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 エレメントが欠落している。
  • 実行されたセクションは静的セクションであり、 Db2® バージョン 9.7 フィックスパック 1 の適用以降、再バインドされていません。
  • キャプチャー対象のセクションに関するセクション 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 ツール (例えば db2exfmt) で使用して、セクションから取得される Explain 情報をフォーマットします。

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

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