Re: Odd off-by-one dirty buffers and checkpoint buffers written

From: Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com>
To: david(dot)g(dot)johnston(at)gmail(dot)com
Cc: nathandbossart(at)gmail(dot)com, pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Odd off-by-one dirty buffers and checkpoint buffers written
Date: 2022-04-20 08:03:51
Message-ID: 20220420.170351.853955380008032480.horikyota.ntt@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

At Tue, 19 Apr 2022 17:51:24 -0700, "David G. Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> wrote in
> On Tue, Apr 19, 2022 at 4:36 PM Nathan Bossart <nathandbossart(at)gmail(dot)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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Kyotaro Horiguchi 2022-04-20 08:04:21 Re: Add --{no-,}bypassrls flags to createuser
Previous Message Tomas Vondra 2022-04-20 07:58:07 Re: Bad estimate with partial index