Re: bgwriter doesn't flush WAL stats
Matthias van de Meent <boekewurm+postgres@gmail.com>
From: Matthias van de Meent <boekewurm+postgres@gmail.com>
To: Nazir Bilal Yavuz <byavuz81@gmail.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2023-06-21T15:02:50Z
Lists: pgsql-hackers
On Wed, 21 Jun 2023 at 13:04, Nazir Bilal Yavuz <byavuz81@gmail.com> wrote: > > Hi, > > I was trying to add WAL stats to pg_stat_io. While doing that I was comparing pg_stat_wal and pg_stat_io's WAL stats and there was some inequality between the total number of WALs. I found that the difference comes from bgwriter's WALs. bgwriter generates WAL but it doesn't flush them because the pgstat_report_wal() function isn't called in bgwriter. I attached a small patch for calling the pgstat_report_wal() function in bgwriter. > > bgwriter generates WAL by calling functions in this order: > bgwriter.c -> BackgroundWriterMain() -> BgBufferSync() -> SyncOneBuffer() -> FlushBuffer() -> XLogFlush() -> XLogWrite() I was quite confused here, as XLogWrite() does not generate any WAL; it only writes existing WAL from buffers to disk. In a running PostgreSQL instance, WAL is only generated through XLogInsert(xloginsert.c) and serialized / written to buffers in its call to XLogInsertRecord(xlog.c); XLogFlush and XLogWrite are only responsible for writing those buffers to disk. The only path that I see in XLogWrite() that could potentially put anything into WAL is through RequestCheckpoint(), but that only writes out a checkpoint when it is not in a postmaster environment - in all other cases it will wake up the checkpointer and wait for that checkpoint to finish. I also got confused with your included views; they're not included in the patch and the current master branch doesn't emit object=wal, so I can't really check that the patch works as intended. But on the topic of reporting the WAL stats in bgwriter; that seems like a good idea to fix, yes. +1 Kind regards, Matthias van de Meent Neon, Inc.
Commits
-
Flush WAL stats in bgwriter
- 594001864a36 14.10 landed
- 0684d1949fb4 15.5 landed
- 4a97a43a73cb 16.1 landed
- e64c733bb199 17.0 landed