[pgsql-jp: 37814] Re: pgpoolでトランザクション中のSELECTをロードバランスしたい
Tatsuo Ishii
ishii @ sraoss.co.jp
2006年 12月 18日 (月) 23:03:52 JST
石井です.
> 高尾です。
>
> 先日リリースされましたpgpool-3.1.2を利用しています。
> 私の環境では次のような設定で運用しております。
> * replication_strict = true
> * load_balance_mode = true
> * weight_master = 1
> * weight_secondary = 0
> * replication_stop_on_mismatch = false
>
> pgpoolを導入している目的は、データベースのリアルタイムバックアップのた
> めです。主側のPostgreSQLに異常が発生した場合、Heartbeatによって従側にフェ
> イルオーバーさせ、サービスを継続させることを考えております。
>
> それで、load_balance_modeについてご確認したいことがあります。
>
> pgpoolでは、load_balance_modeがtrueの場合でも、トランザクション中の
> SELECTは主従のPostgreSQLに送信され、不整合をチェックすると認識し
> ております。
はい,そうです.
> # Load balancing mode, i.e., all SELECTs except in a transaction block
> # are load balanced. This is ignored if replication_mode is false.
> load_balance_mode = true
>
> しかしながら、トランザクション中のSELECTも主のPostgreSQLにのみ送信し、
> 不整合をチェックしないようにして運用できないか検討しております。
> 本メールに添付しているパッチを適用すれば、load_balance_modeがtrueの場合
> に、トランザクション中のSELECTがロードバランスされるようになります。
>
> load_balance_modeがtrueの場合に、トランザクション中のSELECTをロードバラ
> ンスしないのには何か理由がありますでしょうか。
BEGIN;
INSERT INTO t1(i, j) VALUES(1,10);
SELECT * FROM t1 WHERE i = 1;
:
:
のようなケースです.このSELECTをロードバランスしてしまうと,当然のこと
ながらトランザクションの中でINSERTした行が見えないケースが出てきてしま
います.
--
Tatsuo Ishii
SRA OSS, Inc. Japan
pgsql-jp メーリングリストの案内