[pgsql-jp: 35255] Re: pgpoolのreplication_stop_on_mismatch について
Tatsuo Ishii
t-ishii @ sra.co.jp
2005年 4月 14日 (木) 23:18:54 JST
石井です.
> 内海と申します。
> いつも参考にさせていただいております。
>
> 現在、まるごとPostgreSQLを参考に、pgpoolに挑戦しています。
> 一台のサーバーにpgpoolとpostgresqlを起動しています。
> pgpool : port(5432)
> pgsql1 : port(5433)
> posql2 : port(5434)
>
> pgpool.confのreplication_stop_on_mismatchをtrueにすれば、データ不整合時
> には縮退運転になるということですが、なりません。
>
> たとえば、testテーブルに5434ポートを使いデータを追加して、わざとデータ不
> 整合状態を作ったあとで、5432ポートからtestテーブルを参照しても、エラーと
> なりません。
> select * from test; と何度か参照すると、pgsql1のデータが参照されたり、
> pgsql2のデータが参照されたりします。
>
> 何か、設定がおかしいのでしょうか?
ドキュメントに明確に書いていないのですが,PostgreSQL 7.4以降では
replication_stop_on_mismatch がtrueでもデータの不整合チェックはかなり
限定的です.すなわちSELECT結果のデータ件数が一致しないなどでない限り,
エラーになりません.これには理由があって,
1) 7.4ではデータパケットのタイプや長さはチェックするが,中身そのものは
チェックしていない(やればできるが,非常に遅くなる).
2) 実際問題としてチェックすると,データ的には問題がないケースでもエラー
で検出されてしまう場合がある.pgpoolでは,行が挿入される物理的な順
番はマスタとセカンダリで同じになる保証はしていないので,たとえば以
下のようなケースが起こり得る.
INSERT INTO t1 VALUES(1);
INSERT INTO t1 VALUES(2);
を実行した結果,マスタでは
1
2
となるが,セカンダリでは
2
1
となることがある.RDBではデータの物理的な並び順は保証する必要がない
と私は思っているので,エラー扱いにしていません.
--
Tatsuo Ishii
pgsql-jp メーリングリストの案内