I mean that all resources protected by XLOG_STANDBY_LOCK should redo later.
The semantics of XLOG_STANDBY_LOCK is still kept.

> 2020年4月30日 下午7:12,Amit Kapila <amit.kapil...@gmail.com> 写道:
> 
> On Thu, Apr 30, 2020 at 4:07 PM 邱宇航 <iam...@gmail.com> wrote:
>> 
>> I noticed that in hot standby, XLOG_STANDBY_LOCK redo is sometimes block by 
>> another query, and all the rest redo is blocked by this lock getting 
>> operation, which is not good and often happed in my database, so the hot 
>> standby will be left behind and master will store a lot of WAL which can’t 
>> be purged.
>> 
>> So here is the idea:
>> We can do XLOG_STANDBY_LOCK redo asynchronously, and the rest redo will 
>> continue.
>> 
> 
> Hmm, I don't think we can do this.  The XLOG_STANDBY_LOCK WAL is used
> for AccessExclusiveLock on a Relation which means it is a lock for a
> DDL operation.  If you skip processing the WAL for this lock, the
> behavior of queries running on standby will be unpredictable.
> Consider a case where on the master, the user has dropped the table
> <t1> and when it will replay such an operation on standby the
> concurrent queries on t1 will be blocked due to replay of
> XLOG_STANDBY_LOCK WAL and if you skip that WAL, the drop of table and
> query on the same table can happen simultaneously leading to
> unpredictable behavior.
> 
> -- 
> With Regards,
> Amit Kapila.
> EnterpriseDB: http://www.enterprisedb.com

Reply via email to