[pgpool-general-jp: 1445] Re: マスタスレーブモードとコマンドクエリキャッシュ有効時にpgpool2から応答がこなくなる

Nobuyuki Nagai nagai.nb @ ncos.nec.co.jp
2017年 1月 18日 (水) 20:12:38 JST


> でもハングするということでしょうか?

実際にはibatisを使用したアプリケーションで、
Auto Commit offによるbeginや、
コネクションプールによる接続確認でselect 1が流ており、
単純なSQL文での再現パターンと言うのは確立できていません。

※諸事情により生なまなSQL文を提示することもでできず
 すみません。
 但し、アプリからDBへの処理の先頭(ibatisのメソッド単位で2発目あたり)で
 ほぼ100%発生している状況です。


そして頂いたSample.javaで実行すると、こちらの環境でも正常終了します。

※tcpdumpをみると下記シーケンスにおいて★を受信したpgpoolから
 Flushが飛ばず、正常にParseをPostgreSQLに送信していました。


よって、こちらでも簡単な再現プログラムを作成してみます。
それで上手く再現できたら、再度、メールさせて下さい。



> -----Original Message-----
> From: Tatsuo Ishii [mailto:ishii @ sraoss.co.jp]
> Sent: Wednesday, January 18, 2017 6:07 PM
> To: Nagai Nobuyuki(永井 信行) <nagai.nb @ ncos.nec.co.jp>
> Cc: ishii @ sraoss.co.jp; pgpool-general-jp @ sraoss.jp
> Subject: Re: [pgpool-general-jp: 1441] マスタスレーブモードとコマンドク
> エリキャッシュ有効時にpgpool2から応答がこなくなる
> 
> > 永井です。お返事ありがとうございます。
> >
> > 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 メーリングリストの案内