Re: BUG #16605: PostgreSQL recovery startup process waiting and blocking to application queries
T T <tushar11.takate@gmail.com>
From: Tushar Takate <tushar11.takate@gmail.com>
To: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2020-09-11T16:48:27Z
Lists: pgsql-bugs
Hi Kyotaro , Thanks for sharing your thoughts on this issue . Is it expected to arrive again with the below setting or is this the bug with this setting ? hot_standby_feedback= off and max_standby_streaming_delay -1 . Because we have kept this setting intentionally on this server to avoid the bloat and query termination after some set time . If it's the bug ,Request you to please let me know which version contains the fix for it or in which version fix is going to arrive . - Thanks & Regards, Tushar K Takate . On Thu, Sep 3, 2020 at 8:52 AM Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote: > At Wed, 02 Sep 2020 10:58:49 +0000, PG Bug reporting form < > noreply@postgresql.org> wrote in > > The following bug has been logged on the website: > > > > Bug reference: 16605 > > Logged by: Tushar Takate > > Email address: tushar11.takate@gmail.com > > PostgreSQL version: 10.5 > > Operating system: OEL 6.9 > > Description: > > > > Hi Team , > > > > Problem/bug/issues statement : - PostgreSQL recovery startup process is > > blocking the application queries . > > > > Env Details - > > > > PostgtreSQL community version - 10.5 > > OS - OEL 6.9 > > Replication type - Streaming - async > > > > DB parameters at replica side - > > > > max_standby_streaming_delay = -1 > > max_standby_archive_delay = -1 > > hot_standby_feedback = off > > > > Startup process by ps -ef > > > > postgres 24489 24487 0 2019 ? 1-20:23:35 postgres: > > startup process recovering 00000006000021D4000000ED waiting > > This is the cause of all succeeding blocking chain. "recovering xxx > waiting" means the process is waiting for a recovery-conflict to be > resolved. In other words, the startup process is being blocked by some > backend. In your case the startup process should have taken > AccessExclusiveLock on the relation 17280 before being blocked. With > the setting max_standby_streaming_delay -1, the tartup process waits > forever. > > The most common cause of recovery-conflict when "hot_standby_feedback > = off" is snapshot conflict. In other words, vacuum on the primary > side cannot be replayed on the standby since some transaction on the > standby side may refer to-be-vacuumed table rows. > > I'm not sure about easier way but the cause can be examined by the > following steps. > > =# select sent_lsn, replay_lsn, file, upper(to_hex(off)) from > pg_stat_replication, lateral pg_walfile_name_offset(replay_lsn) as o(file, > off); > sent_lsn | replay_lsn | file | to_hex > -----------+------------+--------------------------+-------- > 0/5882B30 | 0/5874878 | 000000010000000000000005 | 874878 > > You will see that the replay_lsn is behind sent_lsn. and the last two > columns show the location of the blocked record. > > $ pg_waldump .../000000010000000000000005 | grep 874878 > rmgr: Heap2 len (rec/tot): 506/ 506, tx: 0, lsn: > 0/05874878, prev 0/05874850, desc: CLEAN remxid 600, blkref #0: rel > 1663/12348/16385 blk 0 > > The Heap2-CLEAN is emitted by vacuum. You can avoid this kind of > conflict by turning hot_standby_feedback on and/or preferably setting > max_standby_streaming_delay to an effective value breaks any kind of > conflicts by terminating conflicting backends. As a workaround after > snapshot-conflict happens, manually terminate backends with > backend_xmin <= 600, then startup will continue recovery. > > Another common cause is another access exclusive lock that is blocked > by standby transaction. In this case you will see Standby-LOCK as the > problem WAL record but pg_locks also shows such lock conflicts. > > I think other kinds of recovery-conflicts rarely happens. > > > All are the pid which are in wait queue are executing the select queries > on > > same table that is (mytable) . > > > > Can you please help us to understand the issues and possible > > solution/workaround/fix for it . > > > > For temp fix we have restarted the DB service ( Before that we have > tried to > > kill the process by -15 flag which not worked ) > > -- > Kyotaro Horiguchi > NTT Open Source Software Center >