I've been struggling to eliminate replication lag on a Postgres 9.6.6
instance on Amazon RDS. I believe the lag is caused by early cleanup
conflicts from vacuums on the master, because I can reliably resolve it by
killing long-running queries on the standby. I most recently saw ten hours
of lag on Saturday and addressed it this way.

The standby is running with
hot_standby_feedback = on
max_standby_streaming_delay = 5min
max_standby_archive_delay = 30s

I am not using replication slots on the primary due to reported negative
interactions with pg_repack on large tables.

My rationale for the first two settings is that hot_standby_feedback should
address my issues almost all the time, but that max_standby_streaming_delay
would sometimes be necessary as a fallback, for instance in cases of a
transient connection loss between the standby and primary. I believe these
settings are mostly working, because lag is less frequent than it was when
I configured them.

My questions are,
* Am I overlooking anything in my configuration?
* What would explain lag caused by query conflicts given the
max_standby_streaming_delay setting? Shouldn't those queries be getting
killed?
* Is there any particular diagnostic info I should be collecting on the
next occurrence, to help me figure out the cause? Note that as I'm on RDS,
I don't have direct access to the datadir -- just psql.

Thanks for any advice!
Wyatt

Reply via email to