Re: Conflict with recovery on PG version 11.6

From: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
To: Toomas Kristin <toomas(dot)kristin(at)gmail(dot)com>
Cc: pgsql-general <pgsql-general(at)postgresql(dot)org>
Subject: Re: Conflict with recovery on PG version 11.6
Date: 2020-06-18 14:38:30
Message-ID: 2d05bf2ad62fc71a5df3d9ba4e75fa300e3e020c.camel@cybertec.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Toomas Kristin wrote:
> > > Basically after upgrade to version 11.5 from 10.6 I experience error messages on streaming
> > > replica host “FATAL: terminating connection due to conflict with recovery” and
> > > “ERROR: canceling statement due to conflict with recovery”. There is no changes for
> > > vacuuming on master nor max_standby_streaming_delay for replica. I tried to correlate
> > > errors with vacuuming process on master but according to logs there is no link between
> > > them. Somehow I have feeling that when query runs longer than value for parameter
> > > max_standby_streaming_delay the query will be terminated regardless vacuuming process on master.
> > >
> > > Is there any changes on version 11.5 what may cause it?
> > >
> > > Is there any good solution without setting max_standby_streaming_delay=-1 or enabling hot_standby_feedback?
> >
> > The basic behavior shouldn't have changed since v10.
> >
> > Check "pg_stat_database_conflicts" to see what kinds of conflicts that are.
> >
> > The only solutions to avoid queries being canceled due to replication conflicts are:
> >
> > 1. avoid that such conflicts happen:
> > - set "hot_standby_feedback = on" on the standby and/or
> > "vacuum_defer_cleanup_age" on the primary to avoid VACUUM conflicts
> > - Don't lock tables in access exclusive mode
> >
> > 2. set "max_standby_streaming_delay" to -1
> >
> > Note that it can be quite hard to completely avoid replication conflicts.
> > Trying to have both no delay in applying changes and no cancelled queries
> > is often not possible without seriously crippling autovacuum.
>
> What are reasons for conflicts? Based on documentation seems that the only reason can be that vacuum removed
> unused tuples that are in use at standby host and due to that standby host cannot apply
> modifications while blocking query either finishes or will be terminated. isnt it? Or there can be some other reasons?

There can be other reasons:

- replicated ACCESS EXCLUSIVE locks that conflict with queries
- replicated ACCESS EXCLUSIVE locks that cause deadlocks
- buffer pins that are needed for replication but held by a query
- dropped tablespaces that hold temporary files on the standby

> I just wondering what would be impact when I increase value for autovacuum_vacuum_scale_factor
> in order force vacuuming process postpone the clean up process.

That won't help, it will just get your primary bloated.

I told you the remedies above, why don't you like them?

Yours,
Laurenz Albe
--
Cybertec | https://www.cybertec-postgresql.com

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Laurenz Albe 2020-06-18 14:40:41 Re: Conflict with recovery on PG version 11.6
Previous Message Laurenz Albe 2020-06-18 14:27:26 Re: ESQL/C no indicator variables ./. error -213