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