[pgpool-general-jp: 198] Re: 大量のINSERTを行うとデッドロックする
Yoshiyuki Asaba
y-asaba @ sraoss.co.jp
2007年 7月 11日 (水) 11:22:43 JST
浅羽です。
From: Yoshiyuki Asaba <y-asaba @ sraoss.co.jp>
Subject: [pgpool-general-jp: 196] Re: 大量のINSERTを行うとデッドロックする
Date: Tue, 10 Jul 2007 14:18:00 +0900 (JST)
> pgpool では今のところデッドロックエラーについて何も考慮していないため、
>
> * node-1 ではデッドロックによってトランザクションがアボート
> * node-2 ではロックが獲得できた
>
> という不整合が発生しているようです。
>
> そこで、マスタからデッドロックエラー(エラーコード: 40P01)が返ってきた
> 場合には、他のノードにはトランザクションがエラーになるようなクエリを送
> るように修正しようかと考えています。
すべてのブランチに修正を入れました。手元の環境ではフェイルオーバが発生
しないようになりました。以下のように pgbench を使って確認しました。
もし可能であれば、五十嵐様や他の方の環境でも発生しないかご確認いただけ
ると助かります。
% cat a.sql
begin;
lock table t in row exclusive mode;
lock table t in share row exclusive mode;
insert into t values (1);
end;
% pgbench -n -C -c 2 -t 10 -f a.sql -p 9999 x
Client 1 aborted in state 2: ERROR: deadlock detected
DETAIL: Process 23834 waits for ShareRowExclusiveLock on relation 149612 of database 149611; blocked by process 23840.
Process 23840 waits for ShareRowExclusiveLock on relation 149612 of database 149611; blocked by process 23834.
transaction type: Custom query
...
pgpool をお使いであれば、
% cvs -d :pserver:anonymous @ cvs.pgfoundry.org:/cvsroot/pgpool login
% cvs -d :pserver:anonymous @ cvs.pgfoundry.org:/cvsroot/pgpool checkout pgpool
で取得することができます。
なお、[pgpool-general-jp: 187] の 1. を実装したのちに、今月中にでも
pgpool 3.3.1 か 3.4 でリリースを検討しています。
--
Yoshiyuki Asaba
y-asaba @ sraoss.co.jp
pgpool-general-jp メーリングリストの案内