[pgpool-general-jp: 1645] Re: pgpool-IIの処理性能について

Tatsuo Ishii ishii @ sraoss.co.jp
2020年 9月 26日 (土) 18:49:49 JST


江頭様

お世話になっています。石井です。

> 石井様、北村様
> 
> 江頭と申します。
> いつもお世話になっております。
> # ML投稿がはじかれてしまったので再送いたします。
> 
> 北村様の事象と類似しているものをこちらでも検知し、
> 調査していたところだったため、横から失礼させていただきます。
> 
> 私も同様の環境(ストリーミングレプリケーション環境、ロードバランス無効)で
> SQL実行ごとにスタンバイサーバとの通信待ち合わせが発生する事象の調査を行っていたのですが、
> どうもクライアントが拡張問い合わせプロトコルを使用してSQLを実行した場合に
> Pgpoolから Sync のメッセージがプライマリとスタンバイの両方に送信され、かつ、
> 両方のサーバからの ReadyForQueryメッセージを待機するようです。
> 
> 具体的には src/protocol/pool_proto_modules.c の
> ProcessFrontendResponse 関数でSyncメッセージを扱う場合のみ
> プライマリとスタンバイの両方に対して同期的にSyncメッセージを送信し、返事を待つようです。

あ、Syncのケースは失念していました。

> ただ、Pgpool-IIのドキュメントやFAQにはこのように
> 「拡張問い合わせプロトコルを用いるとSyncでスタンバイ待ち合わせが発生する」ことは記載がないものの、
> 待ち合わせの処理自体は過去のコミット 8640abfc41ff06b1e6d31315239292f4d3d4191d で
> 問題の修正のために導入された処理のようにも見えますので、
> この挙動が意図された動作かどうかがわかりませんでした。
> 
> 恐れ入りますが、この挙動が意図されたものかどうか、
> 意図されたものであれば回避する方法を教えていただければ幸いです。

はい、意図通りです。理由はご指摘のcommit logに書いているとおりですが、
----------------------------------------------------------------------
    - When 'S' (sync) message is received from frontend, forward it to
      backends and wait till "ready for query" message is received from
      the backends. This ensures Pgpool-II to receive the read for query
      message and goes into the proper sync point.
----------------------------------------------------------------------
Syncがフロントエンドから来たら、それをすべてのバックエンドに送信し、
Ready for queryが来るのを待ち受けます。すべてのバックエンドに送信して
いる理由は、現在のPgpool-IIの実装では、Syncがフロントエンドから来た時
点であるバックエンドとはやり取りが過去発生していなくて、Syncを送らなく
てもよいかどうか判断できる情報を持ち合わせていないからです。

もちろん、load_blance_modeがoffならprimary以外にはSyncを送らなくても良
い、といったadhocな対応はできるかもしれませんが、もうちょっときれいに
できないものかと思っています。

# それ以外に、たとえばbackend_weightが0のノードにはSyncを送らなくても
# 良いとか、database_redirect_preference_listなどの設定によってはある
# ノードにデータを送らないで済むケースがあるので。

本質的には、バックエンド毎に、前回のSyncから今回までの間にデータのやり
取りが合ったかどうかを記憶しておいて、Syncを送る時に今までデータのやり
取りがなかったバックエンドには送信しない、というふうにするのが良いので
はないか、と考えています。

> # master_slave_sub_mode が stream モードの場合のみ両方に飛ぶようなので、
> # slony モードを指定すれば回避可能とも思いましたが、
> # ストリーミングレプリケーションを使っている以上、他の処理に影響しそうなので不適切と考えています。

はい、不適切だと思います。

> なお、Pgpool-II 4.0.2、4.0.7、 4.1.4 の各バージョンでこの挙動となることは確認しました。
> 確認時の主なパラメータは以下です。
> - master_slave_mode = on
> - master_slave_sub_mode = 'stream'
> - sr_check_period = 0
> - connection_cache = on
> - load_balance_mode = off
> - health_check_period = 0
> 
> 以上、よろしくお願いいたします。
> 
> -------------------------------------------------
> 富士通(株)
> データマネジメント事業部 第二開発部
> 江頭 勇佑 (Egashira Yusuke)
> egashira.yusuke @ jp.fujitsu.com
> TEL 外線:078-414-8597
> -------------------------------------------------
> 
> _______________________________________________
> pgpool-general-jp mailing list
> pgpool-general-jp @ sraoss.jp
> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp


pgpool-general-jp メーリングリストの案内