[pgpool-general-jp: 1443] Re: マスタスレーブモードとコマンドクエリキャッシュ有効時にpgpool2から応答がこなくなる
Nobuyuki Nagai
nagai.nb @ ncos.nec.co.jp
2017年 1月 18日 (水) 18:00:11 JST
永井です。お返事ありがとうございます。
SQLとしては
> SELECT 1; /* cacheなし。cacheを作る */
> SELECT 1; /* cacheがあるのでcacheを返す */
> SELECT 2; /* cacheなし。ここでハング */
で、同じ認識ですが、3つ目のcache有無は関係ないかと思います。
で、頂いたpgpool.confですが
memory_cache_enabled = off
となっています。
> > memory_cache_enabled = on
で試して頂けないでしょうか?
※こちらでは再現しないようでしたら、同じようなミニプログラムを作成してみます。
以上、よろしくお願いいたします。
> -----Original Message-----
> From: Tatsuo Ishii [mailto:ishii @ sraoss.co.jp]
> Sent: Wednesday, January 18, 2017 5:40 PM
> To: pgpool-general-jp @ sraoss.jp; Nagai Nobuyuki(永井 信行)
> <nagai.nb @ ncos.nec.co.jp>
> Subject: Re: [pgpool-general-jp: 1441] マスタスレーブモードとコマンドク
> エリキャッシュ有効時にpgpool2から応答がこなくなる
>
> 石井です。
>
> すみません。よく分からなかったのですが、現象の再現条件としては、
>
> SELECT 1; /* cacheなし。cacheを作る */
> SELECT 1; /* cacheがあるのでcacheを返す */
> SELECT 2; /* cacheなし。ここでハング */
>
> ということでよいでしょうか?添付のような検証プログラムを実行してみたの
> ですが、正常終了しました。Pgpool-IIのバージョンは3.5 stableのheadです
> (3.5.5とほとんど同じ)
>
> 参考までにpgpool.confも付けておきます。環境は、pgpool_setupで作ったも
> の
> です。
> --
> Tatsuo Ishii
> SRA OSS, Inc. Japan
> English: http://www.sraoss.co.jp/index_en.php
> Japanese:http://www.sraoss.co.jp
>
> > はじめまして、永井と申します。
> >
> > Javaアプリケーションからpgpool-IIを介して、
> > PostgreSQLに接続しています。
> >
> > 当初はデフォルトのpgpool.confで正常に通信ができていたのですが、
> >
> > master_slave_mode = on
> > master_slave_sub_mode = 'stream'
> > memory_cache_enabled = on
> > memqcache_method = 'shmem'
> >
> > の設定に変更してから、pgpool-IIからアプリに無応答になる
> > 事象が発生しました。
> >
> > Java : 6
> > JDBCドライバ : postgresql-9.4.1212.jre6.jar
> > pgpool-II : 3.5.4 (3.5.5も同様)
> > PostgreSQL : 9.5.5
> > CentOS : 6.6
> >
> > そこで、tcpdumpとpgpool-II 3.5.4のソースコードの付け合わせを行ったと
> ころ
> > 以下のコードに問題があるように思いました。
> > そこで、こちらの調査で根本的な勘違いをしていなかと思い、どなたかご確
> 認頂ければ幸いです。
> >
> >
> > ○通信
> > AP pgpool PostgreSQL
> > → P(select 1)/B/D/E/S→
> > → P(select 1) →
> > → B →
> > → D →
> > → H →
> > ← 1/2/T ←
> > ← 1/2/T ←
> > ← D/C ←
> > ← Z ←
> > → P(delete 〜)/B/D/E/S→★
> > → H →
> > ※B…Bind
> > D…Describe
> > E…Eexecute
> > H…Flush
> > P…Parse
> > S…Sync
> >
> > ○コード
> > pool_proto_modules.c:574 Execute関数で、キャッシュにヒットすると
> > pool_unset_query_in_progress()等を呼び出して
> > 704行目でリターンしています。
> >
> > キャッシュにヒットしないと、master_slave_mode = onなら
> > 786行目で pool_unset_pending_response() を呼び出してから
> > リターンしています。
> >
> > つまりキャッシュがあるとpending_responseがtrueになったままで、
> > 次のクエリが来ると(★)
> > pool_process_query.c:1980 do_query関数でFlushを発行し、
> > しかしPostgreSQLからは応答がないため、2009行目でタイムアウトする
> > までループし続けるのではないか?
> >
> > ※pool_is_pending_response関数は
> > master_slave_mode = on
> > master_slave_sub_mode = 'stream'
> > 以外では固定falseで、Flushを発行するルートにならない。
> >
> >
> >
> > 以上、よろしくお願いいたします。
> >
> > _______________________________________________
> > pgpool-general-jp mailing list
> > pgpool-general-jp @ sraoss.jp
> > http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp
pgpool-general-jp メーリングリストの案内