[pgpool-general-jp: 184] 大量のINSERTを行うとデッドロックする

五十嵐 直隆 (株)モー 五十嵐 直隆 (株)モー
2007年 6月 29日 (金) 16:45:38 JST


お世話になります。五十嵐と申します。

レプリケーションモードをtrueにし、2台のサーバで運用しています。
シリアル型を使用しているので、replication_strictをtrueにして使用しているのですが、
下記のような処理を2つのセッションから同時に1万件ほど繰り返すと、デッドロックが発生し、
縮退運転になってしまいます。

begin
lock table table1 in row exclusive
insert into table1 values(・・・略・・・);
commit

最初の数千件は問題なく処理されるのですが、半分ほど進んだあたりでデッドロックが発生します。

begin、lock、commitを外して下記のようにINSERTのみで行うと、問題なく終了します。

insert into table1 values(・・・略・・・);


デッドロックが発生し縮退運転になったあと、データの中身を確認してもMaster、Secondery間に
違いはなかったのですが、デッドロックが発生すると縮退運転になってしまうのでしょうか。

また、replication_strictをtrueに設定しているのでデッドロックはかからないものと思っているのですが、
何か他に設定方法や回避策等がありましたらご教示いただければと思います。


環境(Master、Secondery共に同じ)
OS:Redhat Enterprise ES v4 64bit
PostgreSQL:8.1.9
pgpool:3.2(Masterのみ)

pgpoolの設定は下記のようになっています。
replication_mode = true
replication_strict = true
load_balance_mode = true
weight_master = 0.5
weight_secondary = 0.5
replication_stop_on_mismatch = true


以上、よろしくお願いします。




pgpool-general-jp メーリングリストの案内