pgsql: bufmgr: Acquire and clean victim buffer separately - Mailing list pgsql-committers

From Andres Freund
Subject pgsql: bufmgr: Acquire and clean victim buffer separately
Date
Msg-id E1pkA4J-001Y30-25@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
bufmgr: Acquire and clean victim buffer separately

Previously we held buffer locks for two buffer mapping partitions at the same
time to change the identity of buffers.  Particularly for extending relations
needing to hold the extension lock while acquiring a victim buffer is
painful.But it also creates a bottleneck for workloads that just involve
reads.

Now we instead first acquire a victim buffer and write it out, if
necessary. Then we remove that buffer from the old partition with just the old
partition's partition lock held and insert it into the new partition with just
that partition's lock held.

By separating out the victim buffer acquisition, future commits will be able
to change relation extensions to scale better.

On my workstation, a micro-benchmark exercising buffered reads strenuously and
under a lot of concurrency, sees a >2x improvement.

Reviewed-by: Heikki Linnakangas <hlinnaka@iki.fi>
Reviewed-by: Melanie Plageman <melanieplageman@gmail.com>
Discussion: https://postgr.es/m/20221029025420.eplyow6k7tgu6he3@awork3.anarazel.de

Branch
------
master

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

Modified Files
--------------
src/backend/storage/buffer/bufmgr.c   | 558 +++++++++++++++++++---------------
src/backend/storage/buffer/localbuf.c | 115 +++----
2 files changed, 369 insertions(+), 304 deletions(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Acquire locks on views in AcquirePlannerLocks, too.
Next
From: Tom Lane
Date:
Subject: pgsql: Support "Right Anti Join" plan shapes.