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