From c702d656a28386cf5f642206b495c66775afc4ea Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 17 Jan 2022 15:31:28 -0800 Subject: [PATCH] heap pruning: Only call BufferGetBlockNumber() once. BufferGetBlockNumber() is not that cheap and obviously cannot change during one heap_prune_page(), so only call it once. We might be able to do better and pass the block number from the caller, but that'd be a larger change... Discussion: https://postgr.es/m/20211211045710.ljtuu4gfloh754rs@alap3.anarazel.de --- src/backend/access/heap/pruneheap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index 3201fcc52b..b3e2eec52f 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -269,6 +269,7 @@ heap_page_prune(Relation relation, Buffer buffer, { int ndeleted = 0; Page page = BufferGetPage(buffer); + BlockNumber blockno = BufferGetBlockNumber(buffer); OffsetNumber offnum, maxoff; PruneState prstate; @@ -335,7 +336,7 @@ heap_page_prune(Relation relation, Buffer buffer, htup = (HeapTupleHeader) PageGetItem(page, itemid); tup.t_data = htup; tup.t_len = ItemIdGetLength(itemid); - ItemPointerSet(&(tup.t_self), BufferGetBlockNumber(buffer), offnum); + ItemPointerSet(&(tup.t_self), blockno, offnum); /* * Set the offset number so that we can display it along with any