[pgpool-general-jp: 961] Re: SELECT クエリのレプリケートについて
Toshihiro Kitagawa
kitagawa @ sraoss.co.jp
2011年 8月 1日 (月) 17:32:44 JST
On Mon, 01 Aug 2011 16:00:10 +0900
"GOTO, Daisuke" <gotoh @ m-design.com> wrote:
> 後藤@MDCと申します。
>
> 3年くらい前から
> postgresql 8.4.1
> pgpool-II-2.2.4
> の組み合わせで運用しているシステムがあります。
>
> pgpool.conf は以下のようになっております。
> (関係ありそうな所のみ抜粋)
>
> replication_mode = true
> load_balance_mode = true
> replication_stop_on_mismatch = true
> replicate_select = false
> master_slave_mode = false
> insert_lock = false
> ignore_leading_white_space = true
> parallel_mode = false
>
> このシステム上で、とある特定の SELECTのクエリを実施した際に、
> 何故かクエリがレプリケートされてしまいます。
> (それ以外のSELECTクエリはちゃんとload balanceされています)
>
> 結果、他のINSERTとタイミングがかぶると
> kind mismatch among backends
> が発生してしまう場合が稀にあります。
>
> replicate_select は falseなのに
> selectのクエリがレプリケートされてしまうのは何故でしょうか。
> selectのクエリでもレプリケートされてしまうような条件があるのでしょうか?
マニュアルの「ロードバランスの条件について」にあるフローチャートによると、
以下の場合は、SELECTでもレプリケートする仕様になっています。
- SELECT INTO
- SELECT FOR UPDATE/SHARE
- nextval()かsetval()を含む
これらには該当しますでしょうか?
もし該当しなければバグの可能性もありますので、再現調査のため、実際の
SELECT文(データ部分は適当な文字列に置き換えても構いません)とそれに
関連するテーブル定義をお知らせ頂けると幸いです。
> また、/*insert lock*/のようにコメント等を指定することで、
> 明示的にクエリをレプリケートさせないようにする方法などはあるのでしょうか?
ありません、逆(レプリケートさせる)はできるのですが…。
> なお、SELECTのクエリは SELECT 〜 で始まっており、
> 文中には
> case when
> sum()
> group by
> left join
> translate()
> substring()
> NULLIF()
> COALESCE()
> to_number()
> などが含まれて居ます。
>
> 以上、ご教授いただけたらと思います。
>
> --
> 後藤 大輔<gotoh @ m-design.com>
> 株式会社エム・ディー・シー
> 〒212-0012 川崎市幸区中幸町3丁目2
> Tel. 044-555-3185 Fax. 044-555-5700
> _______________________________________________
> pgpool-general-jp mailing list
> pgpool-general-jp @ sraoss.jp
> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp
>
--
Toshihiro Kitagawa
SRA OSS, Inc. Japan
pgpool-general-jp メーリングリストの案内