[pgpool-general-jp: 1444] Re: マスタスレーブモードとコマンドクエリキャッシュ有効時にpgpool2から応答がこなくなる
Tatsuo Ishii
ishii @ sraoss.co.jp
2017年 1月 18日 (水) 18:07:07 JST
> 永井です。お返事ありがとうございます。
>
> SQLとしては
>
>> SELECT 1; /* cacheなし。cacheを作る */
>> SELECT 1; /* cacheがあるのでcacheを返す */
>> SELECT 2; /* cacheなし。ここでハング */
>
> で、同じ認識ですが、3つ目のcache有無は関係ないかと思います。
確認ですが、
SELECT 1; /* cacheなし。cacheを作る */
SELECT 1; /* cacheがあるのでcacheを返す */
SELECT ; /* cacheがあるのでcacheを返す。ここでハング */
でもハングするということでしょうか?
> で、頂いたpgpool.confですが
> memory_cache_enabled = off
> となっています。
pgpool.confの一番最後の行に
memory_cache_enabled = on
があります。
>> > 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 メーリングリストの案内