[pgsql-jp: 37973] デッドロックの原因調査方法につきまして
Arimura Satoshi
sarimur1 @ gw.nsw.co.jp
2007年 2月 2日 (金) 10:40:37 JST
有村と申します。
Postgresのバージョンは 7.4.7です。
下記環境で発生したデッドロック処理について質問があります。
Webのアプリケーションでデータ表示に利用しているテーブルAがあります。
Aテーブルをバッチ処理で30分おきに更新するように設定しています。
Aテーブルを更新するために、3つのテーブルを利用しています。
・Aテーブル(本テーブル)
・Bテーブル(本テーブルから変更される削除用ワークテーブル)
・Cテーブル(本テーブルに変更されるワークテーブル。事前に作成される)
バッチで実行するSQLは以下の内容です。
-----
BEGIN;
ALTER TABLE A RENAME TO B;
ALTER TABLE C RENAME TO A;
COMMIT;
BEGIN;
DROP TABLE C;
COMMIT;
-----
上記バッチ処理で、AテーブルはフロントのWeb側から常に参照できるようにと
考えておりました。
しかし、DROP TABLE C を実行をした際にデッドロック処理が
不定期に発生いたしました。下記がログ内容です。
-----
BEGIN
DROP TABLE
psql:batch.sql:6: ERROR: deadlock detected
DETAIL: Process 12617 waits for AccessExclusiveLock on relation 44193321 of database 17143; blocked by process 12579.
Process 12579 waits for AccessShareLock on relation 44193324 of database 17143; blocked by process 12617.
-----
オブジェクトを調べましたところ、44193321はCテーブル、
44193324はpg_toast_44193321ということがわかりました。
デッドロックがおきた原因を調べたいのですが、方法はございますでしょうか。
よろしくお願いいたします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
From: 有村 聡 (sarimur1 @ gw.nsw.co.jp)
pgsql-jp メーリングリストの案内