Opening this as a shared checklist for 1.0-alpha so we are not each holding a
different list. It is a proposal — correct it. I have put what I can see from the
tracker and the roadmap, marked what I am taking, and left the judgement calls to you.
VERSION is 1.0-dev and there are no milestones, so nothing here is inferred from
release metadata.
Open bugs
| # |
what |
owner |
state |
| #362 |
the fetch penalty could not change a plan |
me |
#365 open, bench-validated, see below |
| #363 |
cost model sizes the decode from emitted columns, not the decoded prefix |
me |
not started, sequenced behind #365 (same function) |
| #364 |
#361's cache is not bounded by 4x the cap; 62 MB entry, 1.14x |
me |
fix built, clean on all five majors, measuring now |
| #349 |
grouped aggregates get none of the vectorized work |
you |
#366 open |
| #358 |
q5 1.73x slower with the vectorization GUCs on |
you |
open, unclaimed |
#358 is the one I would not ship an alpha over. It is a 3.4x contradiction between
two runs of the same shape, the GUCs involved are mine, and the issue itself says the
plans were never captured. It is off by default so it blocks nothing functionally, but
"we have a measurement we cannot explain in the vectorized aggregate path" is an
uncomfortable thing to have open at a release. Happy to take it — it wants
EXPLAIN (ANALYZE) per arm with the three GUCs varied one at a time, which is a
morning's work on the bench, not a design question.
Benchmarks and docs
docs/benchmarks.md needs a full re-measure before alpha and I am taking it.
Everything under it moved today: #350 (grouped agg costing), #354 (scan-key pushdown),
#357 (decode scratch), #361 (partial fetch cache), and #365 pending. Numbers taken
before that wave do not describe current main.
Scope I am proposing for that pass:
One thing to check on whichever host produces the published table: make sure the
columnar table and its heap twin carry the same indexes. On my box cpu_heap had
(hostname, time DESC) and cpu_pgc had none, which would quietly bias a
cross-engine comparison in the heap's favour on any indexed shape. I have rebuilt it
on mine. Not a claim about yours — just the check I wish I had run first.
What I think is left beyond that
Low confidence, and this is the part I most want your correction on:
- Docs accuracy pass.
docs/limitations.md and docs/configuration.md against
what actually shipped in the last two weeks — the GUC list alone has grown a lot.
- CHANGELOG and VERSION. Everything is under
[Unreleased]; alpha presumably
cuts that.
- Anything in
design/gaps/ you consider alpha-blocking rather than post-alpha. From
the roadmap's "Remaining" section I cannot tell which of those you would hold a
release for, and I would rather ask than guess.
Not proposing
I am not proposing we hold alpha for #363 or #364. Both are real, both are mine, and
both are narrow: #363 is a mis-costing that makes the planner under-penalize a shape
it already handles, and #364 is a memory bound on wide varlena tables that is better
than the pre-#361 behaviour on time. If you disagree on either, say so and I will
reorder.
#365, since it gates the rest
Bench-validated on the 100M fixture and it needed a second commit to be honest: the
first version flipped the plan off the index scan as designed, but onto the serial
columnar path (25.3 s) rather than the parallel one (4.6 s), because the partial
columnar path was conditional on a seqscan surviving add_path — which is exactly
what does not survive on a selective query. Same root cause as #362 one level up.
Fixed in the branch; re-measuring now and I will post the numbers there.
Opening this as a shared checklist for 1.0-alpha so we are not each holding a
different list. It is a proposal — correct it. I have put what I can see from the
tracker and the roadmap, marked what I am taking, and left the judgement calls to you.
VERSIONis1.0-devand there are no milestones, so nothing here is inferred fromrelease metadata.
Open bugs
#358 is the one I would not ship an alpha over. It is a 3.4x contradiction between
two runs of the same shape, the GUCs involved are mine, and the issue itself says the
plans were never captured. It is off by default so it blocks nothing functionally, but
"we have a measurement we cannot explain in the vectorized aggregate path" is an
uncomfortable thing to have open at a release. Happy to take it — it wants
EXPLAIN (ANALYZE)per arm with the three GUCs varied one at a time, which is amorning's work on the bench, not a design question.
Benchmarks and docs
docs/benchmarks.mdneeds a full re-measure before alpha and I am taking it.Everything under it moved today: #350 (grouped agg costing), #354 (scan-key pushdown),
#357 (decode scratch), #361 (partial fetch cache), and #365 pending. Numbers taken
before that wave do not describe current main.
Scope I am proposing for that pass:
three engines on the same tuned configuration.
P=4numbers. The harness forces serial andenable_indexscan=off,which measures a capability line rather than what a user gets, and the published
table should say which one it is.
unresolvable after the fact.
One thing to check on whichever host produces the published table: make sure the
columnar table and its heap twin carry the same indexes. On my box
cpu_heaphad(hostname, time DESC)andcpu_pgchad none, which would quietly bias across-engine comparison in the heap's favour on any indexed shape. I have rebuilt it
on mine. Not a claim about yours — just the check I wish I had run first.
What I think is left beyond that
Low confidence, and this is the part I most want your correction on:
docs/limitations.mdanddocs/configuration.mdagainstwhat actually shipped in the last two weeks — the GUC list alone has grown a lot.
[Unreleased]; alpha presumablycuts that.
design/gaps/you consider alpha-blocking rather than post-alpha. Fromthe roadmap's "Remaining" section I cannot tell which of those you would hold a
release for, and I would rather ask than guess.
Not proposing
I am not proposing we hold alpha for #363 or #364. Both are real, both are mine, and
both are narrow: #363 is a mis-costing that makes the planner under-penalize a shape
it already handles, and #364 is a memory bound on wide varlena tables that is better
than the pre-#361 behaviour on time. If you disagree on either, say so and I will
reorder.
#365, since it gates the rest
Bench-validated on the 100M fixture and it needed a second commit to be honest: the
first version flipped the plan off the index scan as designed, but onto the serial
columnar path (25.3 s) rather than the parallel one (4.6 s), because the partial
columnar path was conditional on a seqscan surviving
add_path— which is exactlywhat does not survive on a selective query. Same root cause as #362 one level up.
Fixed in the branch; re-measuring now and I will post the numbers there.