diff options
Diffstat (limited to 'src/backend/utils/activity/pgstat_checkpointer.c')
-rw-r--r-- | src/backend/utils/activity/pgstat_checkpointer.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/backend/utils/activity/pgstat_checkpointer.c b/src/backend/utils/activity/pgstat_checkpointer.c new file mode 100644 index 00000000000..2ce3fba76c7 --- /dev/null +++ b/src/backend/utils/activity/pgstat_checkpointer.c @@ -0,0 +1,61 @@ +/* ------------------------------------------------------------------------- + * + * pgstat_checkpointer.c + * Implementation of checkpoint statistics. + * + * This file contains the implementation of checkpoint statistics. It is kept + * separate from pgstat.c to enforce the line between the statistics access / + * storage implementation and the details about individual types of + * statistics. + * + * Copyright (c) 2001-2022, PostgreSQL Global Development Group + * + * IDENTIFICATION + * src/backend/utils/activity/pgstat_checkpointer.c + * ------------------------------------------------------------------------- + */ + +#include "postgres.h" + +#include "utils/pgstat_internal.h" + + +/* + * Checkpointer global statistics counters. Stored directly in a stats + * message structure so they can be sent without needing to copy things + * around. We assume this init to zeroes. + */ +PgStat_MsgCheckpointer PendingCheckpointerStats; + + +/* ---------- + * pgstat_send_checkpointer() - + * + * Send checkpointer statistics to the collector + * ---------- + */ +void +pgstat_send_checkpointer(void) +{ + /* We assume this initializes to zeroes */ + static const PgStat_MsgCheckpointer all_zeroes; + + /* + * This function can be called even if nothing at all has happened. In + * this case, avoid sending a completely empty message to the stats + * collector. + */ + if (memcmp(&PendingCheckpointerStats, &all_zeroes, sizeof(PgStat_MsgCheckpointer)) == 0) + return; + + /* + * Prepare and send the message + */ + pgstat_setheader(&PendingCheckpointerStats.m_hdr, PGSTAT_MTYPE_CHECKPOINTER); + pgstat_send(&PendingCheckpointerStats, sizeof(PendingCheckpointerStats)); + + /* + * Clear out the statistics buffer, so it can be re-used. + */ + MemSet(&PendingCheckpointerStats, 0, sizeof(PendingCheckpointerStats)); +} |