Avoid pointer chasing in _bt_readpage inner loop.
Peter Geoghegan <pg@bowt.ie>
Avoid pointer chasing in _bt_readpage inner loop. Make _bt_readpage pass down the current scan direction to various utility functions within its pstate variable. Also have _bt_readpage work off of a local copy of scan->ignore_killed_tuples within its per-tuple loop (rather than using scan->ignore_killed_tuples directly). Testing has shown that this significantly benefits large range scans, which are naturally able to take full advantage of the pstate.startikey optimization added by commit 8a510275. Running a pgbench script with a "SELECT abalance FROM pgbench_accounts WHERE aid BETWEEN ..." query shows an increase in transaction throughput of over 5%. There also appears to be a small performance benefit when running pgbench's built-in select-only script. Follow-up to commit 65d6acbc. Author: Peter Geoghegan <pg@bowt.ie> Reviewed-By: Victor Yegorov <vyegorov@gmail.com> Discussion: https://postgr.es/m/CAH2-WzmwMwcwKFgaf+mYPwiz3iL4AqpXnwtW_O0vqpWPXRom9Q@mail.gmail.com
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/access/nbtree/nbtreadpage.c | modified | +10 −9 |
Discussion
- Moving _bt_readpage and _bt_checkkeys into a new .c file 8 messages · 2025-12-06 → 2025-12-08