diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index fca78fa4ef..74e9b9373a 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -488,6 +488,7 @@ CheckpointerMain(void) /* Send WAL statistics to the stats collector. */ pgstat_send_wal(true); + pgstat_send_buffer_actions(); /* * If any checkpoint flags have been set, redo the loop to handle the @@ -566,6 +567,7 @@ HandleCheckpointerInterrupts(void) ShutdownXLOG(0, 0); pgstat_send_checkpointer(); pgstat_send_wal(true); + pgstat_send_buffer_actions(); /* Normal exit from the checkpointer is here */ proc_exit(0); /* done */ @@ -707,6 +709,7 @@ CheckpointWriteDelay(int flags, double progress) * Report interim activity statistics. */ pgstat_send_checkpointer(); + pgstat_send_buffer_actions(); /* * This sleep used to be connected to bgwriter_delay, typically 200ms. diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 74e1d32766..f2d29336e1 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -3116,10 +3116,7 @@ pgstat_send_buffer_actions(void) pgstat_setheader(&BufferActionsStats.m_hdr, PGSTAT_MTYPE_BUFFER_ACTIONS); pgstat_send(&BufferActionsStats, sizeof(BufferActionsStats)); - /* - * pgstat_send_buffer_actions() is only called before a backend exits, so - * BufferActionsStats should not be reused. - */ + MemSet(&BufferActionsStats, 0, sizeof(BufferActionsStats)); } /* ---------- diff --git a/src/backend/utils/activity/backend_status.c b/src/backend/utils/activity/backend_status.c index 6f1e1c30d2..477e73340d 100644 --- a/src/backend/utils/activity/backend_status.c +++ b/src/backend/utils/activity/backend_status.c @@ -474,6 +474,7 @@ pgstat_beshutdown_hook(int code, Datum arg) beentry->st_procpid = 0; /* mark invalid */ PGSTAT_END_WRITE_ACTIVITY(beentry); + pgstat_send_buffer_actions(); /* so that functions can check if backend_status.c is up via MyBEEntry */ MyBEEntry = NULL;