mirror of
https://github.com/postgres/postgres.git
synced 2025-07-11 10:01:57 +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:
@ -4034,6 +4034,16 @@ LockBufferForCleanup(Buffer buffer)
|
||||
/* Successfully acquired exclusive lock with pincount 1 */
|
||||
UnlockBufHdr(bufHdr, buf_state);
|
||||
|
||||
/*
|
||||
* Emit the log message if recovery conflict on buffer pin was
|
||||
* resolved but the startup process waited longer than
|
||||
* deadlock_timeout for it.
|
||||
*/
|
||||
if (logged_recovery_conflict)
|
||||
LogRecoveryConflict(PROCSIG_RECOVERY_CONFLICT_BUFFERPIN,
|
||||
waitStart, GetCurrentTimestamp(),
|
||||
NULL, false);
|
||||
|
||||
/* Report change to non-waiting status */
|
||||
if (new_status)
|
||||
{
|
||||
@ -4088,7 +4098,7 @@ LockBufferForCleanup(Buffer buffer)
|
||||
DeadlockTimeout))
|
||||
{
|
||||
LogRecoveryConflict(PROCSIG_RECOVERY_CONFLICT_BUFFERPIN,
|
||||
waitStart, now, NULL);
|
||||
waitStart, now, NULL, true);
|
||||
logged_recovery_conflict = true;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user