[pgpool-general-jp: 1157] Re: 管理用のクエリーを投げて固まる?現象

Tatsuo Ishii ishii @ sraoss.co.jp
2013年 5月 15日 (水) 15:23:53 JST


石井です。

だいぶ間が開いてしまいましたが、その後調べて、色々分かって来ました。

SELECT count(*) FROM pg_catalog.pg_class... のような問い合わせは、
pgpoolが内部的に発行しているものです。このクエリは、ユーザのクエリが拡
張問い合わせモード(Javaなどで利用される)で実行される際には、やはり拡張
問い合わせとして実行されます。

この内部問い合わせが拡張問い合わせモードで実行中にエラーがPostgreSQLか
ら返るとご指摘の現象が起きることがわかりました(拡張問い合わせでなければ
この現象は起きない)。

ちなみに、

>> ちなみに、サーバーへpgpoolのモジュールを組み込んでいないと
>> ISUNLOGGEDQUERYの方を投げて、同様の症状が発生します。

という現象自体はpgpoolのバグで、3.2.4で混入してしまったものです。
これについてはすでに修正がリポジトリにコミットされています。

対策ですが、この場合PostgreSQLでは、"Sync"というエラーリセットプロトコ
ルを発行してエラーから回復する必要があります。ただし、Syncを発行すると、
ユーザのprepared statementが消えたり、色々良くないことが起こります。で
すので、この状態から回復するためには、結局pgpoolのセッションを切断しな
ければなりません。元々、pgpoolが内部で発行するクエリがエラーになること
は想定しないため、この対策でも良いのではないかと思います。

この対策を実装したパッチを同梱いたしますので、良かったらお試しください。
パッチは2つあり、pool_process_query.c.patchが該当のものです。

pool_select_walker.c.patchは、3.2.4でエンバグしたのを修正するものです。
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp

> 石井です。
> 
>> 長村と申します。
>> 
>> pgpool-II 3.2.4 を利用しています。
>> ストリーミングレプリケーション環境なのですが、マスターDBの
>> pg_stat_activityを見ると
>> 
>> SELECT count(*) FROM pg_catalog.pg_class AS c WHERE c.oid =
>> pgpool_regclass('テーブル名') AND c.relpersistence = 'u'
>> (ソースにISUNLOGGEDQUERY2で定義されているクエリーです。)
>> 
>> というクエリーを実行して数時間経過しているプロセスが確認できます。
>> 放っておくと、そのまま数日でも残ったままとなります。
>> しかしpgAdminIIIなどから実行しても、すぐに結果が帰ってきて、
>> ロックするようなことはありません。
>> pg_stat_activityのwaitingも f になっています。
>> 
>> 全てのクエリーが常に引っかかるわけでは無く、ほとんどのクエリーは
>> きちんと動作しているようなのですが、ときどき結果が帰らず、
>> 積もり積もっていつの間にか子プロセスが使い果たされるという状況です。
>> pg_terminate_backendを使うと終了できますが、pgpoolのマニュアルには
>> 使わないでと書いてあるので、多用するのをためらっています。
> 
> はい、pg_terminate_backendを使うとpgpool-IIにpostmasterを停止したのと同
> じコードがPostgreSQLから返ってきてしまうので、pgpool-IIはそのサーバを切
> り離してしまうからです。
> 
>> なにか原因となる部分が想定できますでしょうか?
> 
> 再現性がないとすると、ちょっと原因はすぐにはわかりません。
> pg_stat_activityで見て実行中という事は、pgpool-II側としてはPostgreSQLの
> 処理が終わるのを待っている状態ということなので、PostgreSQL側で何かが起
> きていると思うのですが...
> 
>> ちなみに、サーバーへpgpoolのモジュールを組み込んでいないと
>> ISUNLOGGEDQUERYの方を投げて、同様の症状が発生します。
>> 
>> 環境
>> CentOS 6.3(マスタDB、スレーブDB、クライアント共)
>> PostgreSQL9.2.4(ソースからビルド)
>> pgpool-II 3.2.4、3.2.3以前でも発生します。
>> 
>> --
>> +-----------------------------------------------------------------------+
>>  NAME:長村善行   HANDLE:おさ
>>  EMAIL :osa @ osa-p.net twitter:osapon URL:http://www.osa-p.net/
>> +-----------------------------------------------------------------------+
>> _______________________________________________
>> pgpool-general-jp mailing list
>> pgpool-general-jp @ sraoss.jp
>> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp
> _______________________________________________
> pgpool-general-jp mailing list
> pgpool-general-jp @ sraoss.jp
> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: pool_process_query.c.patch
型:         text/x-patch
サイズ:     540 バイト
説明:       無し
URL:        <http://www.sraoss.jp/pipermail/pgpool-general-jp/attachments/20130515/04b643a6/attachment-0002.bin>
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: pool_select_walker.c.patch
型:         text/x-patch
サイズ:     716 バイト
説明:       無し
URL:        <http://www.sraoss.jp/pipermail/pgpool-general-jp/attachments/20130515/04b643a6/attachment-0003.bin>


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