[pgsql-jp: 41768] Re: レプリケーション構成でスタンバイ系に反映されるまで時間がかかる
TAKATSUKA Haruka
harukat @ postgresql.jp
2015年 2月 5日 (木) 19:41:55 JST
高塚と申します。
> 1. max_standby_archive_delayならびに、streaming_delay
> はスタンバイ系でSELECT文の実行時間が長くなってマスタ側の更新が
> 反映できなくなってしまった時に、その実行をキャンセルするための
> 時間ではないのでしょうか?
マニュアルに書いていないことですが、いくつかの競合ケースについては
上記設定を使わず、待たずにキャンセルさせてしまう実装になっています。
以下ログを見ますと本件はテーブルロック(Access Exclusive Lock)の伝搬の競合
でして、これも max_standby_〜_delay を使ってくれないものの一つだったかと
思います。
> ERROR: canceling statement due to conflict with recovery
> DETAIL: User was holding a relation lock for too long.
> 2. 問合せに対してキャンセルされてしまうとデータが0件になってしまいますので、
> DB側で再試行するような仕組みはあるのでしょうか?
DB側には無いです。クライアント側で再試行することです。
ERROR: canceling statement due to conflict with recovery の
SQLSTATE は 40001 になるはずですから、40001 で失敗したら再試行
という仕組みにします。
以上、よろしくお願いいたします。
______________________________________________________________________
日本PostgreSQLユーザ会 高塚 遙 http://www.postgresql.jp
pgsql-jp メーリングリストの案内