[pgsql-jp: 35674] Re: pgpoolでのレプリケーションでエラー発生

Tatsuo Ishii t-ishii @ sra.co.jp
2005年 7月 6日 (水) 13:51:35 JST


石井です.

# 話題が異なるときはスレッドを新しくしてください.

> 木村と申します。
> 
> pgpoolでレプリケーションをしていますが、稀にアプリケーションとpgpoolの
> コネクションが切断されるという現象に遭遇しています。
> 切断されるときに実行しているSQLはいつもselect系で、pgpoolのログを毎回
> 取ってはいないので確証はありませんがどうも「masterとsecondaryから戻っ
> てきたselectの結果の数が違うからエラー」という現象に遭遇しているように
> 見えます。
> 
> ちなみに、そのときPostgreSQL側のログにはunexpected EOF on client
> connectionと出ています。
> 
> 遭遇する典型的なケースは以下のような場合です。
> 
> ・2つのクライアント(C1,C2)が接続し、それぞれが非同期にSQLを発行している
> ・C1は頻繁に「select * from hoge where id = xxx」という問い合わせを行う。
> ・C2は、あるタイミングで「delete from hoge where id = xxx」を発行する
> ・C2がdeleteを発行したタイミングでのC1のselectで、pgpoolからコネクショ
>  ンを切断される
> 
> 色々考えたのですが、もしかして以下のような現象が起こり得るのではないか
> と思いました。議論を簡単にするため、上記where文中のidは、テーブルhoge
> におけるprimary key(つまり、selectの結果数は1か0)とします。
> 
> 
>      master             |       secondary
> ------------------------+---------------------
> C1のselectがpgpoolから  |
> 到達。select処理開始     |
> ----------------------------------------------
> C2からのdeleteがpgpool  | 
> から到達。delete開始     |
> ----------------------------------------------
> C1のselect処理完了。     |C2からのdeleteがpgpool
> C2のdeleteより前なので、  |から到達。delete開始
> 結果は1件。              |
> -----------------------------------------------
> C2のdelete処理完了。    |C2のdelete処理完了。
>                         |
> ----------------------------------------------
>                        |C1からのselectがpgpool
>                        |から到達。select開始。
> ----------------------------------------------
>                        |C1のselect処理完了。
>                        |C2のdeleteのあとなので、
>                        |結果は0件。
> ----------------------------------------------
>   pgpoolは、C1のselectの結果数がmasterと
>   secondaryで異なるのでエラーと判断する
> 
> 
> タイミングによっては、上記のようなことは起こり得るのでしょうか?
> pgpoolのバージョン、PostgreSQLのバージョンに依存していないようなので上
> 記のようなタイミング依存の問題かとも思ったのですが。

想像通りだと思います.ちなみに,PGClusterでも同様の現象が起きると思い
ます.
# PGClusterはSELECTをデフォルトでロードバランスするので気が付かれない
# のですが...

> (ロードバランスモードにするといいのかしら...)

それでもいいですし,後はテーブルロックをかける方法もあります.もちろん,
トランザクションの並列実行性が犠牲になってしまいますが.
--
Tatsuo Ishii



pgsql-jp メーリングリストの案内