mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Log long wait time on recovery conflict when it's resolved.
This is a follow-up of the work done in commit 0650ff2303
. This commit
extends log_recovery_conflict_waits so that a log message is produced
also when recovery conflict has already been resolved after deadlock_timeout
passes, i.e., when the startup process finishes waiting for recovery
conflict after deadlock_timeout. This is useful in investigating how long
recovery conflicts prevented the recovery from applying WAL.
Author: Fujii Masao
Reviewed-by: Kyotaro Horiguchi, Bertrand Drouvot
Discussion: https://postgr.es/m/9a60178c-a853-1440-2cdc-c3af916cff59@amazon.com
This commit is contained in:
@@ -1322,7 +1322,8 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable)
|
||||
* longer than deadlock_timeout.
|
||||
*/
|
||||
LogRecoveryConflict(PROCSIG_RECOVERY_CONFLICT_LOCK,
|
||||
standbyWaitStart, now, cnt > 0 ? vxids : NULL);
|
||||
standbyWaitStart, now,
|
||||
cnt > 0 ? vxids : NULL, true);
|
||||
logged_recovery_conflict = true;
|
||||
}
|
||||
}
|
||||
@@ -1607,6 +1608,15 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable)
|
||||
disable_timeout(DEADLOCK_TIMEOUT, false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Emit the log message if recovery conflict on lock was resolved but the
|
||||
* startup process waited longer than deadlock_timeout for it.
|
||||
*/
|
||||
if (InHotStandby && logged_recovery_conflict)
|
||||
LogRecoveryConflict(PROCSIG_RECOVERY_CONFLICT_LOCK,
|
||||
standbyWaitStart, GetCurrentTimestamp(),
|
||||
NULL, false);
|
||||
|
||||
/*
|
||||
* Re-acquire the lock table's partition lock. We have to do this to hold
|
||||
* off cancel/die interrupts before we can mess with lockAwaited (else we
|
||||
|
Reference in New Issue
Block a user