[pgpool-general-jp: 943] Re: pgpoolでクライアント切断時にトランザクションが継続することにつきまして

Tatsuo Ishii ishii @ sraoss.co.jp
2011年 5月 6日 (金) 19:05:50 JST


石井です。

> 現在、レプリケーションのためにpgpool-IIを使用しております。
> 構成は
> PostgreSQL 8.4.4 2台
> うち、1台に
> pgpool-II 2.3.3
> を入れております。
> 
> 1.トランザクションを開始
> 2.INSERT, UPDATE, DELETEなどのSQLを発行
> 3.何らかのエラーでクライアント側の接続が中断
> 4.テーブルロックもしくは行ロックがかかったままになる。
> 
> という問題で困っております。
> コネクションプールがPostgreSQL本体との接続を維持しているために、
> そのようになっているのではないかと考えております。
> もともとレプリケーションを目的としてpgpoolを使用しておりますので、
> コネクションプールは必要ありません。
> クライアントとの接続が切れれば、pgpoolの子プロセスが張っている
> PostgreSQL本体との接続が切れるようにしたいのですが、
> そのような設定は可能でしょうか?

そのような設定はありませんが、pgpoolがクライアントとのコネクションを切
られたことを検知すれば、PostgreSQLに reset_query_listに書かれたクエリを
送信します。このリストには、"ABORT"を含むことを推奨しており、ABORTが送
られればトランザクションがアボートするので、ロックを取ったままにならな
いはずです。

逆に、pgpoolがクライアントへの接続が終了したことを検知できない状況では、
仮にPostgreSQLに直接クライアントがつながっていたとしても、PostgreSQLの
方でもやはり検知できないので、PostgreSQLのバックエンドプロセスが残り、
ロックを取ったままになってしまうと思います。

> それともpgpoolが元々コネクションプールのツールであることから、
> レプリケーションモードでもコネクションプールは切り離せないのでしょうか?

connection_cache = false

にすればコネクションプールはきかなくなります。
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp

> お知恵を拝借いたしたく、よろしくお願いいたします。
> 
> --
> /*
>   有限会社ソフトインク
>   飯原 裕司
>   yuji.iihara @ softinc.co.jp
> */
> _______________________________________________
> pgpool-general-jp mailing list
> pgpool-general-jp @ sraoss.jp
> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp


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