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