From 5242d841a5d4cad1d60959618ca9b4d2ec132778 Mon Sep 17 00:00:00 2001 From: Melanie Plageman 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