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