summaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/access/transam/xlog.c4
-rw-r--r--src/backend/catalog/system_views.sql14
-rw-r--r--src/backend/postmaster/checkpointer.c6
-rw-r--r--src/backend/storage/buffer/bufmgr.c2
-rw-r--r--src/backend/utils/activity/pgstat_checkpointer.c21
-rw-r--r--src/backend/utils/adt/pgstatfuncs.c35
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();
}