[pgsql-jp: 41492] hot_standby_feedbackの影響について

pascalpascal @ snow.plala.or.jp pascalpascal @ snow.plala.or.jp
2013年 8月 28日 (水) 22:03:04 JST


宮本と申します。

現在、PostgreSQL(9.1.6)を運用しております。

pgpool-IIで、ストリーミングレプリケーションをしていますが、
ERROR: canceling statement due to conflict with recovery
というエラーがときどきスレーブ側のログに出力されています。
(マスター1台、スレーブ1台の環境です。)

このエラーをなくすため、hot_standby_feedbackをonに設定することを
検討しています。
hot_standby_feedbackをonに設定すると、スレーブ側の参照処理が
終了しないとマスタ側の更新がスレーブ側に反映しないと思いますが、
細かいところがわかりません。

canceling statement due to conflict with recoveryが発生するのは
以下のような流れだと思います。
(hot_standby_feedbackの設定なしの場合)

(1) スレーブDBでテーブル tab1のデータAをselect(参照)
(2) マスタDBでテーブル tab1のデータAをupdateで更新(A→A')
(3) (2)の内容をスレーブDBに反映させる処理が実行される
(4) (2)と(3)で競合が発生する。
(5) 一定時間経過した後、(1)の処理がキャンセルされる

もし、hot_standby_feedbackをonに設定した場合で、
(2)の更新対象の行が2件あり、 A→A', B→B' という更新だった場合、
(1)の参照処理が実行中の間は、スレーブDBでは、B→B'も実行されないのでしょうか。(更新処理は1つのSQL文で2件の更新をしたという想定です)

hot_standby_feedbackをonにしたときの影響を知りたいので、
ご存知の方はご教示お願いします。

環境は以下の通りです。

環境
  OS: Redhat Enterprise Linux 5.7
  PostgreSQL: 9.1.6
  pgpool-II : 3.2

以上です。
-----------------------------------


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