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