v22-0005-BitmapHeapScan-initialize-some-prefetch-state-el.patch
text/x-patch
Filename: v22-0005-BitmapHeapScan-initialize-some-prefetch-state-el.patch
Type: text/x-patch
Part: 0
Patch
Format: format-patch
Series: patch v22-0005
Subject: BitmapHeapScan initialize some prefetch state elsewhere
| File | + | − |
|---|---|---|
| src/backend/executor/nodeBitmapHeapscan.c | 7 | 6 |
From 5242d841a5d4cad1d60959618ca9b4d2ec132778 Mon Sep 17 00:00:00 2001
From: Melanie Plageman <melanieplageman@gmail.com>
Date: Sat, 6 Apr 2024 12:51:11 -0400
Subject: [PATCH v22 05/19] BitmapHeapScan initialize some prefetch state
elsewhere
The prefetch_target and prefetch_pages members can be initialized in the
scan and rescan functions. This makes it more straightforward to use the
unified TBMIterator API for BitmapHeapScan.
Author: Melanie Plageman
Discussion: https://postgr.es/m/CAAKRu_ZwCwWFeL_H3ia26bP2e7HiKLWt0ZmGXPVwPO6uXq0vaA%40mail.gmail.com
---
src/backend/executor/nodeBitmapHeapscan.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/backend/executor/nodeBitmapHeapscan.c b/src/backend/executor/nodeBitmapHeapscan.c
index d1ef3a44e18..5eb54f62f20 100644
--- a/src/backend/executor/nodeBitmapHeapscan.c
+++ b/src/backend/executor/nodeBitmapHeapscan.c
@@ -111,11 +111,7 @@ BitmapHeapNext(BitmapHeapScanState *node)
#ifdef USE_PREFETCH
if (node->prefetch_maximum > 0)
- {
node->prefetch_iterator = tbm_begin_private_iterate(tbm);
- node->prefetch_pages = 0;
- node->prefetch_target = -1;
- }
#endif /* USE_PREFETCH */
}
else
@@ -591,6 +587,9 @@ ExecReScanBitmapHeapScan(BitmapHeapScanState *node)
node->recheck = true;
node->blockno = InvalidBlockNumber;
node->pfblockno = InvalidBlockNumber;
+ /* Only used for serial BHS */
+ node->prefetch_pages = 0;
+ node->prefetch_target = -1;
ExecScanReScan(&node->ss);
@@ -676,7 +675,7 @@ ExecInitBitmapHeapScan(BitmapHeapScan *node, EState *estate, int eflags)
scanstate->lossy_pages = 0;
scanstate->prefetch_iterator = NULL;
scanstate->prefetch_pages = 0;
- scanstate->prefetch_target = 0;
+ scanstate->prefetch_target = -1;
scanstate->initialized = false;
scanstate->shared_prefetch_iterator = NULL;
scanstate->pstate = NULL;
@@ -812,7 +811,7 @@ ExecBitmapHeapInitializeDSM(BitmapHeapScanState *node,
/* Initialize the mutex */
SpinLockInit(&pstate->mutex);
pstate->prefetch_pages = 0;
- pstate->prefetch_target = 0;
+ pstate->prefetch_target = -1;
pstate->state = BM_INITIAL;
ConditionVariableInit(&pstate->cv);
@@ -839,6 +838,8 @@ ExecBitmapHeapReInitializeDSM(BitmapHeapScanState *node,
return;
pstate->state = BM_INITIAL;
+ pstate->prefetch_pages = 0;
+ pstate->prefetch_target = -1;
if (DsaPointerIsValid(pstate->tbmiterator))
tbm_free_shared_area(dsa, pstate->tbmiterator);
--
2.34.1