From 0013ba290b6684d095d93517ff2ca1fadf79bdb9 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 13 Oct 2023 16:43:22 +1300 Subject: [PATCH] Add wait events for checkpoint delay mechanism. When MyProc->delayChkptFlags is set to temporarily block phase transitions in a concurrent checkpoint, the checkpointer enters a sleep-poll loop to wait for the flag to be cleared. We should show that as a wait event in the pg_stat_activity view. Reviewed-by: Robert Haas Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/CA%2BhUKGL7Whi8iwKbzkbn_1fixH3Yy8aAPz7mfq6Hpj7FeJrKMg%40mail.gmail.com --- src/backend/access/transam/xlog.c | 4 ++++ src/backend/utils/activity/wait_event_names.txt | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 39aec70b625..07cf7662ff8 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -6737,7 +6737,9 @@ CreateCheckPoint(int flags) { do { + pgstat_report_wait_start(WAIT_EVENT_CHECKPOINT_DELAY_START); pg_usleep(10000L); /* wait for 10 msec */ + pgstat_report_wait_end(); } while (HaveVirtualXIDsDelayingChkpt(vxids, nvxids, DELAY_CHKPT_START)); } @@ -6750,7 +6752,9 @@ CreateCheckPoint(int flags) { do { + pgstat_report_wait_start(WAIT_EVENT_CHECKPOINT_DELAY_COMPLETE); pg_usleep(10000L); /* wait for 10 msec */ + pgstat_report_wait_end(); } while (HaveVirtualXIDsDelayingChkpt(vxids, nvxids, DELAY_CHKPT_COMPLETE)); } diff --git a/src/backend/utils/activity/wait_event_names.txt b/src/backend/utils/activity/wait_event_names.txt index 9c5fdeb3caa..d7995931bd4 100644 --- a/src/backend/utils/activity/wait_event_names.txt +++ b/src/backend/utils/activity/wait_event_names.txt @@ -97,6 +97,8 @@ BGWORKER_SHUTDOWN "Waiting for background worker to shut down." BGWORKER_STARTUP "Waiting for background worker to start up." BTREE_PAGE "Waiting for the page number needed to continue a parallel B-tree scan to become available." BUFFER_IO "Waiting for buffer I/O to complete." +CHECKPOINT_DELAY_COMPLETE "Waiting for a backend that blocks a checkpoint from completing." +CHECKPOINT_DELAY_START "Waiting for a backend that blocks a checkpoint from starting." CHECKPOINT_DONE "Waiting for a checkpoint to complete." CHECKPOINT_START "Waiting for a checkpoint to start." EXECUTE_GATHER "Waiting for activity from a child process while executing a Gather plan node." -- 2.30.2