From eb557114161e865807e39a53a24d03f5f0abe4f5 Mon Sep 17 00:00:00 2001 From: Nazir Bilal Yavuz 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