diff --git a/doc/src/sgml/monitoring.sgml b/doc/src/sgml/monitoring.sgml index af3e9a71656..fb59bd9981a 100644 --- a/doc/src/sgml/monitoring.sgml +++ b/doc/src/sgml/monitoring.sgml @@ -1483,7 +1483,7 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser Waiting for confirmation from remote server during synchronous replication. - Timeout + Timeout BaseBackupThrottle Waiting during base backup when throttling activity. @@ -1495,6 +1495,11 @@ postgres 27093 0.0 0.0 30096 2752 ? Ss 11:34 0:00 postgres: ser RecoveryApplyDelay Waiting to apply WAL at recovery because it is delayed. + + RegisterSyncRequest + Waiting while sending synchronization requests to the + checkpointer, because the request queue is full. + IO BufFileRead diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index a5d97784cf9..e03233ae7d0 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -3889,6 +3889,9 @@ pgstat_get_wait_timeout(WaitEventTimeout w) case WAIT_EVENT_RECOVERY_APPLY_DELAY: event_name = "RecoveryApplyDelay"; break; + case WAIT_EVENT_REGISTER_SYNC_REQUEST: + event_name = "RegisterSyncRequest"; + break; /* no default case, so that compiler will warn */ } diff --git a/src/backend/storage/sync/sync.c b/src/backend/storage/sync/sync.c index aff3e885f36..a67dc591e0e 100644 --- a/src/backend/storage/sync/sync.c +++ b/src/backend/storage/sync/sync.c @@ -27,6 +27,7 @@ #include "postmaster/bgwriter.h" #include "storage/bufmgr.h" #include "storage/ipc.h" +#include "storage/latch.h" #include "storage/md.h" #include "utils/hsearch.h" #include "utils/memutils.h" @@ -569,7 +570,8 @@ RegisterSyncRequest(const FileTag *ftag, SyncRequestType type, if (ret || (!ret && !retryOnError)) break; - pg_usleep(10000L); + WaitLatch(NULL, WL_EXIT_ON_PM_DEATH | WL_TIMEOUT, 10, + WAIT_EVENT_REGISTER_SYNC_REQUEST); } return ret; diff --git a/src/include/pgstat.h b/src/include/pgstat.h index d10c270e60d..a044d83ed08 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -867,7 +867,8 @@ typedef enum { WAIT_EVENT_BASE_BACKUP_THROTTLE = PG_WAIT_TIMEOUT, WAIT_EVENT_PG_SLEEP, - WAIT_EVENT_RECOVERY_APPLY_DELAY + WAIT_EVENT_RECOVERY_APPLY_DELAY, + WAIT_EVENT_REGISTER_SYNC_REQUEST } WaitEventTimeout; /* ----------