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 とします。
この例では、未フォーマットイベント表を使用するイベントモニター名を LOCKEVMON とします。
- ロックタイムアウト後、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')"
- 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 ...
- 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 - ロック・モード : モニター・エレメント - 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)のステートメントが出ています。
- 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 で取り出すことができます。
[{"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"}]
Was this topic helpful?
Document Information
Modified date:
23 August 2023
UID
ibm16490641