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