heap pruning: Only call BufferGetBlockNumber() once.
authorAndres Freund <andres@anarazel.de>
Mon, 17 Jan 2022 23:31:28 +0000 (15:31 -0800)
committerAndres Freund <andres@anarazel.de>
Mon, 17 Jan 2022 23:35:11 +0000 (15:35 -0800)
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

index 3201fcc52b097764c6e493c956dff7af0053e2a6..b3e2eec52fa3be702e3423df2a19875fb8be4de9 100644 (file)
@@ -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