From 8459bc4bcdf0403f8c9513dd4d1fed0840acafc1 Mon Sep 17 00:00:00 2001 From: David Rowley Date: Mon, 31 Oct 2022 10:05:12 +1300 Subject: [PATCH 3/3] Prefetch tuple memory during forward seqscans --- src/backend/access/heap/heapam.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 12be87efed..e8f1fc2d71 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -1025,6 +1025,17 @@ heapgettup_pagemode(HeapScanDesc scan, tuple->t_len = ItemIdGetLength(lpp); ItemPointerSet(&(tuple->t_self), page, lineoff); + /* + * Prefetching the memory for the next tuple has shown to improve + * performance on certain hardware. + */ + if (!backward && linesleft > 1) + { + lineoff = scan->rs_vistuples[lineindex + 1]; + lpp = PageGetItemId(dp, lineoff); + pg_prefetch_mem(PageGetItem((Page) dp, lpp)); + } + /* * if current tuple qualifies, return it. */ -- 2.34.1