How To
Summary
ロック待機やロック・タイムアウトなどで行ロックが問題になるとき、その行データの確認が必要になることがあります。
この文書はロック・イベント・モニターや db2pd などのモニターから得られたロック名から、その行のデータを確認する方法を案内します。
Objective
行ロック名は、その表の表スペース ID (TABLESPACE_ID)、オブジェクト ID (OBJECT_ID) とレコード ID (RID) から生成されます。
MON_FORMAT_LOCK_NAME を使用すると、行ロック名から表名およびデータ・パーティション ID (DATA_PARTITION_ID)、ページ ID (PAGEID)、行 ID (ROWID) を確認できます。レコード ID (RID) は以下の式によって生成されるため、ユーザー定義関数を作成してロック名から行の特定を簡易化します。
RID = 2^48 * DATA_PARTITION_ID + 2^16 * PAGEID + ROWID
Steps
事前準備 (データベースにつき一度のみ実行)
- 以下のようなテキストファイル gen_rid.sql を用意します。
gen_rid.sqlCREATE OR REPLACE FUNCTION GEN_RID(DATA_PARTITION_ID INTEGER, PAGEID BIGINT, ROWID INTEGER) RETURNS BIGINT SPECIFIC GEN_RID RETURN DATA_PARTITION_ID * POWER(BIGINT(2),48) + PAGEID * POWER(BIGINT(2),16) + ROWID;
- gen_rid.sql を使用して GEN_RID スカラー関数を作成します。
db2 connect to <db_name> db2 -tvf gen_rid.sql
行ロック名から行データを確認する方法
現在取得されているロック名からそのロックされている行の内容を表示する方法は以下の通りです。
- MON_FORMAT_LOCK_NAME 表関数を使用してロック名から表名、パーティション番号、ページID、行ID を判別します。
db2 "SELECT * FROM TABLE(MON_FORMAT_LOCK_NAME('<ロック名>')) as t"
例$ db2 "select * from table(MON_FORMAT_LOCK_NAME('06000500080000000000000052')) as t" NAME 2 -------------------- -------------------- LOCK_OBJECT_TYPE ROW ROWID 8 DATA_PARTITION_ID 0 PAGEID 0 TBSP_NAME TS1 TABSCHEMA DB2INST1 TABNAME T1 7 record(s) selected.
-
得られた値からその RID を指定して該当行のデータを表示します。
db2 "SELECT * FROM <TABSCHEMA>.<TABNAME> where RID(<TABSCHEMA>.<TABNAME>) = GEN_RID(<DATA_PARTITION_ID>,<PAGEID>,<ROWID>) with UR"
例$ db2 "SELECT * FROM DB2INST1.T1 where RID(DB2INST1.T1) = GEN_RID(0,0,8) with UR" C1 C2 ----------- ------------ 5 AAA 1 record(s) selected.
運用上の考慮点
- ロック名を確認した時点からデータが更新されていないと保証できない場合、事後に確認したデータは意味がない可能性があります。
関連情報
MON_FORMAT_LOCK_NAME 表関数
[Db2] パスポート・アドバンテージによく寄せられる質問
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
MON_FORMAT_LOCK_NAME 表関数
[Db2] パスポート・アドバンテージによく寄せられる質問
お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート
Document Location
Worldwide
[{"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":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]
Was this topic helpful?
Document Information
Modified date:
24 May 2024
UID
ibm17154931