pgsql: Use streaming read I/O in btree vacuuming

From: Melanie Plageman <melanieplageman(at)gmail(dot)com>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Use streaming read I/O in btree vacuuming
Date: 2025-03-21 13:10:53
Message-ID: E1tvc9F-000Ite-05@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Use streaming read I/O in btree vacuuming

Btree vacuum processes all index pages in physical order. Now it uses
the read stream API to get the next buffer instead of explicitly
invoking ReadBuffer().

It is possible for concurrent insertions to cause page splits during
index vacuuming. This can lead to index entries that have yet to be
vacuumed being moved to pages that have already been vacuumed. Btree
vacuum code handles this by backtracking to reprocess those pages. So,
while sequentially encountered pages are now read through the
read stream API, backtracked pages are still read with explicit
ReadBuffer() calls.

Author: Andrey Borodin <x4mmm(at)yandex-team(dot)ru>
Reviewed-by: Melanie Plageman <melanieplageman(at)gmail(dot)com>
Reviewed-by: Junwang Zhao <zhjwpku(at)gmail(dot)com>
Reviewed-by: Kirill Reshke <reshkekirill(at)gmail(dot)com>
Discussion: https://postgr.es/m/flat/CAAKRu_bW1UOyup%3DjdFw%2BkOF9bCaAm%3D9UpiyZtbPMn8n_vnP%2Big%40mail.gmail.com#3b3a84132fc683b3ee5b40bc4c2ea2a5

Branch
------
master

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

Modified Files
--------------
src/backend/access/nbtree/nbtree.c | 91 +++++++++++++++++++++++++++-----------
1 file changed, 66 insertions(+), 25 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2025-03-21 15:31:13 pgsql: Fix plpgsql's handling of simple expressions in scrollable curso
Previous Message Álvaro Herrera 2025-03-21 10:01:07 pgsql: Change one loop in ATRewriteTable to use 1-based attnums