diff options
author | Fujii Masao | 2021-01-13 13:59:17 +0000 |
---|---|---|
committer | Fujii Masao | 2021-01-13 13:59:17 +0000 |
commit | 39b03690b529935a3c33024ee68f08e2d347cf4f (patch) | |
tree | 535e89716c5be4aebec5debb1db1e37e6f0d43c3 /src/backend/storage/lmgr/proc.c | |
parent | 6ecaaf810b8b9e3132f00549e630400f38a7ca37 (diff) |
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/[email protected]
Diffstat (limited to 'src/backend/storage/lmgr/proc.c')
-rw-r--r-- | src/backend/storage/lmgr/proc.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/backend/storage/lmgr/proc.c b/src/backend/storage/lmgr/proc.c index db0cfaa3600..c87ffc65491 100644 --- a/src/backend/storage/lmgr/proc.c +++ b/src/backend/storage/lmgr/proc.c @@ -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; } } @@ -1608,6 +1609,15 @@ ProcSleep(LOCALLOCK *locallock, LockMethod lockMethodTable) } /* + * 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 * might have a missed or duplicated locallock update). |