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