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