From 8f47b1e0163028ec8928aaf02ce49d34bb89c647 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Wed, 19 Oct 2022 08:55:45 +1300 Subject: [PATCH v2 4/5] heapam: WIP: cacheline prefetching for hot pruning. Author: Andres Freund, with contributions from Dmitry Dolgov --- src/backend/access/heap/pruneheap.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index 91c5f5e9ef..a094ac18f5 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -302,6 +302,30 @@ heap_page_prune(Relation relation, Buffer buffer, maxoff = PageGetMaxOffsetNumber(page); tup.t_tableOid = RelationGetRelid(prstate.rel); +#if 1 + for (char *p = (char *) PageGetItemId(page, FirstOffsetNumber); + p < (char *) PageGetItemId(page, maxoff); + p += 64) + { + pg_prefetch_mem((ItemId)p); + } + + + for (offnum = FirstOffsetNumber; + offnum <= maxoff; + offnum = OffsetNumberNext(offnum)) + { + ItemId itemid; + + itemid = PageGetItemId(page, offnum); + if (!ItemIdIsUsed(itemid) || ItemIdIsDead(itemid) || !ItemIdHasStorage(itemid)) + continue; + + pg_prefetch_mem((HeapTupleHeader) PageGetItem(page, itemid)); + pg_prefetch_mem(PageGetItem(page, itemid) + sizeof(HeapTupleHeaderData) - 1); + } +#endif + /* * Determine HTSV for all tuples. * -- 2.35.1.windows.2