diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/access/transam/xlog.c | 4 | ||||
-rw-r--r-- | src/backend/catalog/system_views.sql | 14 | ||||
-rw-r--r-- | src/backend/postmaster/checkpointer.c | 6 | ||||
-rw-r--r-- | src/backend/storage/buffer/bufmgr.c | 2 | ||||
-rw-r--r-- | src/backend/utils/activity/pgstat_checkpointer.c | 21 | ||||
-rw-r--r-- | src/backend/utils/adt/pgstatfuncs.c | 35 |
6 files changed, 44 insertions, 38 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 40461923ea3..b541be8eec2 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -6349,8 +6349,8 @@ LogCheckpointEnd(bool restartpoint) CheckpointStats.ckpt_sync_end_t); /* Accumulate checkpoint timing summary data, in milliseconds. */ - PendingCheckpointerStats.checkpoint_write_time += write_msecs; - PendingCheckpointerStats.checkpoint_sync_time += sync_msecs; + PendingCheckpointerStats.write_time += write_msecs; + PendingCheckpointerStats.sync_time += sync_msecs; /* * All of the published timing statistics are accounted for. Only diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 886f175fc2d..b65f6b52490 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -1111,16 +1111,20 @@ CREATE VIEW pg_stat_archiver AS CREATE VIEW pg_stat_bgwriter AS SELECT - pg_stat_get_bgwriter_timed_checkpoints() AS checkpoints_timed, - pg_stat_get_bgwriter_requested_checkpoints() AS checkpoints_req, - pg_stat_get_checkpoint_write_time() AS checkpoint_write_time, - pg_stat_get_checkpoint_sync_time() AS checkpoint_sync_time, - pg_stat_get_bgwriter_buf_written_checkpoints() AS buffers_checkpoint, pg_stat_get_bgwriter_buf_written_clean() AS buffers_clean, pg_stat_get_bgwriter_maxwritten_clean() AS maxwritten_clean, pg_stat_get_buf_alloc() AS buffers_alloc, pg_stat_get_bgwriter_stat_reset_time() AS stats_reset; +CREATE VIEW pg_stat_checkpointer AS + SELECT + pg_stat_get_checkpointer_num_timed() AS num_timed, + pg_stat_get_checkpointer_num_requested() AS num_requested, + pg_stat_get_checkpointer_write_time() AS write_time, + pg_stat_get_checkpointer_sync_time() AS sync_time, + pg_stat_get_checkpointer_buffers_written() AS buffers_written, + pg_stat_get_checkpointer_stat_reset_time() AS stats_reset; + CREATE VIEW pg_stat_io AS SELECT b.backend_type, diff --git a/src/backend/postmaster/checkpointer.c b/src/backend/postmaster/checkpointer.c index 4fe403c9a89..a3c1aba24ea 100644 --- a/src/backend/postmaster/checkpointer.c +++ b/src/backend/postmaster/checkpointer.c @@ -358,7 +358,7 @@ CheckpointerMain(void) if (((volatile CheckpointerShmemStruct *) CheckpointerShmem)->ckpt_flags) { do_checkpoint = true; - PendingCheckpointerStats.requested_checkpoints++; + PendingCheckpointerStats.num_requested++; } /* @@ -372,7 +372,7 @@ CheckpointerMain(void) if (elapsed_secs >= CheckPointTimeout) { if (!do_checkpoint) - PendingCheckpointerStats.timed_checkpoints++; + PendingCheckpointerStats.num_timed++; do_checkpoint = true; flags |= CHECKPOINT_CAUSE_TIME; } @@ -569,7 +569,7 @@ HandleCheckpointerInterrupts(void) * updates the statistics, increment the checkpoint request and flush * out pending statistic. */ - PendingCheckpointerStats.requested_checkpoints++; + PendingCheckpointerStats.num_requested++; ShutdownXLOG(0, 0); pgstat_report_checkpointer(); pgstat_report_wal(true); diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 21a29f9081a..dc504a1ae00 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -2751,7 +2751,7 @@ BufferSync(int flags) if (SyncOneBuffer(buf_id, false, &wb_context) & BUF_WRITTEN) { TRACE_POSTGRESQL_BUFFER_SYNC_WRITTEN(buf_id); - PendingCheckpointerStats.buf_written_checkpoints++; + PendingCheckpointerStats.buffers_written++; num_written++; } } diff --git a/src/backend/utils/activity/pgstat_checkpointer.c b/src/backend/utils/activity/pgstat_checkpointer.c index 03ed5dddda7..301a0bc7bd3 100644 --- a/src/backend/utils/activity/pgstat_checkpointer.c +++ b/src/backend/utils/activity/pgstat_checkpointer.c @@ -47,11 +47,11 @@ pgstat_report_checkpointer(void) pgstat_begin_changecount_write(&stats_shmem->changecount); #define CHECKPOINTER_ACC(fld) stats_shmem->stats.fld += PendingCheckpointerStats.fld - CHECKPOINTER_ACC(timed_checkpoints); - CHECKPOINTER_ACC(requested_checkpoints); - CHECKPOINTER_ACC(checkpoint_write_time); - CHECKPOINTER_ACC(checkpoint_sync_time); - CHECKPOINTER_ACC(buf_written_checkpoints); + CHECKPOINTER_ACC(num_timed); + CHECKPOINTER_ACC(num_requested); + CHECKPOINTER_ACC(write_time); + CHECKPOINTER_ACC(sync_time); + CHECKPOINTER_ACC(buffers_written); #undef CHECKPOINTER_ACC pgstat_end_changecount_write(&stats_shmem->changecount); @@ -92,6 +92,7 @@ pgstat_checkpointer_reset_all_cb(TimestampTz ts) &stats_shmem->stats, sizeof(stats_shmem->stats), &stats_shmem->changecount); + stats_shmem->stats.stat_reset_timestamp = ts; LWLockRelease(&stats_shmem->lock); } @@ -113,10 +114,10 @@ pgstat_checkpointer_snapshot_cb(void) /* compensate by reset offsets */ #define CHECKPOINTER_COMP(fld) pgStatLocal.snapshot.checkpointer.fld -= reset.fld; - CHECKPOINTER_COMP(timed_checkpoints); - CHECKPOINTER_COMP(requested_checkpoints); - CHECKPOINTER_COMP(checkpoint_write_time); - CHECKPOINTER_COMP(checkpoint_sync_time); - CHECKPOINTER_COMP(buf_written_checkpoints); + CHECKPOINTER_COMP(num_timed); + CHECKPOINTER_COMP(num_requested); + CHECKPOINTER_COMP(write_time); + CHECKPOINTER_COMP(sync_time); + CHECKPOINTER_COMP(buffers_written); #undef CHECKPOINTER_COMP } diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c index 998c69e241c..28ee97968b8 100644 --- a/src/backend/utils/adt/pgstatfuncs.c +++ b/src/backend/utils/adt/pgstatfuncs.c @@ -1182,21 +1182,21 @@ PG_STAT_GET_DBENTRY_FLOAT8_MS(idle_in_transaction_time) PG_STAT_GET_DBENTRY_FLOAT8_MS(session_time) Datum -pg_stat_get_bgwriter_timed_checkpoints(PG_FUNCTION_ARGS) +pg_stat_get_checkpointer_num_timed(PG_FUNCTION_ARGS) { - PG_RETURN_INT64(pgstat_fetch_stat_checkpointer()->timed_checkpoints); + PG_RETURN_INT64(pgstat_fetch_stat_checkpointer()->num_timed); } Datum -pg_stat_get_bgwriter_requested_checkpoints(PG_FUNCTION_ARGS) +pg_stat_get_checkpointer_num_requested(PG_FUNCTION_ARGS) { - PG_RETURN_INT64(pgstat_fetch_stat_checkpointer()->requested_checkpoints); + PG_RETURN_INT64(pgstat_fetch_stat_checkpointer()->num_requested); } Datum -pg_stat_get_bgwriter_buf_written_checkpoints(PG_FUNCTION_ARGS) +pg_stat_get_checkpointer_buffers_written(PG_FUNCTION_ARGS) { - PG_RETURN_INT64(pgstat_fetch_stat_checkpointer()->buf_written_checkpoints); + PG_RETURN_INT64(pgstat_fetch_stat_checkpointer()->buffers_written); } Datum @@ -1212,19 +1212,25 @@ pg_stat_get_bgwriter_maxwritten_clean(PG_FUNCTION_ARGS) } Datum -pg_stat_get_checkpoint_write_time(PG_FUNCTION_ARGS) +pg_stat_get_checkpointer_write_time(PG_FUNCTION_ARGS) { /* time is already in msec, just convert to double for presentation */ PG_RETURN_FLOAT8((double) - pgstat_fetch_stat_checkpointer()->checkpoint_write_time); + pgstat_fetch_stat_checkpointer()->write_time); } Datum -pg_stat_get_checkpoint_sync_time(PG_FUNCTION_ARGS) +pg_stat_get_checkpointer_sync_time(PG_FUNCTION_ARGS) { /* time is already in msec, just convert to double for presentation */ PG_RETURN_FLOAT8((double) - pgstat_fetch_stat_checkpointer()->checkpoint_sync_time); + pgstat_fetch_stat_checkpointer()->sync_time); +} + +Datum +pg_stat_get_checkpointer_stat_reset_time(PG_FUNCTION_ARGS) +{ + PG_RETURN_TIMESTAMPTZ(pgstat_fetch_stat_checkpointer()->stat_reset_timestamp); } Datum @@ -1684,14 +1690,9 @@ pg_stat_reset_shared(PG_FUNCTION_ARGS) if (strcmp(target, "archiver") == 0) pgstat_reset_of_kind(PGSTAT_KIND_ARCHIVER); else if (strcmp(target, "bgwriter") == 0) - { - /* - * Historically checkpointer was part of bgwriter, continue to reset - * both for now. - */ pgstat_reset_of_kind(PGSTAT_KIND_BGWRITER); + else if (strcmp(target, "checkpointer") == 0) pgstat_reset_of_kind(PGSTAT_KIND_CHECKPOINTER); - } else if (strcmp(target, "io") == 0) pgstat_reset_of_kind(PGSTAT_KIND_IO); else if (strcmp(target, "recovery_prefetch") == 0) @@ -1702,7 +1703,7 @@ pg_stat_reset_shared(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("unrecognized reset target: \"%s\"", target), - errhint("Target must be \"archiver\", \"bgwriter\", \"io\", \"recovery_prefetch\", or \"wal\"."))); + errhint("Target must be \"archiver\", \"bgwriter\", \"checkpointer\", \"io\", \"recovery_prefetch\", or \"wal\"."))); PG_RETURN_VOID(); } |