作業単位イベント・モニターのパッケージ・リスト情報

作業単位イベント・モニターは、作業単位の中で使われているパッケージのリストを収集することができます。 この情報を使用すると、アプリケーションの中で、期待される実行時間よりも長くかかっていると思われるストアード・プロシージャーを判別できます。

イベント・モニターで収集するデータの中に、作業単位内で使用されたパッケージについての情報を含めることができます。 この情報は、作業単位が終了したときに、 作業単位イベント・モニターに選択した出力オプションによって、未フォーマット・イベント表または UOW_PACKAGE_LIST_evmon-name 表 (evmon-name は、イベント・モニターに割り当てられた名前です) に、 イベントに関連する他の情報と一緒に書き込まれます。

この情報のキャプチャーを制御するには、以下の 2 つの方法があります。
  • CREATE または ALTER WORKLOAD ステートメントの COLLECT UNIT OF WORK DATA 節の PACKAGE LIST オプションは、特定の ワークロードに関するこの情報の収集を制御します。 このオプションを指定した場合、CREATE または ALTER WORKLOAD ステートメントで指定されたワークロードの下で実行される作業単位についての情報 (パッケージ・リスト情報を含む) が、 アクティブな作業単位イベント・モニターに送られます。
  • mon_uow_pkglist 構成パラメーターを ON に設定すると、データ・サーバーで実行されるすべての 作業単位についての パッケージ・リスト情報を、 アクティブな作業単位イベント・モニターに送ることができます。
    注: パッケージ・リスト情報を収集するには、mon_uow_data を BASE に設定する必要もあります。
パッケージ・リストに関する以下のデータが収集されます。
パッケージ ID (package_id - パッケージ ID : モニター・エレメント)
パッケージを識別する固有の ID。
ネスト・レベル (nesting_level - ネスト・レベル : モニター・エレメント)
ステートメントが実行されていた時点で有効であったネストまたは再帰のレベル。 ネストの各レベルは、ネストされた (または再帰可能な) ストアード・プロシージャー呼び出しまたはユーザー定義関数 (UDF) 呼び出しに対応します。
ルーチン ID (routine_id - ルーチン ID : モニター・エレメント)
固有なルーチン ID。 アクティビティーがルーチンの一部ではない場合、ゼロが戻されます。
呼び出し ID (invocation_id - 呼び出し ID : モニター・エレメント)
ルーチンの 1 つの呼び出しを、作業単位内の同じネスト・レベルの他の呼び出しと区別する ID。 その ID は特定のネスト・レベルに関して作業単位内で固有です。
パッケージ経過時間 (package_elapsed_time - パッケージ経過時間 : モニター・エレメント)
パッケージ内のセクションの実行にかかった経過時間。

パッケージ・リストに関して収集される情報のリストが示唆するように、各パッケージに関する情報だけでなく、パッケージ内のルーチンのそれぞれの呼び出しに関する情報もキャプチャーされます。

経過時間もまた追跡されます。 特定の呼び出しに関して計算される時間は、パッケージ内でのセクションの最初の実行から始まり、データベース・マネージャーが別のパッケージに切り替える時点で終了します。 経過時間が追跡される方法についてさらに確認するには、を参照してください。

パッケージ・リストが未フォーマット・イベント表に書き込まれる方法

パッケージ・リスト情報の収集を使用可能にすると、作業単位イベント・モニターは、各作業単位に関して未フォーマット・イベント (UE) 表に 2 つのレコードを書き込みます。 最初のレコードには、基本的な作業単位イベント・モニター・データが含まれます。 次のレコードには、パッケージ・リスト情報が含まれます。

パッケージ・リスト情報は UE 表の BLOB 列に保管されます。 表スペースのページ・サイズが 4k (デフォルト) の場合、32 項目から成るリストを 1 つのインライン BLOB として保管できます。 パッケージ・リストに書き込むことのできる項目の数は mon_pkglist_sz 構成パラメーターによって制御されます。 このパラメーターのデフォルトは 32 で、これは最大 32 個の項目をパッケージ・リストに含めることができるという意味です。 パッケージ・リストに含めることのできる項目数を増やす場合には、イベント・モニター出力の保管に使われる UE 表を、より大きなページ・サイズを持つ表スペースに必ず作成してください。 パッケージ・リストのサイズを 32 増やすごとに、表スペースのページ・サイズを 4k 増やす必要があることを想定してください。 したがって、例えばパッケージ・リスト内の最大項目数を 64 にした場合、表スペースのページ・サイズを少なくとも 8k にする必要があります。 表スペースのページ・サイズを増やさずに mon_pkglist_sz を増やした場合、パッケージ・リストは引き続き作成されますが、表の中で BLOB はインラインでは保管されません。このためパフォーマンスが影響を受ける可能性があります。
注: パッケージ・リスト情報を含んでいる BLOB がインラインで保管されるかどうかを判別するには、ADMIN_IS_INLINED 管理関数を使用できます。

通常の表へのパッケージ・リストの書き込み

イベント・モニターの出力に通常の表を使用する場合、 パッケージ・リスト情報は、uow_package_list 論理データ・グループ の一部としてキャプチャーされます。 各作業単位が完了すると、1 つ以上の行が UOW_PACKAGE_LIST_evmon-name 表に追加されます。 この表には、論理データ・グループ内のモニター・エレメントごとに 1 つの列があります。この表に追加される行数は、作業単位の一部として実行されたパッケージの数に依存します。ただし、この表に追加できる行数の上限は、 mon_pkglist_sz 構成パラメーターで制御されます。 このパラメーターのデフォルトは 32 で、これは最大 32 個の項目をパッケージ・リストに含めることができるという意味です。 パッケージ・リストに含むことのできる項目数を増やすには、 mon_pkglist_sz を増やしてください。

パッケージ・リスト出力

前述のように、 作業単位イベント・モニターが UE 表に書き込む場合、 イベント・モニターは、パッケージ情報を収集すると 2 つのレコードを UE 表に書き込みます。 UE 表のデータを表示するための各インターフェースは、 2 つの UE 表レコードに含まれている情報を表示するメカニズムを備えています。 例えば db2evmonfmt ツールは各レコードの情報を 1 つのレポートに結合します。 EVMON_FORMAT_UE_TO_TABLES プロシージャーを使用すると、 結合可能なリレーショナル表が生成されます。 パッケージ・リスト情報は、UOW_PACKAGE_LIST 表に入っています。 EVMON_FORMAT_UE_TO_XML は、 両方のレコードの情報を含む 1 つの XML 文書を生成します。詳しくは、作業単位イベント・モニターによりキャプチャーされたイベント・データへのアクセスを参照してください。

イベント・モニターが直接リレーショナル表に書き込む場合、 パッケージ・リスト情報は UOW_PACKAGE_LIST_evmon-name 表に書き込まれます。
注: パーティション・データベース環境では、コーディネーター・エージェント によって生成された作業単位イベントでのみパッケージ・リストが報告され、これは、そのエージェントが各パッケージ内で費やした時間のみを反映します。他のパーティションにある他のエージェントがこれらのパッケージ内で費やした時間は、まったく反映されません。
図 1 は、作業単位イベント・モニターによって生成され、db2evmonfmt ツールによってフォーマット設定された情報を示しています。
図 1. パッケージ・リスト情報を含む、作業単位イベント・モニターからの出力例
-------------------------------------------------------             
Event ID               : 12                                          
Event Type             : UOW                                        
Event Timestamp        : 2009-12-08-14.44.39.162707
Member                 : 0
Release                : 9070200
-------------------------------------------------------

Database Level Details 
----------------------
Database Member Activation Time : 2009-12-08-14.41.55.089416
Coordinator Member              : 0

Connection Level Details
------------------------
Application ID                  : *LOCAL.gstager.091208194155
Application Handle              : 21
Application Name                : db2bp
Session Authorization ID        : 
System Authorization ID         : 
Connection Timestamp            : 2009-12-08-14.41.55.089416
Client Process ID               : 13043
Client Platform                 : LINUXX8664
Client Product ID               : SQL09072
Client Protocol                 : LOCAL
Client Hostname                 : HOSTX
Client Port Number              : 0

UOW Level Details
------------------------
Start Time                      : 2009-12-08-14.44.39.160651
Stop Time                       : 2009-12-08-14.44.39.162707
Completion Status               : COMMIT
UOW ID                          : 12
Workoad Occurrence ID           : 1
Workload Name                   : SYSDEFAULTUSERWORKLOAD
Workoad ID                      : 1
Service Superclass Name         : SYSDEFAULTUSERCLASS
Service Subclass Name           : SYSDEFAULTSUBCLASS
Service Class ID                : 13
Client Userid                   :
Client Workstation Name         :
Client Application Name         :
Client Accounting String        :
Local Transaction ID            : 000000000000013B
Global Transaction ID           : 0000000000000000000000000000000000000000
Log Space Used                  : 124

UOW Metrics
------------------------
TOTAL_CPU_TIME            : 1591
TOTAL_WAIT_TIME           : 8363
ACT_ABORTED_TOTAL         : 0
ACT_COMPLETED_TOTAL       : 1
ACT_REJECTED_TOTAL:       : 0
AGENT_WAIT_TIME           : 87
AGENT_WAITS_TOTAL         : 1
APP_RQSTS_COMPLETED_TOTAL : 1
    .
    .
    .

Package List
------------------------
Package List Size       : 2
Package List Exceeded   : no

PACKAGE_ID           NESTING_LEVEL ROUTINE_ID  INVOCATION_ID        PACKAGE_ELAPSED_TIME
-------------------- ------------- ----------- -------------------- --------------------
240                  0             0           0                    0
330                  1             66539       1                    1
注: UOW Metrics セクションのいくつかのメトリックは除外されています。

特定の作業単位に関するパッケージ・リストに示されるパッケージの数は、基本的な作業単位イベント・モニター・データに含まれる package_list_count モニター・エレメント (上記のレポートでは「Package List Size」) に反映されます。作業単位で使用されるパッケージの数が mon_pkglist_sz 構成パラメーターの指定値を超えた場合、パッケージ・リストには追加のパッケージが含まれません。 ただし、パッケージ・リストに収まる数よりも多いパッケージが存在したかどうかが、package_list_exceeded モニター・エレメントに示されます。 このモニター・エレメントは、作業単位イベント・モニターの基本情報と共に戻されます (図 1 では「Package List Exceeded」)。 このモニター・エレメントの値が YES である場合、パッケージ・リストにより多くのパッケージを含めるために mon_pkglist_sz の値を増やすことができます。

以下に示すそれぞれの例は、パッケージ・リストに関して戻された情報を db2evmonfmt ツールで表示したものです。
例 1: 単一のパッケージ内の 1 つ以上のセクションを実行するアプリケーション
この例では、パッケージ ID 300 である 1 つのパッケージがこの作業単位に関して実行されました。
PACKAGE_ID  NESTING_LEVEL  ROUTINE_ID INVOCATION_ID ELAPSED_TIME
----------  -------------  ---------- ------------- ------------
300         0              0          0             100

この場合、パッケージ・リストに 1 つの項目があり、これはパッケージ内の 1 つ以上のセクション実行を反映しています。 同じパッケージで実行されるすべてのセクションは、同じパッケージ呼び出しに含まれると見なされます。

例 2: パッケージ内でストアード・プロシージャーを呼び出すアプリケーション
この例では、パッケージ ID 300 であるパッケージが、806 という ID を持つストアード・プロシージャーを呼び出します。ストアード・プロシージャー内の 3 つのセクションが実行されます。
PACKAGE_ID  NESTING_LEVEL  ROUTINE_ID INOVATION_ID ELAPSED_TIME
----------  -------------  ---------- ------------ ------------
300         0              0          0            21
300         1              806        1            100

この出力は、2 つの項目をリストで示しています。 1 つはストアード・プロシージャー呼び出しに関する項目、もう 1 つはストアード・プロシージャー内の 3 つのセクション実行に関する項目です。 リストの 2 番目の項目の NESTING_LEVEL は、別のパッケージからストアード・プロシージャーが呼び出されたことを表しています。

例 3: 異なる 2 つのパッケージのセクションを実行するアプリケーション
この例では、アプリケーションが 1 つのパッケージのセクションを実行した後、別のパッケージに移り、さらに最初のパッケージに戻ります。 ストアード・プロシージャーは呼び出されません。以下の疑似コードは、この作業単位を表記したものです。
Application
    EXEC PACKAGEA
    EXEC PACKAGEB
    EXEC PACKAGEA
また、PACKAGEA の呼び出しには 100 ms、PACKAGEB の呼び出しには 25 ms、および PACKAGEC の呼び出しには 460 ms を必要とすると想定します。 パッケージ・リストは、次の出力例のようになります。
PACKAGE_ID  NESTING_LEVEL  ROUTINE_ID INVOCATION_ID ELAPSED_TIME
----------  -------------  ---------- ------------- ------------
300         0              0          0             560
301         0              0          0             25

この場合、リストには 2 つの項目があります。 パッケージ A (PACKAGE_ID 300) のセクションは、合計 560 ミリ秒にわたって実行されました。 パッケージ B は 25 ミリ秒にわたって実行されました。 パッケージ A は、それぞれの呼び出しの INVOCATION_ID および NESTING_LEVEL が同じであるため、1 行で表されています。 どちらのパッケージでもストアード・プロシージャーが 1 つも呼び出されなかったため、INVOCATION_ID と NESTING_LEVEL は 0 のままです。

例 4: 複数のパッケージでセクションおよびストアード・プロシージャーを実行するアプリケーション

この例では、ID がそれぞれ 100、101、102 である 3 つのパッケージが存在します。 アプリケーションはパッケージ 100 の中にあります。 2 つのストアード・プロシージャーが存在し、それぞれの ID は 201 および 202 です。 最初のストアード・プロシージャー (SP1) はパッケージ 101 に、2 番目 (SP2) はパッケージ 102 にそれぞれ含まれています。 以下の疑似コードは、この作業単位を表記したものです。

Application
   CALL SP1 a 
      INSERT INTO T1 VALUES(7)  b 
      CALL SP2 c 
         INSERT INTO T2 VALUES(8)
      CALL SP2 d 
         INSERT INTO T2 VALUES(8)
この作業単位のパッケージ・リストは、次のようになります。
PACKAGE_ID  NESTING_LEVEL  ROUTINE_ID INVOCATION_ID ELAPSED_TIME
----------  -------------  ---------- ------------- ------------
100         0              0          0             21
101         1 1            201        1             40
102         2 2            202        1 3           35
102         2              202        2 3           35
上記の出力には、次の 4 つの項目があります。
  • 最初の項目は、最初のパッケージ内での SP1 呼び出しの実行に該当し、作業単位を表す疑似コードでは  a  という行です。
  • 2 番目の項目は、パッケージ 101 内の 201 という ID を持つストアード・プロシージャー内のセクション実行に該当します。 これらのセクションには行  b  c 、および  d  が含まれます。 ネスト・レベルは 1 に増えて、それが  1  で示されています。
  • 3 番目の項目は、SP1 から呼び出される、SP2 内の最初の INSERT INTO T2 ステートメントの実行を表しています。 ネスト・レベルが再び増加します ( 2 )。
  • リストの 4 番目の項目は、SP2 内の 2 番目の INSERT INTO T2 ステートメントの実行を表しています。 その前の SP2 呼び出しと同様に、このストアード・プロシージャーは SP1 から呼び出されるため、ネスト・レベルは引き続き同じです。 ただし、この 2 つのステートメントは別々のストアード・プロシージャー呼び出しの中で発生するため、両者はそれぞれ別個の呼び出し ID を持っています ( 3 )。 したがって、パッケージ・リストの中に 2 つの別個の項目があります。