[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 メーリングリストの案内