v1-0001-WIP-Show-WAL-write-and-fsync-stats-on-pg_stat_io.patch
application/octet-stream
Filename: v1-0001-WIP-Show-WAL-write-and-fsync-stats-on-pg_stat_io.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v1-0001
Subject: WIP: Show WAL write and fsync stats on pg_stat_io
| File | + | − |
|---|---|---|
| src/backend/access/transam/xlog.c | 8 | 0 |
| src/backend/utils/activity/pgstat_io.c | 8 | 1 |
| src/include/pgstat.h | 2 | 1 |
From eb557114161e865807e39a53a24d03f5f0abe4f5 Mon Sep 17 00:00:00 2001
From: Nazir Bilal Yavuz <byavuz81@gmail.com>
Date: Wed, 28 Jun 2023 12:34:28 +0300
Subject: [PATCH v1] WIP: Show WAL write and fsync stats on pg_stat_io
This patch aims to showing WAL write and fsync stats per backend on
pg_stat_io view.
---
src/backend/access/transam/xlog.c | 8 ++++++++
src/backend/utils/activity/pgstat_io.c | 9 ++++++++-
src/include/pgstat.h | 3 ++-
3 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 8b0710abe6..2ee6c21398 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -2207,6 +2207,10 @@ XLogWrite(XLogwrtRqst WriteRqst, TimeLineID tli, bool flexible)
INSTR_TIME_SET_CURRENT(duration);
INSTR_TIME_ACCUM_DIFF(PendingWalStats.wal_write_time, duration, start);
+ pgstat_count_io_op_time(IOOBJECT_WAL, IOCONTEXT_NORMAL, IOOP_WRITE, start, 1);
+ } else
+ {
+ pgstat_count_io_op_n(IOOBJECT_WAL, IOCONTEXT_NORMAL, IOOP_WRITE, 1);
}
PendingWalStats.wal_write++;
@@ -8233,6 +8237,10 @@ issue_xlog_fsync(int fd, XLogSegNo segno, TimeLineID tli)
INSTR_TIME_SET_CURRENT(duration);
INSTR_TIME_ACCUM_DIFF(PendingWalStats.wal_sync_time, duration, start);
+ pgstat_count_io_op_time(IOOBJECT_WAL, IOCONTEXT_NORMAL, IOOP_FSYNC, start, 1);
+ } else
+ {
+ pgstat_count_io_op_n(IOOBJECT_WAL, IOCONTEXT_NORMAL, IOOP_FSYNC, 1);
}
PendingWalStats.wal_sync++;
diff --git a/src/backend/utils/activity/pgstat_io.c b/src/backend/utils/activity/pgstat_io.c
index eb7d35d422..e5cb3c7219 100644
--- a/src/backend/utils/activity/pgstat_io.c
+++ b/src/backend/utils/activity/pgstat_io.c
@@ -231,6 +231,8 @@ pgstat_get_io_object_name(IOObject io_object)
return "relation";
case IOOBJECT_TEMP_RELATION:
return "temp relation";
+ case IOOBJECT_WAL:
+ return "wal";
}
elog(ERROR, "unrecognized IOObject value: %d", io_object);
@@ -313,9 +315,9 @@ pgstat_tracks_io_bktype(BackendType bktype)
case B_ARCHIVER:
case B_LOGGER:
case B_WAL_RECEIVER:
- case B_WAL_WRITER:
return false;
+ case B_WAL_WRITER:
case B_AUTOVAC_LAUNCHER:
case B_AUTOVAC_WORKER:
case B_BACKEND:
@@ -350,6 +352,11 @@ pgstat_tracks_io_object(BackendType bktype, IOObject io_object,
if (!pgstat_tracks_io_bktype(bktype))
return false;
+
+ if (io_context != IOCONTEXT_NORMAL &&
+ io_object == IOOBJECT_WAL)
+ return false;
+
/*
* Currently, IO on temporary relations can only occur in the
* IOCONTEXT_NORMAL IOContext.
diff --git a/src/include/pgstat.h b/src/include/pgstat.h
index 57a2c0866a..fb7d3abf22 100644
--- a/src/include/pgstat.h
+++ b/src/include/pgstat.h
@@ -277,9 +277,10 @@ typedef enum IOObject
{
IOOBJECT_RELATION,
IOOBJECT_TEMP_RELATION,
+ IOOBJECT_WAL,
} IOObject;
-#define IOOBJECT_NUM_TYPES (IOOBJECT_TEMP_RELATION + 1)
+#define IOOBJECT_NUM_TYPES (IOOBJECT_WAL + 1)
typedef enum IOContext
{
--
2.25.1