[pgcluster: 495] Re: SELECT FOR UPDATEでLOCK 検知後、固まる不具合について
Yusuke Ito
y-110 @ yumemi.co.jp
2004年 8月 12日 (木) 16:42:39 JST
お世話になっております。
伊藤と申します。
> 上記の現象は、SELECT文でLOCKが発生し、LOCKが解消してクエリーを継続する際
> シーケンスの途中から始めなければならないところを、シーケンスの最初から
> 始めようとしていたためでした。107av10以降に入ったエンバグです。
>
> 修整した版を107av14として作製しました。
> 明日(今日)、タイミングの良いところでアップしたいと思います。
1.0.7av14リリース、ありがとうございます。
早速 1.0.7av14 を導入し、上記現象が解消されていることを確認致しました。
ただ、その検証の際に、deadlockが検出された後、psqlが落ちてしまう現象が確認されました。
下記に詳細をご報告します。
【サーバ構成】
レプリケーションサーバ(R1) 1台
クラスタサーバ (C1,C2,C3,C4) 4台
PGCluster 1.0.7av14
サーバは全て Debian GNU 3.0 です。
【前提】
testdb にて、create table a(int id) を実行し、110 を insert しておく。
【検証手順】
BEGIN;
SELECT id FROM a WHERE id = 110 FOR UPDATE;
COMMIT;
を1セットとしてこれを100回記述したファイルを sfu.sqlというファイル名保存。
以下、2つのパターンの検証を行いました。
1. C1〜C4で、psql -U postgres -d testdb -f sfu.sql を(ほぼ)同時に実行。
2. C1 上で psql -U postgres -d testdb -f sfu.sql を3つ同時に実行。
【結果】
1 の場合、およそ正常に実行されますが、deadlock detected が C1〜C4 上でたまに確認されます。
また、deadlock detected. が検出された直後に psql が以下のメッセージを吐いて落ちる場合があります。
これは、毎回起こるわけではなく、少ない割合で発生します。
BEGIN
psql:sfu.sql:167: ERROR: deadlock detected
psql:sfu.sql:168: WARNING: Message from PostgreSQL backend:
The Postmaster has informed me that some other backend
died abnormally and possibly corrupted shared memory.
I have rolled back the current transaction and am
going to terminate your database system connection and exit.
Please reconnect to the database system and repeat your query.
psql:sfu.sql:168: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
psql:sfu.sql:168: connection to server was lost
このメッセージを吐いたクラスタサーバは、pgreplicate.sts にエラーが表示され、
レプリケーションサーバから切り離されます。
切り離された後、参照モードで動作すると想定しておりましたが、
レプリケーションサーバから切り離された状態で、再度クラスタサーバに psql で接続し、
更新系のクエリを投げると psql からの応答が返って来なくなってしまいます。
2 の場合も、1と同様の現象が確認されました。
正常に終了する場合もあるのですが、deadlock detected が表示され、psqlが落ちてしまう場合もあります。
1, 2 の検証を何回か繰り返してみましたが、再現性がありましたので、ご報告させて頂きます。
お手数ですが、ご確認の程、よろしくお願い致します。
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
Yusuke Ito <y-110 @ yumemi.co.jp>
pgcluster メーリングリストの案内