At Tue, 19 Apr 2022 17:51:24 -0700, "David G. Johnston" <david.g.johns...@gmail.com> wrote in > On Tue, Apr 19, 2022 at 4:36 PM Nathan Bossart <nathandboss...@gmail.com> > wrote: > > > On Tue, Apr 19, 2022 at 04:21:21PM -0700, David G. Johnston wrote: > > > I've done this four times in a row and while the number of dirty buffers > > > shown each time vary (see below) I see that "wrote N buffers" is always > > > exactly one more than the total count of dirty buffers. I'm just curious > > > if anyone has a quick answer for this unusual correspondence. > > > > I see that SlruInternalWritePage() increments ckpt_bufs_written, so my > > first guess would be that it's due to something like CheckPointCLOG(). > > > > > I peeked at pg_stat_bgwriter and see an increase in buffers_checkpoint > matching the dirty buffers number. > > I also looked at pg_stat_slru to try and find the corresponding change > caused by: > > slru.c:766 (SlruPhysicalWritePage) > pgstat_count_slru_page_written(shared->slru_stats_idx); > > I do see (Xact) blks_hit change during this process (after the > update/commit, not the checkpoint, though) but it increases by 2 when dirty > buffers is 4. I was expecting 4, thinking that blocks and buffers and > pages are basically the same things (which [1] seems to affirm). > > https://www.postgresql.org/message-id/13563.1044552279%40sss.pgh.pa.us
If I understand you point correctly.. Xact SLRU is so-called CLOG, on which transaction statuses (running/committed/aborted) are recorded. Its pages are separate objects from table pages, which are out-of-sight of pg_bufferchace. However, the same relationship between pages, blocks and buffers applies to the both cases in parallel. The reason for the 2 hits of Xact SLRU is that once for visibility (MVCC) check and another for commit. regards. -- Kyotaro Horiguchi NTT Open Source Software Center