Remove retry loop in heap_page_prune().

Robert Haas <rhaas@postgresql.org>

Commit: 1ccc1e05ae8feabf444259234d34e1e32231604d
Author: Robert Haas <rhaas@postgresql.org>
Date: 2023-10-02T15:40:07Z
Releases: 17.0
Remove retry loop in heap_page_prune().

The retry loop is needed because heap_page_prune() calls
HeapTupleSatisfiesVacuum() and then lazy_scan_prune() does the same
thing again, and they might get different answers due to concurrent
clog updates.  But this patch makes heap_page_prune() return the
HeapTupleSatisfiesVacuum() results that it computed back to the
caller, which allows lazy_scan_prune() to avoid needing to recompute
those values in the first place. That's nice both because it eliminates
the need for a retry loop and also because it's cheaper.

Melanie Plageman, reviewed by David Geier, Andres Freund, and me.

Discussion: https://postgr.es/m/CAAKRu_br124qsGJieuYA0nGjywEukhK1dKBfRdby_4yY3E9SXA%40mail.gmail.com

Files

PathChange+/−
src/backend/access/heap/pruneheap.c modified +17 −19
src/backend/access/heap/vacuumlazy.c modified +13 −30
src/include/access/heapam.h modified +25 −0

Discussion