pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Peter Geoghegan <pg@bowt.ie>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Avoid BufferGetLSNAtomic() calls during nbtree scans.
Date: Fri, 06 Jun 2025 14:21:00 +0000
Message-ID: <E1uNXwK-000S1e-0r@gemulon.postgresql.org> (raw)

Avoid BufferGetLSNAtomic() calls during nbtree scans.

Delay calling BufferGetLSNAtomic() until we finish reading a page that
actually contains items that btgettuple will return to the executor.
This reduces the number of calls during plain index scans (we'll only
call BufferGetLSNAtomic() when _bt_readpage returns true), and totally
eliminates calls during index-only scans, bitmap index scans, and plain
index scans of an unlogged relation.

Currently, when checksums (or wal_log_hints) are enabled, acquiring a
page's LSN in BufferGetLSNAtomic() involves locking the buffer header
(which involves the use of spinlocks).  Testing has shown that enabling
page-level checksums causes large regressions with certain workloads,
especially on larger multi-socket systems.

The regression isn't tied to any Postgres 18 commit.  However, Postgres
18 commit 04bec894 made initdb use checksums by default, so it seems
prudent to address the problem now.

Author: Peter Geoghegan <pg@bowt.ie>
Reviewed-By: Tomas Vondra <tomas@vondra.me>
Discussion: https://postgr.es/m/941f0190-e3c6-4622-9ac7-c04e936e5fdb@vondra.me
Discussion: https://postgr.es/m/CAH2-Wzk-Dg5XWs_jDuiHt4_7ryrSY+n=vxmHY51EVqPDFsKXmg@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/e6eed40e44419e3268d01fe0d2daec08a7df68f7

Modified Files
--------------
src/backend/access/nbtree/nbtree.c    | 30 +++++++++++++++
src/backend/access/nbtree/nbtsearch.c | 70 ++++++++++++++++++-----------------
src/backend/access/nbtree/nbtutils.c  | 68 ++++++++++++++++------------------
src/include/access/nbtree.h           |  5 ++-
4 files changed, 102 insertions(+), 71 deletions(-)



Message-ID: <E1uNXwK-000S1e-0r@gemulon.postgresql.org>
Permalink:  ../E1uNXwK-000S1e-0r@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1uNXwK-000S1e-0r@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: pg@bowt.ie, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Avoid BufferGetLSNAtomic() calls during nbtree scans.
  In-Reply-To: <E1uNXwK-000S1e-0r@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox