From 3efe58febc3c6a48dc1be7d13243fd2183afe9a8 Mon Sep 17 00:00:00 2001 From: Melanie Plageman Date: Thu, 26 Feb 2026 15:33:36 -0500 Subject: [PATCH] Simplify visibility check in heap_page_would_be_all_visible() heap_page_would_be_all_visible() does not need to distinguish between HEAPTUPLE_RECENTLY_DEAD and HEAPTUPLE_DEAD tuples: any tuple in a state other than HEAPTUPLE_LIVE means the page is not all-visible and heap_page_would_be_all_visible() returns false. Given that, calling HeapTupleSatisfiesVacuum() is unnecessary, since it performs extra work to distinguish between dead and recently dead tuples using OldestXmin. Replace it with the more minimal HeapTupleSatisfiesVacuumHorizon(). Author: Melanie Plageman Reviewed-by: Kirill Reshke Reviewed-by: Andres Freund Reviewed-by: Chao Li Discussion: https://postgr.es/m/CALdSSPjvhGXihT_9f-GJabYU%3D_PjrFDUxYaURuTbfLyQM6TErg%40mail.gmail.com --- src/backend/access/heap/vacuumlazy.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c index 4040483ed65..dcbaf49401b 100644 --- a/src/backend/access/heap/vacuumlazy.c +++ b/src/backend/access/heap/vacuumlazy.c @@ -3739,6 +3739,7 @@ heap_page_would_be_all_visible(Relation rel, Buffer buf, { ItemId itemid; HeapTupleData tuple; + TransactionId dead_after; /* * Set the offset number so that we can display it along with any @@ -3778,7 +3779,7 @@ heap_page_would_be_all_visible(Relation rel, Buffer buf, /* Visibility checks may do IO or allocate memory */ Assert(CritSectionCount == 0); - switch (HeapTupleSatisfiesVacuum(&tuple, OldestXmin, buf)) + switch (HeapTupleSatisfiesVacuumHorizon(&tuple, buf, &dead_after)) { case HEAPTUPLE_LIVE: {