IBM Support

[Db2] ロック・イベント・モニターで取得した情報の db2evmonfmt ツールを使わないフォーマット方法

Question & Answer


Question

バージョン 9.7 以降のロック・イベント・モニターで取得した情報の db2evmonfmt ツールを使わないフォーマットの方法について教えてください。

Answer

※ ロック・イベント・モニターの設定方法は[DB2 LUW] ロック・イベント・モニターの設定方法を参照してください。
ロック・イベント・モニターで取得したデータは、バイナリー形式で "未フォーマット・イベント表" に格納されるため、以下のいずれかの方法でフォーマットする必要があります。
  • EVMON_FORMAT_UE_TO_XML プロシージャーを使用して未フォーマット・イベント表から XML 文書にデータを抽出する
  • db2evmonfmt を使用する
db2evmonfmt ツールを使用したフォーマット方法は [DB2 LUW] ロック・イベント・モニターで取得した情報のフォーマット方法 を参照してください。 db2evmonfmt ツールを導入できないなど場合は、EVMON_FORMAT_UE_TO_XML プロシージャーを内部的に使用する EVMON_FORMAT_UE_TO_TABLES プロシージャーを使用してフォーマットを行うことができます。
EVMON_FORMAT_UE_TO_TABLES プロシージャーの呼び出しにより、保管された未フォーマットイベントを4つのリレーショナル表に取り出します。 それぞれの表に書き込まれる情報は以下のようになり、それらを SQL で取り出すことができます。
実行例:
この例では、未フォーマットイベント表を使用するイベントモニター名を LOCKEVMON とします。
  1. ロックタイムアウト後、EVMON_FORMAT_UE_TO_TABLES プロシージャーの呼び出しによって4つの表が生成され、そちらにイベントが書き出されます。 書き出しによって、元の未フォーマットイベント表からはイベントは消去されます。
     
    $ db2 "call EVMON_FORMAT_UE_TO_TABLES ( 'LOCKING', NULL, NULL, NULL, NULL, NULL, 'RECREATE_ONERROR;PRUNE_UE_TABLE', -1, 'SELECT * FROM LOCKEVMON ORDER BY event_timestamp')"
    
  2. 4つの表ができていることを確認します。
     
    $ db2 list tables 
    ​
    Table/View                      Schema          Type  Creation time
    ------------------------------- --------------- ----- --------------------------
      ...
    LOCKEVMON                       DB2INST1        T     2020-06-19-15.53.30.239610
    LOCK_ACTIVITY_VALUES            DB2INST1        T     2020-06-19-16.13.42.568127
    LOCK_EVENT                      DB2INST1        T     2020-06-19-16.13.40.461511
    LOCK_PARTICIPANTS               DB2INST1        T     2020-06-19-16.13.41.037173
    LOCK_PARTICIPANT_ACTIVITIES     DB2INST1        T     2020-06-19-16.13.41.553556
      ...
    
  3. LOCK_PARTICIPANTS 表および LOCK_EVENT 表から、ロックタイムアウトの際のロック保持者やロック要求者の情報が得られます。
     
    $ db2 "select event_id, event_timestamp, participant_no, participant_type, table_name, lock_object_type, lock_mode_requested, lock_mode, appl_id, application_handle, lock_wait_start_time from LOCK_PARTICIPANTS p,lock_event e where e.xmlid=p.xmlid order by event_id,participant_no"
    ​
    EVENT_ID   EVENT_TIMESTAMP            PARTICIPANT_NO PARTICIPANT_TYPE TABNAME    LOCK_OBJECT_TYPE  LOCK_MODE_REQUESTED  LOCK_MODE      APPL_ID                       APPLICATION_HANDLE LOCK_WAIT_START_TIME
    ---------- -------------------------- -------------- ---------------- ---------- ----------------- -------------------- -------------- ----------------------------- ------------------ --------------------------
             5 2020-06-19-16.28.59.919173              1 Requester        TAB1       ROW                                  8              5 *LOCAL.db2inst1.200619053837               2176 2020-06-19-16.28.49.844247
             5 2020-06-19-16.28.59.919173              2 Owner            -          -                                    -              - *LOCAL.db2inst1.200619062729               2261 -
    ​
      2 record(s) selected.
    
    この場合は、表 TAB1 に対する行ロックを待っていたことが分かります。LOCK_MODE=5 (X: 排他ロック)が取得されていたため、8(U: 更新ロック)が取得できずに待機となっていたことが分かります。 数値に対するロックタイプは以下で確認できます。
    lock_mode - ロック・モード : モニター・エレメント
  4. LOCK_PARTICIPANT_ACTIVITIES 表および LOCK_EVENT 表から、ロックタイムアウト発生時に実行されていたステートメントが確認できます。
     
    $ db2 "select event_id, participant_no, activity_id, substr(stmt_text,1,80) stmt_text from LOCK_PARTICIPANT_ACTIVITIES pa,lock_event e where pa.xmlid=e.xmlid and ACTIVITY_TYPE='current' order by event_id,participant_no,activity_id "
    ​
    EVENT_ID             PARTICIPANT_NO ACTIVITY_ID STMT_TEXT
    -------------------- -------------- ----------- --------------------------------------------------------------------------------
                       5              1           2 update tab1 set i=12 where i=2
    ​
      1 record(s) selected.
    
    この場合はロック要求者(PARTICIPANT_NO=1)のステートメントが出ています。
     
  5. LOCK_PARTICIPANT_ACTIVITIES​ 表および LOCK_EVENT 表から同一トランザクション内の過去のステートメントについて確認ができます。
$ db2 "select event_id, participant_no, activity_id, substr(stmt_text,1,80) stmt_text from LOCK_PARTICIPANT_ACTIVITIES pa,lock_event e where pa.xmlid=e.xmlid and ACTIVITY_TYPE='past' order by event_id,participant_no,activity_id "
​
EVENT_ID             PARTICIPANT_NO ACTIVITY_ID STMT_TEXT
-------------------- -------------- ----------- --------------------------------------------------------------------------------
                   5              1           1 insert into tab1 values 11
                   5              2           1 update tab1 set i=1 where i=2
                   5              2           2 select i from tab1
                   5              2           3 insert into tab1 values 10
3 の結果から、PARTICIPANT_NO: 1 がロック要求者、PARTICIPANT_NO: 2 がロック保持者となり、それぞれのステートメントの履歴が分かります。
 
その他、必要な情報はリレーショナル表から SQL で取り出すことができます。
 
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PmMAAU","label":"Performance-\u003ELocks"}],"ARM Case Number":"","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"}],"Version":"10.1.0;10.5.0;11.1.0;11.5.0;9.7.0"}]

Document Information

Modified date:
23 August 2023

UID

ibm16490641