Re: Adding skip scan (including MDAM style range skip scan) to nbtree
Alena Rybakina <a.rybakina@postgrespro.ru>
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
On 18.03.2025 13:54, Alena Rybakina wrote: > > > On 12.03.2025 23:50, Peter Geoghegan wrote: >> On Wed, Mar 12, 2025 at 4:28 PM Alena Rybakina >> <a.rybakina@postgrespro.ru> wrote: >>> Thank you for the explanation! >>> >>> Now I see why these changes were made. >>> >>> After your additional explanations, everything really became clear and I >>> fully agree with the current code regarding this part. >> Cool. >> >>> However I did not see an explanation to the commit regarding this place, >>> as well as a comment next to the assert and the parallel_aware check and >>> why BitmapIndexScanState was added in the ExecParallelReInitializeDSM. >> I added BitmapIndexScanState to the switch statement in >> ExecParallelReInitializeDSM because it is in the category of >> planstates that never need their shared memory reinitialized -- that's >> just how we represent such a plan state there. >> >> I think that this is supposed to serve as a kind of documentation, >> since it doesn't really affect how things behave. That is, it wouldn't >> actually affect anything if I had forgotten to add >> BitmapIndexScanState to the ExecParallelReInitializeDSM switch >> statement "case" that represents that it is in this "plan state >> category": the switch ends with catch-all "default: break;". > Agree. >>> In my opinion, there is not enough additional explanation about this in >>> the form of comments, although I think that it has already been >>> explained here enough for someone who will look at this code. >> What can be done to improve the situation? For example, would adding a >> comment next to the new assertions recently added to >> ExecIndexScanReInitializeDSM and ExecIndexOnlyScanReInitializeDSM be >> an improvement? And if so, what would the comment say? >> > After reviewing the logic again, I realized that I was confused > precisely in the reinitialization of memory for IndexScanState and > IndexOnlyScanState. > > As far as I can see, either assert is not needed here, the functions > ExecIndexScanReInitializeDSM and ExecIndexScanReInitializeDSM can be > called only if parallel_aware is positive, or it makes sense that > reinitialization is needed only if parallel_aware is positive, then > the condition noted above is not needed. According to your letter (0), > the check should be removed there too, but I got confused in the > comment. We do not need to reinitialize memory because DSM is > instrumentation state only, but it turns out that we are > reinitializing the memory, so we don't do it at all? > > I attached a diff file to the letter with the comment. > > [0] > https://www.postgresql.org/message-id/CAH2-WzkMpFsE_hM9-5tecF22jVJSGtKMFMsYqMa-uo73MOxsWw%40mail.gmail.com > > Sorry, I figured it out. The Assert was added to avoid misuse of the function to reinitialize memory and to ensure that it happens when parallel_aware is positive. -- Regards, Alena Rybakina Postgres Professional