mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-21 08:29:39 +08:00
Tweak order of operations in BitmapHeapNext() to avoid the case of prefetching
the same page we are nanoseconds away from reading for real. There should be something left to do on the current page before we consider issuing a prefetch.
This commit is contained in:
parent
405728f669
commit
8a4505013d
@ -21,7 +21,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/executor/nodeBitmapHeapscan.c,v 1.33 2009/01/12 05:10:44 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/executor/nodeBitmapHeapscan.c,v 1.34 2009/01/12 16:00:41 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -236,10 +236,22 @@ BitmapHeapNext(BitmapHeapScanState *node)
|
||||
#endif /* USE_PREFETCH */
|
||||
}
|
||||
|
||||
/*
|
||||
* Out of range? If so, nothing more to look at on this page
|
||||
*/
|
||||
if (scan->rs_cindex < 0 || scan->rs_cindex >= scan->rs_ntuples)
|
||||
{
|
||||
node->tbmres = tbmres = NULL;
|
||||
continue;
|
||||
}
|
||||
|
||||
#ifdef USE_PREFETCH
|
||||
/*
|
||||
* We issue prefetch requests *after* fetching the current page
|
||||
* to try to avoid having prefetching interfere with the main I/O.
|
||||
* Also, this should happen only when we have determined there is
|
||||
* still something to do on the current page, else we may uselessly
|
||||
* prefetch the same page we are just about to request for real.
|
||||
*/
|
||||
if (prefetch_iterator)
|
||||
{
|
||||
@ -260,15 +272,6 @@ BitmapHeapNext(BitmapHeapScanState *node)
|
||||
}
|
||||
#endif /* USE_PREFETCH */
|
||||
|
||||
/*
|
||||
* Out of range? If so, nothing more to look at on this page
|
||||
*/
|
||||
if (scan->rs_cindex < 0 || scan->rs_cindex >= scan->rs_ntuples)
|
||||
{
|
||||
node->tbmres = tbmres = NULL;
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Okay to fetch the tuple
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user