Add wait events for checkpoint delay mechanism.
authorThomas Munro <tmunro@postgresql.org>
Fri, 13 Oct 2023 03:43:22 +0000 (16:43 +1300)
committerThomas Munro <tmunro@postgresql.org>
Fri, 13 Oct 2023 03:43:22 +0000 (16:43 +1300)
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 <robertmhaas@gmail.com>
Reviewed-by: Michael Paquier <michael@paquier.xyz>
Discussion: https://postgr.es/m/CA%2BhUKGL7Whi8iwKbzkbn_1fixH3Yy8aAPz7mfq6Hpj7FeJrKMg%40mail.gmail.com

src/backend/access/transam/xlog.c
src/backend/utils/activity/wait_event_names.txt

index 39aec70b62552a8dcb02ac4abf6b9caf05e7ad2a..07cf7662ff862c163fe67c45c4e2e03267d86448 100644 (file)
@@ -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));
    }
index 9c5fdeb3caa2a12302658ce92822774a8554c38b..d7995931bd416a2fe902ecbd24d5cf2f389cb397 100644 (file)
@@ -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 <literal>Gather</literal> plan node."