Re: Adding skip scan (including MDAM style range skip scan) to nbtree
Peter Geoghegan <pg@bowt.ie>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
nbtree: Always set skipScan flag on rescan.
- 454c046094ab 19 (unreleased) landed
- bee763aea13f 18.0 landed
-
meson: Build numeric.c with -ftree-vectorize.
- 9016fa7e3bcd 19 (unreleased) cited
-
Fix "variable not found in subplan target lists" in semijoin de-duplication.
- b8a1bdc458e3 19 (unreleased) cited
-
Revert "nbtree: Remove useless row compare arg."
- dd2ce3792754 18.0 landed
-
nbtree: Remove useless row compare arg.
- 54c6ea8c81db 18.0 cited
-
Prevent premature nbtree array advancement.
- 5f4d98d4f371 18.0 landed
-
nbtree: tighten up array recheck rules.
- 7e25c9363a82 18.0 landed
-
Avoid treating nonrequired nbtree keys as required.
- 0f08df406822 18.0 landed
-
Adjust overstrong nbtree skip array assertion.
- 9d924dbb3710 18.0 landed
-
Make NULL tuple values always advance skip arrays.
- b75fedcab791 18.0 cited
-
Avoid extra index searches through preprocessing.
- b3f1a13f22f9 18.0 landed
-
Improve nbtree skip scan primitive scan scheduling.
- 21a152b37f36 18.0 landed
-
Further optimize nbtree search scan key comparisons.
- 8a510275dd6b 18.0 landed
-
Add nbtree skip scan optimization.
- 92fe23d93aa3 18.0 landed
-
Improve nbtree array primitive scan scheduling.
- 9a2e2a285a14 18.0 landed
-
nbtree: Make BTMaxItemSize into object-like macro.
- 426ea611171d 18.0 landed
-
Show index search count in EXPLAIN ANALYZE, take 2.
- 0fbceae841cb 18.0 landed
-
Make parallel nbtree index scans use an LWLock.
- 67fc4c9fd7fa 18.0 landed
-
Show index search count in EXPLAIN ANALYZE.
- 5ead85fbc811 18.0 landed
-
Avoid nbtree parallel scan currPos confusion.
- b5ee4e52026b 18.0 cited
-
nbtree: Remove useless 'strat' local variable.
- b6558e4f837e 18.0 landed
-
Normalize nbtree truncated high key array behavior.
- 79fa7b3b1a44 18.0 landed
-
Refactor handling of nbtree array redundancies.
- b524974106ac 18.0 landed
-
Fix nbtree pgstats accounting with parallel scans.
- c00c54a9ac1e 18.0 landed
- fb4f5e58af97 17.0 landed
-
Avoid parallel nbtree index scan hangs with SAOPs.
- d8adfc18bebf 18.0 landed
- a24bffc021d9 17.0 landed
-
Show Parallel Bitmap Heap Scan worker stats in EXPLAIN ANALYZE
- 5a1e6df3b84c 18.0 cited
-
Enhance nbtree ScalarArrayOp execution.
- 5bf748b86bc6 17.0 cited
-
Skip checking of scan keys required for directional scan in B-tree
- e0b1ee17dc3a 17.0 cited
-
Instead of using a numberOfRequiredKeys count to distinguish required
- 7ccaf13a06b8 8.2.0 cited
Attachments
- v25-0004-Lower-the-overhead-of-nbtree-runtime-skip-checks.patch (application/x-patch) patch v25-0004
- v25-0006-DEBUG-Add-skip-scan-disable-GUCs.patch (application/x-patch) patch v25-0006
- v25-0005-Apply-low-order-skip-key-in-_bt_first-more-often.patch (application/x-patch) patch v25-0005
- v25-0002-Improve-nbtree-SAOP-primitive-scan-scheduling.patch (application/x-patch) patch v25-0002
- v25-0003-Add-nbtree-skip-scan-optimizations.patch (application/x-patch) patch v25-0003
- v25-0001-Show-index-search-count-in-EXPLAIN-ANALYZE.patch (application/x-patch) patch v25-0001
On Fri, Feb 14, 2025 at 6:06 PM Peter Geoghegan <pg@bowt.ie> wrote: > Attached is v24, which breaks out these recent changes to primscan > scheduling into their own commit/patch (namely > v24-0002-Improve-nbtree-SAOP-primitive-scan-scheduling.patch). The > primscan scheduling improvement stuff hasn't really changed since > v23, though (though I did polish it some more). I hope to be able to > commit this new primscan scheduling patch sooner rather than later > (though I don't think that it's quite committable yet). The patch series recently bitrot due to conflicting changes on HEAD, so I decided to post a new v25 now. New in v25: * Fixed a regression with parallel index scans caused by the improved scheduling logic added by 0002-Improve-nbtree-SAOP-primitive-scan-scheduling.patch. v24 did not account for how "firstPage=false" calls to _bt_readpage might originate from _bt_first (not _bt_next) during parallel scans, even during the first page for the parallel worker's primitive scan/_bt_first call -- which made the heuristics added to _bt_advance_array_keys do the wrong thing by not terminating primitive scan based on faulty information. This was possible via the parallel scan _bt_readnextpage "seized=true" path, which led to regressions. In v24 we now pass "firstPage=true" whenever a call to _bt_readpage happens through _bt_first, no matter the details (for the first _bt_readpage call's page). * The additional EXPLAIN ANALYZE logic (that shows "Index Searches: N") added by 0001-Show-index-search-count-in-EXPLAIN-ANALYZE.patch has been adjusted, and no longer divides by nloops. I explain why dividing by nloops has some fairly bad consequences on the thread I started for the quasi-independent enhancement to EXPLAIN ANALYZE output: https://postgr.es/m/CAH2-WzmebSkeKPGw7TEaNw9=Qx-X8fAnFw916Fd2V8VVqYqqaQ@mail.gmail.com * Polished commit messages. * Added more test coverage. The LOC covered percentage is now at just over 90% for nbtutils.c. We now have coverage for almost all of the new code that advances the scan's skip arrays, including code that deals with NULL values that is seldom reached. -- Peter Geoghegan