[pgsql-jp: 35459] Re: pgpoolのデッドロック、その後

Tatsuo Ishii t-ishii @ sra.co.jp
2005年 6月 5日 (日) 18:35:18 JST


石井です.

ちょっといろいろあって応答が遅くなって済みません.

> 杉です。
> 
> 調査結果の報告が遅くなりましたが、確認結果をご連絡します。
> 
> デッドロックの件、その後調査しましたが結果は同じでした。
> ※確認バージョンはpgpool  2.5.1及びpgpool  2.5.2です。
> 
> テストの際、テストアプリとは別にpsqlでクエリを発行し確認をしたのですが
> AUTOCOMMITの設定が'on'の場合、我々の期待しているような動作をしておりました。
>http://ml.postgresql.jp/pipermail/pgsql-jp/2005-May/018974.html の内容。
> 
> AUTOCOMMITの設定が'off'の場合、は両DBサーバへ問い合わせがいっており(postgreSQLのログで確認)、
> 繰り返し処理を行うとデッドロックが発生しています。
> ご指摘の通り、selectの前に明示的に/*STRICT*/を付加しても状況は変わらずデッドロックは発生し、問題の
> 解決には至りませんでした。
> 
> 今回行いたい処理は、複数のトランザクション処理を実行し正常に終了した時にcommitを発行する処理なので、
> AUTOCOMMITは'off'での利用が前提となっています。(業務的な処理では一般的だと思われる。)
> この様な使い方でも、pgpoolの利用は可能なのでしょうか?
> 万一利用用途が違うのであれば(仕様も含め)と思い、メールさせて頂きました。
> 
> 今回pgoolを利用しようとする最終的な目的は
>  フェイルオーバーの機能を利用し、DB1orDB2の何れかに障害が発生しても運用をし続ける。(HA的な利用)
>  ※共有ディスク等のHWを用意せず、DBサーバ2台でフェイルオーバーの機能を利用したい。
> です。
> 
> 是非、pgpoolを利用しシステムの構築を行いたいと思っております。
> 何かアドバイスがありましたら、お願いを致します。

こちらで再現実験を行うために,pgbenchに改造を加え,

begin;
/*STRICT*/select abalance from accounts where aid = 1;
end;

を実行するようにしてみました.その結果,

./pgbench -C -p 9998 -t 1000 -c 32 test
./pgbench -p 9998 -t 1000 -c 32 test

でも現象は再現しませんでした.何かもっと他の条件があるのかな?
# 以前pgpoolのデッドロックで御悩みの方も,shellスクリプトくらいでは再
# 現しなかったと言っていましたが...

よろしければ,そちらの環境で再現するかどうか,テストしていただけません
か?改造pgbenchは,

http://www2b.biglobe.ne.jp/~caco/pgpool/tmp/pgbench.tar.gz

にあります.

こちらの条件ですが,

PostgreSQL 8.0.3(pgpoolと2つのpostmasterは同じマシンで動作中)
pgpool current
strictモードで使用中.

となっています.
--
Tatsuo Ishii



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