Skip to content

Plan a V2 scan as a chain of planners from one prepared scan - #10694

Draft
joseph-isaacs wants to merge 41 commits into
developfrom
ji/scan-v2-planner-chain
Draft

joseph-isaacs wants to merge 41 commits into
developfrom
ji/scan-v2-planner-chain

Conversation

@joseph-isaacs

@joseph-isaacs joseph-isaacs commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Draft, against develop. Replaces the stack #10641 → #10648 → #10664 → #10669 → #10678 → #10670 with one branch, none of whose commits adds a plan walk.

What

A V2 scan is planned once per file and run as a chain of planners, each emitting the next through the planning protocol. No stage derives anything a stage before it already knew. The engine composes the planners and owns every decision about where work runs: all CPU is a planner's compute, all IO is a spawn_io read.

PreparedScan                   per-file, IO-free plan set, made once per partition
  PrunePlanner      evaluates the filter's pruning plans over the partition as one batch of
                    zone-map reads and one compute; while it waits, the driver asks it to
                    speculate: the predicate prefetches and projection announcements of every
                    chunk, registered beside the zone-map reads so they coalesce with them;
                    emits one chunk planner for the rows no plan pruned
  ChunkPlanner      cuts those rows into chunks from the partition's own start, emits a filter
                    or projection planner per chunk, skips chunks nothing is selected or kept of
  FilterPlanner     prefetches its chunk's conjunct segments, announces the projection's,
                    runs the conjuncts in adaptive order, emits the projection
  ProjectionPlanner emits one morsel per 64K-row piece

Protocol additions in vortex-scan and vortex-io: Planner::speculate (default none), asked by the run of every parked planner when nothing can compute, before the run polls its sources; IoSource::speculate (default: submit), which a source may serve for every session of its service. A speculated fetch is refused.

The DataFusion driver (persistent/scan_v2.rs) runs the root planner on one task that awaits its reads in place, runs the partition's first chunk on that run, and hands the chunks spawned between two hand-offs to the consumer as one group, each on a task of its own up to the concurrency, or on the root run at a concurrency of one. The same driver serves the file API (vortex_file::v2::ScanDriver).

The segment IO service keeps speculated reads for whichever session fetches a segment, for as long as the service lives, since chunks straddling two partitions or two chunks are fetched by both.

Benchmarks

Local, hot page cache, 14 DataFusion partitions, interleaved A B B A per query, two rounds, 20 iterations at SF1 and 8 at SF10, pooled. Ratios are this head over the baseline; below 1.0 is faster.

All 22 queries, this head (28e7298) vs V1 median min
SF1 (12 iterations, A B B A) 0.963 0.968
SF10 (6 iterations, A B B A) 0.958 0.969

SF1 wins: q12 0.77, q6 0.83, q19 0.82, q14 0.95, q11 0.95, q15 0.96; losses q13 1.03, q8/q9/q21 1.02. SF10 wins: q12 0.75, q6 0.78, q19 0.83, q1 0.88, q15 0.92, q14 0.93; losses q13 1.05, q22 1.03, q10 1.02. The head before this round (141570f) measured SF1 0.999 and SF10 0.973 against V1, and SF1 0.979 / SF10 1.000 against #10664.

Targeted, three rounds, q4/q6/q8/q9/q14/q15/q19/q22 at SF1 and q1/q6/q9/q12/q19 at SF10, median / min geomean against V1: SF1 0.984 / 0.963, SF10 0.884 / 0.894.

Planning once per file, across queries

Every query re-planned each table: the scan cache died with the last scan of a query, so the next query lowered the layout, optimized the projection and filter plans, proved the zones and decoded dictionary values again. q2 at SF1 ran 35 prepares per query. The cache now lives beside the parsed footer in DataFusion's session-level file metadata cache, invalidated with it when the file changes. Local, 14 partitions, against the commit before: SF1 0.965 (q19 0.90, q6 0.93, q2 0.96, q13 0.96), SF10 0.962. Against V1 on the targeted sets: SF1 0.955, SF10 0.81.

Object store: MinIO behind toxiproxy

Local MinIO holding the same SF1 and SF10 files, reached through toxiproxy with a latency toxic of 10 ms ± 4 ms jitter in each direction (about 20 to 28 ms per request) and, for the capped rows, a bandwidth toxic of 100 MB/s per connection. Ratios are this branch over V1; below 1.0 is faster. SF10 ran on 10 partitions so MinIO and the proxy had cores left; SF1 on 14.

MinIO queries this head head before this round (141570f) #10664
SF1, latency only q1 q3 q6 q9 q12 q14 q15 q19 0.42 (q6 0.18, q19 0.25, q9 1.00) 0.83
SF1, + 100 MB/s cap same 0.61 0.60
SF10, + 100 MB/s cap q1 q6 q12 q15 q19 0.90 (q19 0.66, q1 0.79, q6 1.23) 1.27

q9 stays at parity because its three scan phases are serialized by the join tree and each is a couple of round trips in both scans. SF10 over MinIO is bandwidth bound (400 MB per q6 through one box) and V2's runs there are bimodal between about 250 and 800 ms; the median is what the table shows. The slow mode is state a previous V2 query leaves in the process: six single-iteration processes all ran q6 in 360 to 436 ms, while six-iteration processes alternate 230 to 260 ms and 530 to 785 ms, and V1 is stable at about 340 ms after a cold first run. Partition streams and chunk tasks do end within their query (checked with end events on q13: every stream of the orders scan ends 130 to 155 ms after it starts, before the next query begins), so the leftover is not a task or a stream; the scan stream timer's 2.1 s reading on a 200 ms query is a metrics artifact. What a finished V2 query leaves behind that slows the next one over the object store is still open; the HTTP connection pool and the proxy are the remaining suspects.

Two of this round's commits are for that path. Zone maps are read on their own (an urgent intent, coalesced only with other urgent reads) so pruning no longer waits for the data read beside them: over MinIO SF10 pruning finished at 25 to 50 ms instead of 320 to 390. And a file in an object store reads ahead only its first two chunks per partition; the read driver dispatches in registration order, so reading every chunk ahead made the last partitions' first chunks queue behind the first partitions' last (SF10 1.27 to 0.90). A local file keeps reading every chunk ahead, where reading two ahead cost SF10 6%.

The other two are local: a filtered partition is cut into chunks of a quarter of its rows (256K to 1M), so SF1 partitions have a second chunk to spawn and stragglers on the slow cores gate the query less (SF1 0.993, SF10 1.008 against the previous head); and interning probes under a read lock, since partitions opening together serialized on hashing the expression tree.

To rerun: brew install minio minio-mc toxiproxy, minio server <dir> on 127.0.0.1:9000, mc cp --recursive vortex-bench/data/tpch/<sf>/vortex-file-compressed local/tpch/<sf>/, toxiproxy-cli create -l 127.0.0.1:9100 -u 127.0.0.1:9000 minio, add the toxics, then the bench with AWS_ENDPOINT=http://127.0.0.1:9100 AWS_ALLOW_HTTP=true and --opt remote-data-dir=s3://tpch/<sf>/.

What was slower, and why

Found by instruction counts (/usr/bin/time -l) at 1 and 14 partitions and the read driver's trace, not by timing:

  • Partition rows were cut from the footer's row count on the 8192-row grid, but the writer buffers chunks to megabytes, so at 14 partitions nearly every boundary fell inside a chunk and both neighbours decoded it: q19 at SF1 retired 17% more instructions than V2 DataFusion scan stack: shared segment source + stage prefetch (benchmark run) #10664, none more at one partition. The opener now snaps planning-time rows to the file's natural splits.
  • Filtered chunks were cut on a file-wide 1M-row grid, giving straddling partitions a tail chunk read separately. Chunks start at the partition's first row.
  • Pruning plans ran one after another, each a wait and a hop. They run as one batch and one compute.
  • The zone-map fetch was polled at submit and dispatched alone before the chunk's speculated reads were registered. The run speculates before polling, and the session polls a fetch only when the run polls.
  • Speculated reads taken by one session were read again by the next session fetching a straddled segment; speculating one chunk per wait left SF10 partitions reading their last chunks late; projection-only partitions handed chunks to the consumer one hop at a time. Each fixed as described above.
  • The scan cache keys plans, pruned zones and values by the identity of a bound expression's tree, and every DataFusion partition binds the filter and projection on its own, so no two partitions ever shared an entry: every partition built every plan (q6: 448 µs of filter plans and 92 µs of projection, fourteen times over), proved its own zones and decoded every dictionary's values itself. A prepared scan now interns its expressions structurally in the file's cache and each plan is a per-key once-cell: one build per query, prepare 630 to 186 µs on q6, q8 and q9 instructions against V1 from 1.07 and 1.03 to 1.03 and 1.008.

Metrics and phase timing

A prepared scan carries vortex.scan.* metrics its stages update, registered under the partition's labels like the IO metrics, so --show-metrics prints them beside DataFusion's: pruning duration and rows, speculated requests, chunks planned and skipped, filter duration and conjunct rows, projection duration and the wait from its reads going out to its first piece, rows and batches. Timers also report _total. Debug events bracket every phase of a partition (RUST_LOG=vortex_layout::scan=debug,vortex_datafusion::persistent=debug): open prepared and stream returned, pruning started, reads out, speculated and finished, filter started and each conjunct, projection started, reads out, first piece and finished, each batch sent.

Median per lineitem partition at SF1, 14 partitions, microseconds from the partition's open: open prepared 500, stream 720, pruning reads out 1000, speculated 1260, pruning finished 1700 to 2000, filter done 4400 to 8300, projection done 300 later, first batch 400 later. The zone map is the first read dispatched, alone, 1.36 ms after it is polled: that is the read driver's dispatch latency, the same on V1's path.

What was tried and backed out

Branch ji/scan-v2-read-ahead-experiments holds a read-ahead planner after pruning (a window of chunks prefetched, the next announced, intervals listed while the zone maps are in flight), a file announcer that registers a scan's whole interest once per file, an urgent intent that reads zone maps on their own, a bounded drain in the read driver, and speculated reads shared per file rather than per scan. Each was measured against this head and V1 on q4/q6/q8/q9/q14/q15/q19/q22 at SF1 and q1/q6/q9/q12/q19 at SF10. The announcer halved reads on projection-only scans (q9 orders 11 to 2) but, for filtered scans, widened zone-map reads into neighbours' data; the rest left filtered scans issuing two to three times V1's reads, and every combination was 1 to 3% behind this head at SF1 and 4 to 7% at SF10. The IO-level pieces (urgent intent, read-alone segment requests, bounded driver drain) are correct and tested but did not pay on this workload.

Checks

cargo clippy --all-targets --all-features -- -D warnings on vortex-scan, vortex-io, vortex-layout, vortex-file, vortex-datafusion; cargo nextest run on the same (1812 tests on vortex-scan and vortex-io, 1569 on the others); cargo +nightly-2026-09-10 fmt. Not run: the workspace-wide checks CI runs.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE

joseph-isaacs and others added 6 commits October 22, 2026 12:04
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
(cherry picked from commit 6e27e30)
The V2 opener gave every partition its own VortexFile, so each partition read and decoded
chunks straddling its boundaries and the file's metadata segments on its own. V1 avoids this
through the shared layout reader. Keep a weak per-path map of V2 segment sources beside
`layout_readers` so concurrent partitions read through one source.

TPC-H SF1 q4 went from 196 segment reads (52.4 MB) to 115 (34.8 MB) per query, matching V1.
Hot SF10 geomean against V1 moved from 1.01 to about 0.96 on this machine.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit bec59fe)
Prefetch needs the segments a stage will read before the stage runs.
Compiling already registers every segment scan and does no IO, so
`Scan::segments` compiles a plan over rows under a mask and lists them,
and the per-plan `reach` walk that re-derived the same answer goes, with
the `Reach` coordinates it carried.

`Shares` used the walk to decode a segment once when several splits or
readers of one scan read it, and goes with it. The V2 executor runs one
split per scan and shares reads in its IO session, so a scan's splits
now each read the segments they overlap, and a plan reading one segment
through two paths reads it through each.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A `PreparedScan` holds a scan's plans over one file, built once from the
footer, and makes its planners; nothing in it touches a segment and no
planner plans again. The planners form a chain, each emitting the next
through the planning protocol:

- `PrunePlanner` proves the filter's zone maps over the scan's rows,
  prefetching the zone tables together, and emits one chunk planner for
  the rows no proof excludes. Rows a proof excludes are never planned.
- `ChunkPlanner` cuts those rows into chunks and emits a filter or a
  projection planner per chunk, skipping chunks nothing is selected or
  kept of. The run drives an emitted chunk ahead of the next, so chunks
  waiting on reads overlap.
- `FilterPlanner` prefetches its chunk's conjunct segments and announces
  the projection's at its first compute, runs the conjuncts in the
  adaptive order over the surviving rows, and emits the projection.
- `ProjectionPlanner` emits one morsel per piece of the rows.

A stage with nothing to do is never made: a filter without proofs starts
at the chunk planner, a scan without a filter at the projection.

A scan runs as one task owning one planning run, instead of one task and
run per split plus a private run for the proofs; `with_concurrency` sets
nothing. The IO session keeps every read it starts, so a later stage or
morsel of a chunk that reads the segment again shares the read. The
segments a stage prefetches come from compiling its plans.

DataFusion attaches each partition's rows from the cached footer when it
repartitions a file, so the V2 opener reads exactly those rows instead of
translating a byte range through the layout.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A scan reads a zoned column through the zoned node's data child and never
its zone table, yet the node and its zone table stayed in every optimized
data plan. A new `ZonedDataRule` replaces a zoned data plan by its data,
so an optimized plan carries a zone table only where a pruning proof
reads it. Legacy stats get the same treatment through `LegacyStatsRule`;
the rule that dropped legacy stats beneath a zoned plan is subsumed.

A zone proof over legacy stats depended on the converted zoned node
surviving child optimization. `ExpressionLegacyStatsRule` now converts
the legacy child under a proof directly, through the shared
`is_zone_proof` check, so the pruning rewrite still meets a zoned plan.

With zone tables gone from data plans, the identity projection is
optimized and cached like every other projection: chunked columns stay
lazy through `Concat::map_chunks`, and a projection-only scan no longer
lowers the zone tables it never reads.

(cherry picked from commit 91be25d)

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
DataFusion opens a file once per partition, so each partition lowered the
layout, planned the filter and proved the zone maps on its own. A scan
cache now keeps each distinct filter's plans along with the zones their
proofs excluded, and the opener keeps one cache per file that concurrent
partitions find through a weak handle and that the last scan holding it
frees. A prune planner skips the zone maps of a proof an earlier scan of
the file already proved: they are not read again.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@joseph-isaacs joseph-isaacs added the changelog/performance A performance improvement label Oct 22, 2026
@codspeed

codspeed Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Merging this PR will regress 2 benchmarks

4 warnings, 1 note

⚠️ Walltime results may be unreliable

Some benchmarks used the Walltime instrument outside CodSpeed Macro Runners, which can make the results inconsistent.

Learn more about Macro Runners

See affected benchmarks

⚠️ Unable to measure the execution of 1 benchmark

This benchmark measured no execution time, so its result is not comparable and counts as unchanged. This usually happens when the compiler removes the code under test.

Prevent compiler optimizations

See affected benchmarks

⚠️ 19 benchmarks are dominated by system calls

System calls cannot be simulated consistently and are left out of the measure. The reported value understates the real cost. Switch to the Walltime instrument to measure them.

Learn more about system calls

See affected benchmarks

⚠️ Base and head ran on different runner types

Some benchmarks with significant performance changes were compared across different runner types, so the changes might not come from the code. Run base and head on the same runner type, or use CodSpeed Macro Runners for more stable results.

Learn more about Macro Runners

Open the report in CodSpeed to investigate

ℹ️ 40 benchmarks have no flamegraph

The flamegraph wasn't generated: the symbols of the profiling trace could not be resolved, because no information about the language frames was collected.

See affected benchmarks

⚡ 7 improved benchmarks
❌ 2 regressed benchmarks
✅ 2399 untouched benchmarks
⏩ 12 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
❌ Walltime bitpack_blocked_compress_avx2 6.7 µs 7.6 µs -12.13%
❌ CPU Simulation test_scan_filter[int] 3.1 ms 3.4 ms -10.88%
⚡ CPU Simulation prepare[1000] 430.3 µs 10.2 µs ×42
⚡ CPU Simulation prepare[100] 74.8 µs 10.2 µs ×7.3
⚡ CPU Simulation prepare[1] 16.5 µs 10.2 µs +61.07%
⚡ CPU Simulation scan[1] 95.9 µs 76.1 µs +26.05%
⚡ CPU Simulation prepare_and_compile[100] 322.9 µs 268.5 µs +20.26%
⚡ CPU Simulation prepare_and_compile[1000] 2.7 ms 2.3 ms +16.75%
⚡ CPU Simulation prepare_and_compile[1] 52.8 µs 47.7 µs +10.63%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing ji/scan-v2-planner-chain (28e7298) with develop (d270200)

Open in CodSpeed

Footnotes

  1. 12 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩

@joseph-isaacs joseph-isaacs added the action/bench-sql Run SQL benchmarks without Vortex Compact on this PR label Oct 22, 2026
@github-actions github-actions Bot removed the action/bench-sql Run SQL benchmarks without Vortex Compact on this PR label Oct 22, 2026
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Polar Signals Profiling Results

Latest Run

Status Commit Job Attempt Link
🟢 Done da8a7c8 tpch-nvme-10 1 Explore Profiling Data
🟢 Done da8a7c8 tpch-s3 1 Explore Profiling Data
🟢 Done da8a7c8 clickbench-nvme 1 Explore Profiling Data
🟢 Done da8a7c8 polarsignals 1 Explore Profiling Data
🟢 Done da8a7c8 tpch-nvme 1 Explore Profiling Data
🟢 Done da8a7c8 tpcds-nvme 1 Explore Profiling Data
🟢 Done da8a7c8 fineweb 1 Explore Profiling Data
Previous Runs (14)
Status Commit Job Attempt Link
🟢 Done af81c35 clickbench-nvme 1 Explore Profiling Data
🟢 Done af81c35 polarsignals 1 Explore Profiling Data
🟢 Done af81c35 tpch-nvme-10 1 Explore Profiling Data
🟢 Done af81c35 fineweb 1 Explore Profiling Data
🟢 Done af81c35 tpcds-nvme 1 Explore Profiling Data
🟢 Done af81c35 tpch-s3 1 Explore Profiling Data
🟢 Done af81c35 tpch-nvme 1 Explore Profiling Data
🟢 Done 40ce998 clickbench-nvme 1 Explore Profiling Data
🟢 Done 40ce998 polarsignals 1 Explore Profiling Data
🟢 Done 40ce998 tpch-nvme-10 1 Explore Profiling Data
🟢 Done 40ce998 fineweb 1 Explore Profiling Data
🟢 Done 40ce998 tpch-s3 1 Explore Profiling Data
🟢 Done 40ce998 tpcds-nvme 1 Explore Profiling Data
🟢 Done 40ce998 tpch-nvme 1 Explore Profiling Data

Powered by Polar Signals Cloud

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks: PolarSignals Profiling 📖

Commits: PR da8a7c8a vs base 31027fc2
Vortex (geomean): hot 1.010x ➖ · cold 1.060x ➖


datafusion / vortex-file-compressed / ns (1.010x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
polarsignals_q00/datafusion:vortex-file-compressed 45213553 / 44703721 / +1.1% 90066545 / 84854142 / +6.1% 0.50 / 0.53 / -4.7%
polarsignals_q01/datafusion:vortex-file-compressed 50248110 / 50117699 / +0.3% 113548357 / 107175165 / +5.9% 0.44 / 0.47 / -5.4%
polarsignals_q02/datafusion:vortex-file-compressed 43932958 / 43508170 / +1.0% 89395714 / 77807857 / +14.9% 🔴 0.49 / 0.56 / -12.1%
polarsignals_q03/datafusion:vortex-file-compressed 55772515 / 54672978 / +2.0% 117264591 / 111546045 / +5.1% 0.48 / 0.49 / -3.0%
polarsignals_q04/datafusion:vortex-file-compressed 9387902 / 9233656 / +1.7% 49247102 / 40393230 / +21.9% 🔴 0.19 / 0.23 / -16.6%
polarsignals_q05/datafusion:vortex-file-compressed 12140928 / 12216035 / -0.6% 52980785 / 53576648 / -1.1% 0.23 / 0.23 / +0.5%
polarsignals_q06/datafusion:vortex-file-compressed 23631802 / 23279492 / +1.5% 65805157 / 63559450 / +3.5% 0.36 / 0.37 / -2.0%
polarsignals_q07/datafusion:vortex-file-compressed 11120810 / 10987350 / +1.2% 52448145 / 51686778 / +1.5% 0.21 / 0.21 / -0.3%
polarsignals_q08/datafusion:vortex-file-compressed 98290235 / 98711504 / -0.4% 167124378 / 163762990 / +2.1% 0.59 / 0.60 / -2.4%
polarsignals_q09/datafusion:vortex-file-compressed 10139404 / 9896820 / +2.5% 49900450 / 49072206 / +1.7% 0.20 / 0.20 / +0.8%

No file size changes detected.

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks: FineWeb NVMe 📖

Commits: PR da8a7c8a vs base 31027fc2
Verdict: No clear signal (low confidence)
Attributed Vortex impact: -1.4%
Engines: DataFusion No clear signal (-3.0%, low confidence) · DuckDB No clear signal (+0.1%, low confidence)
Vortex (geomean): hot 0.980x ➖ · cold 1.014x ➖
Parquet (geomean): hot 0.994x ➖ · cold 0.981x ➖
Shifts: Parquet (control) -0.6% · Median polish -0.4%

How to read Verdict and Engines
  • Verdict: Overall PR-level signal after subtracting baseline drift estimated from Parquet control rows. It can be Likely improvement, Likely regression, or No clear signal.
  • Engines: Per-engine attribution. DataFusion is compared against DataFusion/Parquet controls; DuckDB is compared against DuckDB/Parquet controls. This answers whether each engine improved or regressed independently.
  • Confidence: Based on directional consistency, share of rows above the noise floor, and control-run noise.
  • Hot vs cold: Every measurement is run several times. The first run is reported as the cold run, and the median of the runs after it is reported as the hot run. The verdict and significance use hot runs; each target's geomean reports hot and cold beside each other where the individual runs were recorded and hot alone where they were not, the cold column shows first-run cost per row, and hot/cold is how much of each run the warm path saves. Rows whose results predate per-run reporting show only one value, taken from the value the runner reported.
  • Table cells: Each cell reads PR / base / %diff. The hot and cold columns mark a change as 🔴 slower or 🟢 faster once it clears this suite's threshold; anything smaller is noise here and is left unmarked, as is hot/cold, because a shift in the warm-up ratio is not a win or a loss by itself.

datafusion / vortex-file-compressed / ns (0.957x ➖, 2↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
fineweb_q00/datafusion:vortex-file-compressed 6749274 / 6897139 / -2.1% 17879209 / 20738004 / -13.8% 🟢 0.38 / 0.33 / +13.5%
fineweb_q01/datafusion:vortex-file-compressed 7328603 / 8950928 / -18.1% 🟢 47024262 / 49376442 / -4.8% 0.16 / 0.18 / -14.0%
fineweb_q02/datafusion:vortex-file-compressed 10125066 / 9931704 / +1.9% 50825719 / 53640180 / -5.2% 0.20 / 0.19 / +7.6%
fineweb_q03/datafusion:vortex-file-compressed 19687004 / 20039514 / -1.8% 107916536 / 114286303 / -5.6% 0.18 / 0.18 / +4.0%
fineweb_q04/datafusion:vortex-file-compressed 67286096 / 66723486 / +0.8% 170001336 / 162291762 / +4.8% 0.40 / 0.41 / -3.7%
fineweb_q05/datafusion:vortex-file-compressed 66483020 / 66463894 / +0.0% 153547255 / 155104989 / -1.0% 0.43 / 0.43 / +1.0%
fineweb_q06/datafusion:vortex-file-compressed 18891536 / 19086454 / -1.0% 110496759 / 123752154 / -10.7% 🟢 0.17 / 0.15 / +10.9%
fineweb_q07/datafusion:vortex-file-compressed 18071722 / 16885802 / +7.0% 108441276 / 115415877 / -6.0% 0.17 / 0.15 / +13.9%
fineweb_q08/datafusion:vortex-file-compressed 7748459 / 9859151 / -21.4% 🟢 63470983 / 50386561 / +26.0% 🔴 0.12 / 0.20 / -37.6%
datafusion / parquet / ns (0.987x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
fineweb_q00/datafusion:parquet 9625359 / 9467992 / +1.7% 31340698 / 33397772 / -6.2% 0.31 / 0.28 / +8.3%
fineweb_q01/datafusion:parquet 74452221 / 74764121 / -0.4% 156200690 / 160503059 / -2.7% 0.48 / 0.47 / +2.3%
fineweb_q02/datafusion:parquet 73610650 / 75148070 / -2.0% 148949195 / 163942663 / -9.1% 0.49 / 0.46 / +7.8%
fineweb_q03/datafusion:parquet 74823972 / 75553874 / -1.0% 166005441 / 159658998 / +4.0% 0.45 / 0.47 / -4.8%
fineweb_q04/datafusion:parquet 81588981 / 84229642 / -3.1% 157043992 / 156251424 / +0.5% 0.52 / 0.54 / -3.6%
fineweb_q05/datafusion:parquet 80207407 / 81395592 / -1.5% 156000673 / 157499418 / -1.0% 0.51 / 0.52 / -0.5%
fineweb_q06/datafusion:parquet 76708418 / 77394579 / -0.9% 162962500 / 169259690 / -3.7% 0.47 / 0.46 / +2.9%
fineweb_q07/datafusion:parquet 73656350 / 75630914 / -2.6% 157318980 / 163432861 / -3.7% 0.47 / 0.46 / +1.2%
fineweb_q08/datafusion:parquet 72507166 / 73955137 / -2.0% 160823027 / 168547456 / -4.6% 0.45 / 0.44 / +2.8%
duckdb / vortex-file-compressed / ns (1.003x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
fineweb_q00/duckdb:vortex-file-compressed 2391974 / 2324310 / +2.9% 7427738 / 7436608 / -0.1% 0.32 / 0.31 / +3.0%
fineweb_q01/duckdb:vortex-file-compressed 9663244 / 9599964 / +0.7% 38728683 / 35034373 / +10.5% 🔴 0.25 / 0.27 / -8.9%
fineweb_q02/duckdb:vortex-file-compressed 10794432 / 10746668 / +0.4% 35609849 / 35746280 / -0.4% 0.30 / 0.30 / +0.8%
fineweb_q03/duckdb:vortex-file-compressed 19392815 / 19256648 / +0.7% 103239698 / 99547163 / +3.7% 0.19 / 0.19 / -2.9%
fineweb_q04/duckdb:vortex-file-compressed 68309682 / 68309000 / +0.0% 118928667 / 115019755 / +3.4% 0.57 / 0.59 / -3.3%
fineweb_q05/duckdb:vortex-file-compressed 67199069 / 66549545 / +1.0% 117367166 / 110435533 / +6.3% 0.57 / 0.60 / -5.0%
fineweb_q06/duckdb:vortex-file-compressed 19261115 / 19181495 / +0.4% 109936216 / 95116090 / +15.6% 🔴 0.18 / 0.20 / -13.1%
fineweb_q07/duckdb:vortex-file-compressed 18727370 / 18860556 / -0.7% 102034252 / 90064083 / +13.3% 🔴 0.18 / 0.21 / -12.4%
fineweb_q08/duckdb:vortex-file-compressed 5493542 / 5653240 / -2.8% 14352118 / 14636158 / -1.9% 0.38 / 0.39 / -0.9%
duckdb / parquet / ns (1.001x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
fineweb_q00/duckdb:parquet 27615378 / 27583605 / +0.1% 29761876 / 29899319 / -0.5% 0.93 / 0.92 / +0.6%
fineweb_q01/duckdb:parquet 58667148 / 60839176 / -3.6% 82977138 / 87811880 / -5.5% 0.71 / 0.69 / +2.0%
fineweb_q02/duckdb:parquet 65247696 / 64631548 / +1.0% 84797492 / 87520140 / -3.1% 0.77 / 0.74 / +4.2%
fineweb_q03/duckdb:parquet 128622593 / 128749726 / -0.1% 194507659 / 188767985 / +3.0% 0.66 / 0.68 / -3.0%
fineweb_q04/duckdb:parquet 178339767 / 181890972 / -2.0% 222456207 / 228431291 / -2.6% 0.80 / 0.80 / +0.7%
fineweb_q05/duckdb:parquet 179127992 / 173075328 / +3.5% 224113787 / 220798189 / +1.5% 0.80 / 0.78 / +2.0%
fineweb_q06/duckdb:parquet 96908414 / 96221180 / +0.7% 159272440 / 159338525 / -0.0% 0.61 / 0.60 / +0.8%
fineweb_q07/duckdb:parquet 98684986 / 97232478 / +1.5% 153660747 / 157247378 / -2.3% 0.64 / 0.62 / +3.9%
fineweb_q08/duckdb:parquet 33536240 / 33478700 / +0.2% 34689398 / 33890855 / +2.4% 0.97 / 0.99 / -2.1%

No file size changes detected.

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks: TPC-H SF=1 on NVME 📖

Commits: PR da8a7c8a vs base 31027fc2
Verdict: No clear signal (low confidence)
Attributed Vortex impact: +5.8%
Engines: DataFusion Likely regression (+11.8%, medium confidence) · DuckDB No clear signal (+0.1%, low confidence)
Vortex (geomean): hot 1.060x ➖ · cold 0.984x ➖
Parquet (geomean): hot 1.002x ➖ · cold 1.004x ➖
Shifts: Parquet (control) +0.2% · Median polish +0.5%

How to read Verdict and Engines
  • Verdict: Overall PR-level signal after subtracting baseline drift estimated from Parquet control rows. It can be Likely improvement, Likely regression, or No clear signal.
  • Engines: Per-engine attribution. DataFusion is compared against DataFusion/Parquet controls; DuckDB is compared against DuckDB/Parquet controls. This answers whether each engine improved or regressed independently.
  • Confidence: Based on directional consistency, share of rows above the noise floor, and control-run noise.
  • Hot vs cold: Every measurement is run several times. The first run is reported as the cold run, and the median of the runs after it is reported as the hot run. The verdict and significance use hot runs; each target's geomean reports hot and cold beside each other where the individual runs were recorded and hot alone where they were not, the cold column shows first-run cost per row, and hot/cold is how much of each run the warm path saves. Rows whose results predate per-run reporting show only one value, taken from the value the runner reported.
  • Table cells: Each cell reads PR / base / %diff. The hot and cold columns mark a change as 🔴 slower or 🟢 faster once it clears this suite's threshold; anything smaller is noise here and is left unmarked, as is hot/cold, because a shift in the warm-up ratio is not a win or a loss by itself.

datafusion / vortex-file-compressed / ns (1.120x ❌, 0↑ 10↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/datafusion:vortex-file-compressed 17423728 / 14713851 / +18.4% 🔴 45736273 / 43934225 / +4.1% 0.38 / 0.33 / +13.8%
tpch_q02/datafusion:vortex-file-compressed 17725602 / 17054655 / +3.9% 35787769 / 34777973 / +2.9% 0.50 / 0.49 / +1.0%
tpch_q03/datafusion:vortex-file-compressed 22581307 / 18917295 / +19.4% 🔴 46942182 / 46703661 / +0.5% 0.48 / 0.41 / +18.8%
tpch_q04/datafusion:vortex-file-compressed 13185645 / 10058589 / +31.1% 🔴 35119882 / 34213054 / +2.7% 0.38 / 0.29 / +27.7%
tpch_q05/datafusion:vortex-file-compressed 39922199 / 36472139 / +9.5% 68999316 / 67806549 / +1.8% 0.58 / 0.54 / +7.6%
tpch_q06/datafusion:vortex-file-compressed 8777460 / 5884484 / +49.2% 🔴 31058940 / 30112638 / +3.1% 0.28 / 0.20 / +44.6%
tpch_q07/datafusion:vortex-file-compressed 55315529 / 51430597 / +7.6% 79763669 / 77890348 / +2.4% 0.69 / 0.66 / +5.0%
tpch_q08/datafusion:vortex-file-compressed 55449002 / 51800896 / +7.0% 77665602 / 82597471 / -6.0% 0.71 / 0.63 / +13.8%
tpch_q09/datafusion:vortex-file-compressed 48909965 / 49434260 / -1.1% 77734973 / 77925190 / -0.2% 0.63 / 0.63 / -0.8%
tpch_q10/datafusion:vortex-file-compressed 20472155 / 17012125 / +20.3% 🔴 52415286 / 52598266 / -0.3% 0.39 / 0.32 / +20.8%
tpch_q11/datafusion:vortex-file-compressed 15965039 / 14880533 / +7.3% 35561901 / 36611768 / -2.9% 0.45 / 0.41 / +10.5%
tpch_q12/datafusion:vortex-file-compressed 25359316 / 22683058 / +11.8% 🔴 44906183 / 44444826 / +1.0% 0.56 / 0.51 / +10.6%
tpch_q13/datafusion:vortex-file-compressed 20889160 / 19775237 / +5.6% 41760531 / 43251174 / -3.4% 0.50 / 0.46 / +9.4%
tpch_q14/datafusion:vortex-file-compressed 15720892 / 14825554 / +6.0% 41538966 / 41497107 / +0.1% 0.38 / 0.36 / +5.9%
tpch_q15/datafusion:vortex-file-compressed 21214764 / 18200006 / +16.6% 🔴 45791081 / 44292868 / +3.4% 0.46 / 0.41 / +12.8%
tpch_q16/datafusion:vortex-file-compressed 18552575 / 18259087 / +1.6% 40179403 / 41217467 / -2.5% 0.46 / 0.44 / +4.2%
tpch_q17/datafusion:vortex-file-compressed 29901879 / 28191278 / +6.1% 63588090 / 61015252 / +4.2% 0.47 / 0.46 / +1.8%
tpch_q18/datafusion:vortex-file-compressed 38333438 / 36862242 / +4.0% 60767468 / 58320267 / +4.2% 0.63 / 0.63 / -0.2%
tpch_q19/datafusion:vortex-file-compressed 18014061 / 14585925 / +23.5% 🔴 44748205 / 44922288 / -0.4% 0.40 / 0.32 / +24.0%
tpch_q20/datafusion:vortex-file-compressed 23368375 / 20334853 / +14.9% 🔴 46849103 / 47226541 / -0.8% 0.50 / 0.43 / +15.8%
tpch_q21/datafusion:vortex-file-compressed 45189419 / 38252573 / +18.1% 🔴 70001587 / 69625004 / +0.5% 0.65 / 0.55 / +17.5%
tpch_q22/datafusion:vortex-file-compressed 11428571 / 11949536 / -4.4% 32822904 / 34137394 / -3.9% 0.35 / 0.35 / -0.5%
datafusion / parquet / ns (1.002x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/datafusion:parquet 18499442 / 18370927 / +0.7% 46100539 / 46265614 / -0.4% 0.40 / 0.40 / +1.1%
tpch_q02/datafusion:parquet 48642152 / 49394968 / -1.5% 76032165 / 75717287 / +0.4% 0.64 / 0.65 / -1.9%
tpch_q03/datafusion:parquet 40525718 / 39990869 / +1.3% 72670247 / 72648407 / +0.0% 0.56 / 0.55 / +1.3%
tpch_q04/datafusion:parquet 17671116 / 17768672 / -0.5% 46566174 / 45759573 / +1.8% 0.38 / 0.39 / -2.3%
tpch_q05/datafusion:parquet 70050794 / 70645920 / -0.8% 102828249 / 104015549 / -1.1% 0.68 / 0.68 / +0.3%
tpch_q06/datafusion:parquet 10759852 / 10413573 / +3.3% 40027202 / 36831440 / +8.7% 0.27 / 0.28 / -4.9%
tpch_q07/datafusion:parquet 77544214 / 77956161 / -0.5% 116344140 / 111570258 / +4.3% 0.67 / 0.70 / -4.6%
tpch_q08/datafusion:parquet 88235016 / 88645454 / -0.5% 127096223 / 127106180 / -0.0% 0.69 / 0.70 / -0.5%
tpch_q09/datafusion:parquet 76565806 / 76597626 / -0.0% 115033706 / 110008271 / +4.6% 0.67 / 0.70 / -4.4%
tpch_q10/datafusion:parquet 31916954 / 31346841 / +1.8% 63767019 / 63455392 / +0.5% 0.50 / 0.49 / +1.3%
tpch_q11/datafusion:parquet 37799798 / 38416254 / -1.6% 65475739 / 66041101 / -0.9% 0.58 / 0.58 / -0.8%
tpch_q12/datafusion:parquet 28369100 / 27993240 / +1.3% 54411153 / 56362413 / -3.5% 0.52 / 0.50 / +5.0%
tpch_q13/datafusion:parquet 27927401 / 27988679 / -0.2% 50722789 / 48880660 / +3.8% 0.55 / 0.57 / -3.8%
tpch_q14/datafusion:parquet 23738555 / 23905606 / -0.7% 52823391 / 54651953 / -3.3% 0.45 / 0.44 / +2.7%
tpch_q15/datafusion:parquet 38417026 / 38523264 / -0.3% 69952084 / 70532073 / -0.8% 0.55 / 0.55 / +0.6%
tpch_q16/datafusion:parquet 28768553 / 28715719 / +0.2% 53041672 / 53060783 / -0.0% 0.54 / 0.54 / +0.2%
tpch_q17/datafusion:parquet 44429031 / 44233782 / +0.4% 82001808 / 82760337 / -0.9% 0.54 / 0.53 / +1.4%
tpch_q18/datafusion:parquet 44699406 / 44090906 / +1.4% 72974750 / 71405128 / +2.2% 0.61 / 0.62 / -0.8%
tpch_q19/datafusion:parquet 20719263 / 20917686 / -0.9% 56260758 / 52876133 / +6.4% 0.37 / 0.40 / -6.9%
tpch_q20/datafusion:parquet 54851549 / 54750943 / +0.2% 91044343 / 92655325 / -1.7% 0.60 / 0.59 / +2.0%
tpch_q21/datafusion:parquet 77544828 / 76831356 / +0.9% 112946232 / 107785703 / +4.8% 0.69 / 0.71 / -3.7%
tpch_q22/datafusion:parquet 21352820 / 21278347 / +0.3% 46335529 / 46144642 / +0.4% 0.46 / 0.46 / -0.1%
duckdb / vortex-file-compressed / ns (1.003x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/duckdb:vortex-file-compressed 10094150 / 10202574 / -1.1% 20953343 / 22770181 / -8.0% 0.48 / 0.45 / +7.5%
tpch_q02/duckdb:vortex-file-compressed 15728234 / 15517523 / +1.4% 25160498 / 24826836 / +1.3% 0.63 / 0.63 / +0.0%
tpch_q03/duckdb:vortex-file-compressed 19652103 / 19770140 / -0.6% 35899114 / 36586638 / -1.9% 0.55 / 0.54 / +1.3%
tpch_q04/duckdb:vortex-file-compressed 12815797 / 12664759 / +1.2% 25607422 / 26715559 / -4.1% 0.50 / 0.47 / +5.6%
tpch_q05/duckdb:vortex-file-compressed 20857351 / 20810652 / +0.2% 34044781 / 34729784 / -2.0% 0.61 / 0.60 / +2.2%
tpch_q06/duckdb:vortex-file-compressed 5871167 / 5769840 / +1.8% 15910350 / 16422571 / -3.1% 0.37 / 0.35 / +5.0%
tpch_q07/duckdb:vortex-file-compressed 25073842 / 24999895 / +0.3% 40082631 / 41904543 / -4.3% 0.63 / 0.60 / +4.9%
tpch_q08/duckdb:vortex-file-compressed 21990891 / 22007515 / -0.1% 39062478 / 39066846 / -0.0% 0.56 / 0.56 / -0.1%
tpch_q09/duckdb:vortex-file-compressed 22973256 / 22265113 / +3.2% 40243865 / 41886406 / -3.9% 0.57 / 0.53 / +7.4%
tpch_q10/duckdb:vortex-file-compressed 23623555 / 23644636 / -0.1% 39240778 / 41879278 / -6.3% 0.60 / 0.56 / +6.6%
tpch_q11/duckdb:vortex-file-compressed 7985668 / 7919924 / +0.8% 15898279 / 15870986 / +0.2% 0.50 / 0.50 / +0.7%
tpch_q12/duckdb:vortex-file-compressed 16760905 / 16677393 / +0.5% 31264885 / 34315077 / -8.9% 0.54 / 0.49 / +10.3%
tpch_q13/duckdb:vortex-file-compressed 21244183 / 21231747 / +0.1% 32222776 / 33667326 / -4.3% 0.66 / 0.63 / +4.5%
tpch_q14/duckdb:vortex-file-compressed 12243936 / 12465575 / -1.8% 24525863 / 24756963 / -0.9% 0.50 / 0.50 / -0.9%
tpch_q15/duckdb:vortex-file-compressed 9253340 / 9244595 / +0.1% 20110829 / 20087961 / +0.1% 0.46 / 0.46 / -0.0%
tpch_q16/duckdb:vortex-file-compressed 19074870 / 18978950 / +0.5% 25870245 / 25579185 / +1.1% 0.74 / 0.74 / -0.6%
tpch_q17/duckdb:vortex-file-compressed 14313482 / 13963565 / +2.5% 26915488 / 29001555 / -7.2% 0.53 / 0.48 / +10.5%
tpch_q18/duckdb:vortex-file-compressed 26801596 / 26642020 / +0.6% 35584232 / 37457586 / -5.0% 0.75 / 0.71 / +5.9%
tpch_q19/duckdb:vortex-file-compressed 12425061 / 12329480 / +0.8% 26045557 / 27996399 / -7.0% 0.48 / 0.44 / +8.3%
tpch_q20/duckdb:vortex-file-compressed 15284105 / 15457154 / -1.1% 31248105 / 33369989 / -6.4% 0.49 / 0.46 / +5.6%
tpch_q21/duckdb:vortex-file-compressed 39025684 / 39331323 / -0.8% 57523504 / 60670342 / -5.2% 0.68 / 0.65 / +4.7%
tpch_q22/duckdb:vortex-file-compressed 18657248 / 18843680 / -1.0% 28557078 / 29619121 / -3.6% 0.65 / 0.64 / +2.7%
duckdb / parquet / ns (1.002x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/duckdb:parquet 18182238 / 17674164 / +2.9% 22197005 / 22122981 / +0.3% 0.82 / 0.80 / +2.5%
tpch_q02/duckdb:parquet 31109474 / 30279321 / +2.7% 38962650 / 38931524 / +0.1% 0.80 / 0.78 / +2.7%
tpch_q03/duckdb:parquet 36234653 / 36416498 / -0.5% 45409854 / 47184665 / -3.8% 0.80 / 0.77 / +3.4%
tpch_q04/duckdb:parquet 26578857 / 26560817 / +0.1% 34523163 / 34543225 / -0.1% 0.77 / 0.77 / +0.1%
tpch_q05/duckdb:parquet 41160956 / 40857778 / +0.7% 51304688 / 50301955 / +2.0% 0.80 / 0.81 / -1.2%
tpch_q06/duckdb:parquet 10827658 / 11201439 / -3.3% 16800352 / 16016055 / +4.9% 0.64 / 0.70 / -7.8%
tpch_q07/duckdb:parquet 45341347 / 44370228 / +2.2% 54458087 / 56220641 / -3.1% 0.83 / 0.79 / +5.5%
tpch_q08/duckdb:parquet 48955780 / 48396529 / +1.2% 59301456 / 59989608 / -1.1% 0.83 / 0.81 / +2.3%
tpch_q09/duckdb:parquet 51957625 / 51772743 / +0.4% 60885273 / 60872937 / +0.0% 0.85 / 0.85 / +0.3%
tpch_q10/duckdb:parquet 42499983 / 42230028 / +0.6% 48803190 / 49912091 / -2.2% 0.87 / 0.85 / +2.9%
tpch_q11/duckdb:parquet 17164898 / 16954923 / +1.2% 24168839 / 24120127 / +0.2% 0.71 / 0.70 / +1.0%
tpch_q12/duckdb:parquet 22867094 / 22994759 / -0.6% 29716645 / 31003239 / -4.1% 0.77 / 0.74 / +3.8%
tpch_q13/duckdb:parquet 36066250 / 35734437 / +0.9% 40285277 / 41649814 / -3.3% 0.90 / 0.86 / +4.3%
tpch_q14/duckdb:parquet 26198903 / 26493370 / -1.1% 33994378 / 32997696 / +3.0% 0.77 / 0.80 / -4.0%
tpch_q15/duckdb:parquet 19287953 / 19104688 / +1.0% 24817741 / 25070351 / -1.0% 0.78 / 0.76 / +2.0%
tpch_q16/duckdb:parquet 31104418 / 30895398 / +0.7% 39078332 / 38855062 / +0.6% 0.80 / 0.80 / +0.1%
tpch_q17/duckdb:parquet 26864748 / 26787312 / +0.3% 35156431 / 33962520 / +3.5% 0.76 / 0.79 / -3.1%
tpch_q18/duckdb:parquet 38058890 / 38690518 / -1.6% 47411200 / 48086840 / -1.4% 0.80 / 0.80 / -0.2%
tpch_q19/duckdb:parquet 22542648 / 23552471 / -4.3% 31504742 / 31570739 / -0.2% 0.72 / 0.75 / -4.1%
tpch_q20/duckdb:parquet 32738791 / 32309714 / +1.3% 43118813 / 42977613 / +0.3% 0.76 / 0.75 / +1.0%
tpch_q21/duckdb:parquet 65167789 / 64649769 / +0.8% 77001240 / 76466838 / +0.7% 0.85 / 0.85 / +0.1%
tpch_q22/duckdb:parquet 24089658 / 24061977 / +0.1% 32020439 / 32226626 / -0.6% 0.75 / 0.75 / +0.8%

No file size changes detected.

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks: TPC-H SF=10 on NVME 📖

Commits: PR da8a7c8a vs base 31027fc2
Verdict: No clear signal (low confidence)
Attributed Vortex impact: +4.6%
Engines: DataFusion No clear signal (+8.4%, low confidence) · DuckDB No clear signal (+0.9%, low confidence)
Vortex (geomean): hot 1.041x ➖ · cold 1.018x ➖
Parquet (geomean): hot 0.995x ➖ · cold 0.999x ➖
Shifts: Parquet (control) -0.5% · Median polish +0.0%

How to read Verdict and Engines
  • Verdict: Overall PR-level signal after subtracting baseline drift estimated from Parquet control rows. It can be Likely improvement, Likely regression, or No clear signal.
  • Engines: Per-engine attribution. DataFusion is compared against DataFusion/Parquet controls; DuckDB is compared against DuckDB/Parquet controls. This answers whether each engine improved or regressed independently.
  • Confidence: Based on directional consistency, share of rows above the noise floor, and control-run noise.
  • Hot vs cold: Every measurement is run several times. The first run is reported as the cold run, and the median of the runs after it is reported as the hot run. The verdict and significance use hot runs; each target's geomean reports hot and cold beside each other where the individual runs were recorded and hot alone where they were not, the cold column shows first-run cost per row, and hot/cold is how much of each run the warm path saves. Rows whose results predate per-run reporting show only one value, taken from the value the runner reported.
  • Table cells: Each cell reads PR / base / %diff. The hot and cold columns mark a change as 🔴 slower or 🟢 faster once it clears this suite's threshold; anything smaller is noise here and is left unmarked, as is hot/cold, because a shift in the warm-up ratio is not a win or a loss by itself.

datafusion / vortex-file-compressed / ns (1.084x ➖, 0↑ 7↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/datafusion:vortex-file-compressed 90847880 / 83819237 / +8.4% 140302397 / 153701322 / -8.7% 0.65 / 0.55 / +18.7%
tpch_q02/datafusion:vortex-file-compressed 70412568 / 64419306 / +9.3% 100600664 / 96263204 / +4.5% 0.70 / 0.67 / +4.6%
tpch_q03/datafusion:vortex-file-compressed 69591632 / 60645145 / +14.8% 🔴 125667285 / 118507951 / +6.0% 0.55 / 0.51 / +8.2%
tpch_q04/datafusion:vortex-file-compressed 37534559 / 33439041 / +12.2% 🔴 82474830 / 72923952 / +13.1% 🔴 0.46 / 0.46 / -0.8%
tpch_q05/datafusion:vortex-file-compressed 121231620 / 115614074 / +4.9% 181281987 / 186235243 / -2.7% 0.67 / 0.62 / +7.7%
tpch_q06/datafusion:vortex-file-compressed 16820231 / 13740406 / +22.4% 🔴 79720553 / 73911613 / +7.9% 0.21 / 0.19 / +13.5%
tpch_q07/datafusion:vortex-file-compressed 138377199 / 131864811 / +4.9% 201786205 / 187493110 / +7.6% 0.69 / 0.70 / -2.5%
tpch_q08/datafusion:vortex-file-compressed 147433821 / 141818703 / +4.0% 219684649 / 216220273 / +1.6% 0.67 / 0.66 / +2.3%
tpch_q09/datafusion:vortex-file-compressed 191011446 / 183402660 / +4.1% 268398622 / 261290511 / +2.7% 0.71 / 0.70 / +1.4%
tpch_q10/datafusion:vortex-file-compressed 77748751 / 70424327 / +10.4% 🔴 145462194 / 138512025 / +5.0% 0.53 / 0.51 / +5.1%
tpch_q11/datafusion:vortex-file-compressed 45801045 / 42350480 / +8.1% 68776288 / 68492390 / +0.4% 0.67 / 0.62 / +7.7%
tpch_q12/datafusion:vortex-file-compressed 42814561 / 43624111 / -1.9% 92813838 / 95767680 / -3.1% 0.46 / 0.46 / +1.3%
tpch_q13/datafusion:vortex-file-compressed 43925048 / 42791790 / +2.6% 86363273 / 75805000 / +13.9% 🔴 0.51 / 0.56 / -9.9%
tpch_q14/datafusion:vortex-file-compressed 25328235 / 24749109 / +2.3% 97353164 / 100787261 / -3.4% 0.26 / 0.25 / +5.9%
tpch_q15/datafusion:vortex-file-compressed 40336700 / 35026665 / +15.2% 🔴 101306293 / 98058902 / +3.3% 0.40 / 0.36 / +11.5%
tpch_q16/datafusion:vortex-file-compressed 39792612 / 36221533 / +9.9% 70600736 / 69120402 / +2.1% 0.56 / 0.52 / +7.6%
tpch_q17/datafusion:vortex-file-compressed 180495923 / 173749276 / +3.9% 231991216 / 225188365 / +3.0% 0.78 / 0.77 / +0.8%
tpch_q18/datafusion:vortex-file-compressed 203702129 / 198891015 / +2.4% 276908758 / 263320024 / +5.2% 0.74 / 0.76 / -2.6%
tpch_q19/datafusion:vortex-file-compressed 43125746 / 35539896 / +21.3% 🔴 119262665 / 97234865 / +22.7% 🔴 0.36 / 0.37 / -1.1%
tpch_q20/datafusion:vortex-file-compressed 66053763 / 60499980 / +9.2% 121790383 / 119484062 / +1.9% 0.54 / 0.51 / +7.1%
tpch_q21/datafusion:vortex-file-compressed 188730300 / 174984103 / +7.9% 249281643 / 235838248 / +5.7% 0.76 / 0.74 / +2.0%
tpch_q22/datafusion:vortex-file-compressed 28203708 / 25204477 / +11.9% 🔴 57348839 / 53986587 / +6.2% 0.49 / 0.47 / +5.3%
datafusion / parquet / ns (1.000x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/datafusion:parquet 105593350 / 106046246 / -0.4% 152768023 / 154339962 / -1.0% 0.69 / 0.69 / +0.6%
tpch_q02/datafusion:parquet 98489820 / 97901810 / +0.6% 128382765 / 132320645 / -3.0% 0.77 / 0.74 / +3.7%
tpch_q03/datafusion:parquet 123053874 / 123208356 / -0.1% 180934718 / 175918629 / +2.9% 0.68 / 0.70 / -2.9%
tpch_q04/datafusion:parquet 52159160 / 52045863 / +0.2% 103730727 / 91549124 / +13.3% 🔴 0.50 / 0.57 / -11.6%
tpch_q05/datafusion:parquet 163357479 / 165441557 / -1.3% 248015508 / 234294629 / +5.9% 0.66 / 0.71 / -6.7%
tpch_q06/datafusion:parquet 41554241 / 41307359 / +0.6% 90667770 / 95484066 / -5.0% 0.46 / 0.43 / +5.9%
tpch_q07/datafusion:parquet 190626813 / 188937757 / +0.9% 265326630 / 261265971 / +1.6% 0.72 / 0.72 / -0.7%
tpch_q08/datafusion:parquet 201434405 / 203101330 / -0.8% 276033599 / 275774551 / +0.1% 0.73 / 0.74 / -0.9%
tpch_q09/datafusion:parquet 223657028 / 226546002 / -1.3% 292859969 / 298158363 / -1.8% 0.76 / 0.76 / +0.5%
tpch_q10/datafusion:parquet 145085040 / 145612170 / -0.4% 214279571 / 210001129 / +2.0% 0.68 / 0.69 / -2.4%
tpch_q11/datafusion:parquet 59310900 / 59663136 / -0.6% 92846574 / 89876831 / +3.3% 0.64 / 0.66 / -3.8%
tpch_q12/datafusion:parquet 72912934 / 70495653 / +3.4% 133796535 / 134763205 / -0.7% 0.54 / 0.52 / +4.2%
tpch_q13/datafusion:parquet 83729071 / 82966721 / +0.9% 129046180 / 127743075 / +1.0% 0.65 / 0.65 / -0.1%
tpch_q14/datafusion:parquet 63698463 / 63772637 / -0.1% 144261841 / 150741556 / -4.3% 0.44 / 0.42 / +4.4%
tpch_q15/datafusion:parquet 108677053 / 108679558 / -0.0% 172715642 / 166185695 / +3.9% 0.63 / 0.65 / -3.8%
tpch_q16/datafusion:parquet 45617539 / 45565890 / +0.1% 75296457 / 78172943 / -3.7% 0.61 / 0.58 / +3.9%
tpch_q17/datafusion:parquet 220179082 / 221411362 / -0.6% 294839906 / 284304016 / +3.7% 0.75 / 0.78 / -4.1%
tpch_q18/datafusion:parquet 215660780 / 216882452 / -0.6% 270082270 / 275705190 / -2.0% 0.80 / 0.79 / +1.5%
tpch_q19/datafusion:parquet 96724312 / 97109592 / -0.4% 181820856 / 182169957 / -0.2% 0.53 / 0.53 / -0.2%
tpch_q20/datafusion:parquet 133827062 / 134012823 / -0.1% 192905461 / 196828447 / -2.0% 0.69 / 0.68 / +1.9%
tpch_q21/datafusion:parquet 301430007 / 298743526 / +0.9% 383864815 / 392867968 / -2.3% 0.79 / 0.76 / +3.3%
tpch_q22/datafusion:parquet 42136529 / 42619973 / -1.1% 72672574 / 72596600 / +0.1% 0.58 / 0.59 / -1.2%
duckdb / vortex-file-compressed / ns (0.999x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/duckdb:vortex-file-compressed 42387479 / 42902893 / -1.2% 81529061 / 81316156 / +0.3% 0.52 / 0.53 / -1.5%
tpch_q02/duckdb:vortex-file-compressed 29095035 / 29586319 / -1.7% 44078247 / 42937367 / +2.7% 0.66 / 0.69 / -4.2%
tpch_q03/duckdb:vortex-file-compressed 56930527 / 56715579 / +0.4% 113305801 / 112849072 / +0.4% 0.50 / 0.50 / -0.0%
tpch_q04/duckdb:vortex-file-compressed 52683165 / 52568778 / +0.2% 94115976 / 93624807 / +0.5% 0.56 / 0.56 / -0.3%
tpch_q05/duckdb:vortex-file-compressed 72863388 / 73335751 / -0.6% 122866333 / 122049176 / +0.7% 0.59 / 0.60 / -1.3%
tpch_q06/duckdb:vortex-file-compressed 19334357 / 19331339 / +0.0% 66836503 / 63483901 / +5.3% 0.29 / 0.30 / -5.0%
tpch_q07/duckdb:vortex-file-compressed 58576288 / 58457603 / +0.2% 128070779 / 127431986 / +0.5% 0.46 / 0.46 / -0.3%
tpch_q08/duckdb:vortex-file-compressed 88826290 / 88709278 / +0.1% 146188701 / 141430930 / +3.4% 0.61 / 0.63 / -3.1%
tpch_q09/duckdb:vortex-file-compressed 107678260 / 106326468 / +1.3% 175567906 / 175554087 / +0.0% 0.61 / 0.61 / +1.3%
tpch_q10/duckdb:vortex-file-compressed 100052865 / 101507511 / -1.4% 151778351 / 158297082 / -4.1% 0.66 / 0.64 / +2.8%
tpch_q11/duckdb:vortex-file-compressed 15212041 / 14853922 / +2.4% 27455719 / 28904087 / -5.0% 0.55 / 0.51 / +7.8%
tpch_q12/duckdb:vortex-file-compressed 57028138 / 57832003 / -1.4% 97766048 / 107336338 / -8.9% 0.58 / 0.54 / +8.3%
tpch_q13/duckdb:vortex-file-compressed 77593523 / 77638429 / -0.1% 104287262 / 103967248 / +0.3% 0.74 / 0.75 / -0.4%
tpch_q14/duckdb:vortex-file-compressed 31265296 / 31553049 / -0.9% 78188077 / 76871476 / +1.7% 0.40 / 0.41 / -2.6%
tpch_q15/duckdb:vortex-file-compressed 26330111 / 26746665 / -1.6% 70807215 / 74594159 / -5.1% 0.37 / 0.36 / +3.7%
tpch_q16/duckdb:vortex-file-compressed 51760224 / 51537955 / +0.4% 62410416 / 64321934 / -3.0% 0.83 / 0.80 / +3.5%
tpch_q17/duckdb:vortex-file-compressed 43600274 / 43986534 / -0.9% 83300560 / 83813312 / -0.6% 0.52 / 0.52 / -0.3%
tpch_q18/duckdb:vortex-file-compressed 101926567 / 99503222 / +2.4% 132706333 / 133874806 / -0.9% 0.77 / 0.74 / +3.3%
tpch_q19/duckdb:vortex-file-compressed 31793428 / 32071554 / -0.9% 90760416 / 90016871 / +0.8% 0.35 / 0.36 / -1.7%
tpch_q20/duckdb:vortex-file-compressed 48244946 / 47929906 / +0.7% 104249375 / 106171276 / -1.8% 0.46 / 0.45 / +2.5%
tpch_q21/duckdb:vortex-file-compressed 107034672 / 105528625 / +1.4% 159206287 / 156542185 / +1.7% 0.67 / 0.67 / -0.3%
tpch_q22/duckdb:vortex-file-compressed 35552894 / 35932351 / -1.1% 55074261 / 54963779 / +0.2% 0.65 / 0.65 / -1.3%
duckdb / parquet / ns (0.990x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/duckdb:parquet 74535487 / 72692709 / +2.5% 84933101 / 87726211 / -3.2% 0.88 / 0.83 / +5.9%
tpch_q02/duckdb:parquet 53660408 / 54189876 / -1.0% 62937247 / 63778463 / -1.3% 0.85 / 0.85 / +0.3%
tpch_q03/duckdb:parquet 96532054 / 98768238 / -2.3% 124222550 / 119419107 / +4.0% 0.78 / 0.83 / -6.0%
tpch_q04/duckdb:parquet 90437168 / 91612844 / -1.3% 103537578 / 105211640 / -1.6% 0.87 / 0.87 / +0.3%
tpch_q05/duckdb:parquet 126616691 / 126076797 / +0.4% 168075118 / 177419118 / -5.3% 0.75 / 0.71 / +6.0%
tpch_q06/duckdb:parquet 45516393 / 47330771 / -3.8% 55247360 / 53645913 / +3.0% 0.82 / 0.88 / -6.6%
tpch_q07/duckdb:parquet 109287668 / 109032834 / +0.2% 147290244 / 141998737 / +3.7% 0.74 / 0.77 / -3.4%
tpch_q08/duckdb:parquet 152555971 / 155607118 / -2.0% 180444623 / 180462460 / -0.0% 0.85 / 0.86 / -2.0%
tpch_q09/duckdb:parquet 167127993 / 165683350 / +0.9% 207719532 / 196977131 / +5.5% 0.80 / 0.84 / -4.3%
tpch_q10/duckdb:parquet 125662269 / 128580846 / -2.3% 138466367 / 140080792 / -1.2% 0.91 / 0.92 / -1.1%
tpch_q11/duckdb:parquet 33096471 / 33462542 / -1.1% 42121117 / 43922420 / -4.1% 0.79 / 0.76 / +3.1%
tpch_q12/duckdb:parquet 74982230 / 74495201 / +0.7% 84706020 / 84766684 / -0.1% 0.89 / 0.88 / +0.7%
tpch_q13/duckdb:parquet 128078950 / 127518974 / +0.4% 127315718 / 132925937 / -4.2% 1.01 / 0.96 / +4.9%
tpch_q14/duckdb:parquet 77242682 / 78206420 / -1.2% 115801664 / 113533328 / +2.0% 0.67 / 0.69 / -3.2%
tpch_q15/duckdb:parquet 70436668 / 68521170 / +2.8% 87888810 / 89576252 / -1.9% 0.80 / 0.76 / +4.8%
tpch_q16/duckdb:parquet 63678970 / 64843534 / -1.8% 67297615 / 66900748 / +0.6% 0.95 / 0.97 / -2.4%
tpch_q17/duckdb:parquet 86855646 / 87064658 / -0.2% 125046772 / 119704369 / +4.5% 0.69 / 0.73 / -4.5%
tpch_q18/duckdb:parquet 123058252 / 126330565 / -2.6% 148674912 / 153470734 / -3.1% 0.83 / 0.82 / +0.6%
tpch_q19/duckdb:parquet 76709621 / 77980781 / -1.6% 104578417 / 107039556 / -2.3% 0.73 / 0.73 / +0.7%
tpch_q20/duckdb:parquet 92196271 / 95394113 / -3.4% 118795418 / 126310209 / -5.9% 0.78 / 0.76 / +2.8%
tpch_q21/duckdb:parquet 178986580 / 184709016 / -3.1% 228160552 / 223904938 / +1.9% 0.78 / 0.82 / -4.9%
tpch_q22/duckdb:parquet 46254328 / 47216661 / -2.0% 54272944 / 56059568 / -3.2% 0.85 / 0.84 / +1.2%

No file size changes detected.

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks: Clickbench on NVME 📖

Commits: PR da8a7c8a vs base 31027fc2
Verdict: No clear signal (low confidence)
Attributed Vortex impact: +0.4%
Engines: DataFusion No clear signal (+0.6%, low confidence) · DuckDB No clear signal (+0.1%, low confidence)
Vortex (geomean): hot 0.996x ➖ · cold 0.997x ➖
Parquet (geomean): hot 0.992x ➖ · cold 0.994x ➖
Shifts: Parquet (control) -0.8% · Median polish -0.6%

How to read Verdict and Engines
  • Verdict: Overall PR-level signal after subtracting baseline drift estimated from Parquet control rows. It can be Likely improvement, Likely regression, or No clear signal.
  • Engines: Per-engine attribution. DataFusion is compared against DataFusion/Parquet controls; DuckDB is compared against DuckDB/Parquet controls. This answers whether each engine improved or regressed independently.
  • Confidence: Based on directional consistency, share of rows above the noise floor, and control-run noise.
  • Hot vs cold: Every measurement is run several times. The first run is reported as the cold run, and the median of the runs after it is reported as the hot run. The verdict and significance use hot runs; each target's geomean reports hot and cold beside each other where the individual runs were recorded and hot alone where they were not, the cold column shows first-run cost per row, and hot/cold is how much of each run the warm path saves. Rows whose results predate per-run reporting show only one value, taken from the value the runner reported.
  • Table cells: Each cell reads PR / base / %diff. The hot and cold columns mark a change as 🔴 slower or 🟢 faster once it clears this suite's threshold; anything smaller is noise here and is left unmarked, as is hot/cold, because a shift in the warm-up ratio is not a win or a loss by itself.

datafusion / vortex-file-compressed / ns (1.000x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
clickbench_q00/datafusion:vortex-file-compressed 1265482 / 1261248 / +0.3% 22280559 / 22208176 / +0.3% 0.06 / 0.06 / +0.0%
clickbench_q01/datafusion:vortex-file-compressed 5912716 / 5741486 / +3.0% 28269088 / 32461466 / -12.9% 🟢 0.21 / 0.18 / +18.3%
clickbench_q02/datafusion:vortex-file-compressed 9553192 / 9506805 / +0.5% 36604223 / 36047214 / +1.5% 0.26 / 0.26 / -1.0%
clickbench_q03/datafusion:vortex-file-compressed 10845186 / 10987468 / -1.3% 53536981 / 54059496 / -1.0% 0.20 / 0.20 / -0.3%
clickbench_q04/datafusion:vortex-file-compressed 53828222 / 55368442 / -2.8% 87990060 / 90498730 / -2.8% 0.61 / 0.61 / -0.0%
clickbench_q05/datafusion:vortex-file-compressed 72950173 / 74096078 / -1.5% 115650254 / 114855147 / +0.7% 0.63 / 0.65 / -2.2%
clickbench_q06/datafusion:vortex-file-compressed 1287510 / 1282883 / +0.4% 22242326 / 22415841 / -0.8% 0.06 / 0.06 / +1.1%
clickbench_q07/datafusion:vortex-file-compressed 9374174 / 9278688 / +1.0% 31935195 / 33317213 / -4.1% 0.29 / 0.28 / +5.4%
clickbench_q08/datafusion:vortex-file-compressed 75361706 / 75295750 / +0.1% 115156686 / 119698431 / -3.8% 0.65 / 0.63 / +4.0%
clickbench_q09/datafusion:vortex-file-compressed 172906240 / 168945109 / +2.3% 205220873 / 208476106 / -1.6% 0.84 / 0.81 / +4.0%
clickbench_q10/datafusion:vortex-file-compressed 22294192 / 22039146 / +1.2% 68311565 / 66952078 / +2.0% 0.33 / 0.33 / -0.9%
clickbench_q11/datafusion:vortex-file-compressed 25538708 / 25674424 / -0.5% 67425779 / 70448132 / -4.3% 0.38 / 0.36 / +3.9%
clickbench_q12/datafusion:vortex-file-compressed 72054596 / 71714575 / +0.5% 116330376 / 122310525 / -4.9% 0.62 / 0.59 / +5.6%
clickbench_q13/datafusion:vortex-file-compressed 118587458 / 115821386 / +2.4% 184508362 / 177485708 / +4.0% 0.64 / 0.65 / -1.5%
clickbench_q14/datafusion:vortex-file-compressed 75620336 / 73953617 / +2.3% 117562189 / 121150935 / -3.0% 0.64 / 0.61 / +5.4%
clickbench_q15/datafusion:vortex-file-compressed 61766280 / 60744492 / +1.7% 96603702 / 98857521 / -2.3% 0.64 / 0.61 / +4.1%
clickbench_q16/datafusion:vortex-file-compressed 148928859 / 150124496 / -0.8% 208590641 / 207159238 / +0.7% 0.71 / 0.72 / -1.5%
clickbench_q17/datafusion:vortex-file-compressed 146225342 / 149583786 / -2.2% 205107510 / 209383454 / -2.0% 0.71 / 0.71 / -0.2%
clickbench_q18/datafusion:vortex-file-compressed 288267680 / 296181507 / -2.7% 369503645 / 373254936 / -1.0% 0.78 / 0.79 / -1.7%
clickbench_q19/datafusion:vortex-file-compressed 7565269 / 7476818 / +1.2% 48413390 / 48177529 / +0.5% 0.16 / 0.16 / +0.7%
clickbench_q20/datafusion:vortex-file-compressed 59810815 / 61254057 / -2.4% 233417334 / 224197416 / +4.1% 0.26 / 0.27 / -6.2%
clickbench_q21/datafusion:vortex-file-compressed 89153956 / 87192698 / +2.2% 271047661 / 265857519 / +2.0% 0.33 / 0.33 / +0.3%
clickbench_q22/datafusion:vortex-file-compressed 96132536 / 100680410 / -4.5% 342700069 / 345081792 / -0.7% 0.28 / 0.29 / -3.9%
clickbench_q23/datafusion:vortex-file-compressed 198190198 / 188356090 / +5.2% 472598535 / 384793861 / +22.8% 🔴 0.42 / 0.49 / -14.3%
clickbench_q24/datafusion:vortex-file-compressed 15519532 / 16014626 / -3.1% 66096262 / 65324025 / +1.2% 0.23 / 0.25 / -4.2%
clickbench_q25/datafusion:vortex-file-compressed 18025236 / 17481601 / +3.1% 59917251 / 59875824 / +0.1% 0.30 / 0.29 / +3.0%
clickbench_q26/datafusion:vortex-file-compressed 15456732 / 16242988 / -4.8% 67144606 / 66297846 / +1.3% 0.23 / 0.25 / -6.0%
clickbench_q27/datafusion:vortex-file-compressed 97332412 / 96676686 / +0.7% 240892013 / 239499020 / +0.6% 0.40 / 0.40 / +0.1%
clickbench_q28/datafusion:vortex-file-compressed 550231666 / 551104877 / -0.2% 609846215 / 631233857 / -3.4% 0.90 / 0.87 / +3.3%
clickbench_q29/datafusion:vortex-file-compressed 23265136 / 22995814 / +1.2% 50314326 / 51410757 / -2.1% 0.46 / 0.45 / +3.4%
clickbench_q30/datafusion:vortex-file-compressed 57604924 / 57650175 / -0.1% 104482918 / 108930612 / -4.1% 0.55 / 0.53 / +4.2%
clickbench_q31/datafusion:vortex-file-compressed 65780786 / 67793026 / -3.0% 151973790 / 153714180 / -1.1% 0.43 / 0.44 / -1.9%
clickbench_q32/datafusion:vortex-file-compressed 286239169 / 288644032 / -0.8% 379428075 / 391828553 / -3.2% 0.75 / 0.74 / +2.4%
clickbench_q33/datafusion:vortex-file-compressed 318725164 / 320609870 / -0.6% 413686843 / 427342547 / -3.2% 0.77 / 0.75 / +2.7%
clickbench_q34/datafusion:vortex-file-compressed 317525946 / 319377776 / -0.6% 417669717 / 418909519 / -0.3% 0.76 / 0.76 / -0.3%
clickbench_q35/datafusion:vortex-file-compressed 55743383 / 55197768 / +1.0% 91240167 / 90080396 / +1.3% 0.61 / 0.61 / -0.3%
clickbench_q36/datafusion:vortex-file-compressed 37520074 / 37367441 / +0.4% 64964825 / 65392519 / -0.7% 0.58 / 0.57 / +1.1%
clickbench_q37/datafusion:vortex-file-compressed 21924420 / 21896678 / +0.1% 48242052 / 48368288 / -0.3% 0.45 / 0.45 / +0.4%
clickbench_q38/datafusion:vortex-file-compressed 11891182 / 11694756 / +1.7% 39983273 / 40000035 / -0.0% 0.30 / 0.29 / +1.7%
clickbench_q39/datafusion:vortex-file-compressed 77904634 / 77638046 / +0.3% 111567580 / 110844802 / +0.7% 0.70 / 0.70 / -0.3%
clickbench_q40/datafusion:vortex-file-compressed 11349894 / 11104250 / +2.2% 38123804 / 37516031 / +1.6% 0.30 / 0.30 / +0.6%
clickbench_q41/datafusion:vortex-file-compressed 10746372 / 10684592 / +0.6% 36370716 / 35955665 / +1.2% 0.30 / 0.30 / -0.6%
clickbench_q42/datafusion:vortex-file-compressed 10620936 / 11052988 / -3.9% 36671702 / 36421968 / +0.7% 0.29 / 0.30 / -4.6%
datafusion / parquet / ns (0.994x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
clickbench_q00/datafusion:parquet 1268284 / 1253978 / +1.1% 50882526 / 51070083 / -0.4% 0.02 / 0.02 / +1.5%
clickbench_q01/datafusion:parquet 16287415 / 16001286 / +1.8% 72859266 / 73865020 / -1.4% 0.22 / 0.22 / +3.2%
clickbench_q02/datafusion:parquet 18679840 / 19313344 / -3.3% 82464107 / 80365040 / +2.6% 0.23 / 0.24 / -5.7%
clickbench_q03/datafusion:parquet 16836500 / 17204936 / -2.1% 83188817 / 80962081 / +2.8% 0.20 / 0.21 / -4.8%
clickbench_q04/datafusion:parquet 62252643 / 62535487 / -0.5% 127666630 / 124742286 / +2.3% 0.49 / 0.50 / -2.7%
clickbench_q05/datafusion:parquet 88325201 / 87995028 / +0.4% 159996413 / 160052326 / -0.0% 0.55 / 0.55 / +0.4%
clickbench_q06/datafusion:parquet 1300870 / 1285248 / +1.2% 50987041 / 50118233 / +1.7% 0.03 / 0.03 / -0.5%
clickbench_q07/datafusion:parquet 16652089 / 16962812 / -1.8% 67862931 / 68012807 / -0.2% 0.25 / 0.25 / -1.6%
clickbench_q08/datafusion:parquet 84922532 / 86004940 / -1.3% 166341808 / 162557590 / +2.3% 0.51 / 0.53 / -3.5%
clickbench_q09/datafusion:parquet 188825686 / 189220114 / -0.2% 276257412 / 265396654 / +4.1% 0.68 / 0.71 / -4.1%
clickbench_q10/datafusion:parquet 36723390 / 36977369 / -0.7% 102972333 / 101980767 / +1.0% 0.36 / 0.36 / -1.6%
clickbench_q11/datafusion:parquet 42614242 / 42919521 / -0.7% 113284403 / 111759799 / +1.4% 0.38 / 0.38 / -2.0%
clickbench_q12/datafusion:parquet 94634544 / 95408308 / -0.8% 163608896 / 164379422 / -0.5% 0.58 / 0.58 / -0.3%
clickbench_q13/datafusion:parquet 146819808 / 148886972 / -1.4% 229178392 / 227207886 / +0.9% 0.64 / 0.66 / -2.2%
clickbench_q14/datafusion:parquet 101250752 / 101473982 / -0.2% 174678287 / 173272347 / +0.8% 0.58 / 0.59 / -1.0%
clickbench_q15/datafusion:parquet 71557254 / 70604414 / +1.3% 138182510 / 131741062 / +4.9% 0.52 / 0.54 / -3.4%
clickbench_q16/datafusion:parquet 156451026 / 156500464 / -0.0% 235160976 / 237592083 / -1.0% 0.67 / 0.66 / +1.0%
clickbench_q17/datafusion:parquet 156694204 / 156087693 / +0.4% 235970437 / 237996379 / -0.9% 0.66 / 0.66 / +1.3%
clickbench_q18/datafusion:parquet 312232789 / 308928661 / +1.1% 416729347 / 422772746 / -1.4% 0.75 / 0.73 / +2.5%
clickbench_q19/datafusion:parquet 19151710 / 19176332 / -0.1% 76853719 / 77162837 / -0.4% 0.25 / 0.25 / +0.3%
clickbench_q20/datafusion:parquet 177828986 / 178482614 / -0.4% 285157685 / 280657834 / +1.6% 0.62 / 0.64 / -1.9%
clickbench_q21/datafusion:parquet 171666807 / 175119702 / -2.0% 300586750 / 300961775 / -0.1% 0.57 / 0.58 / -1.8%
clickbench_q22/datafusion:parquet 258684546 / 261557145 / -1.1% 425104079 / 429921012 / -1.1% 0.61 / 0.61 / +0.0%
clickbench_q23/datafusion:parquet 1008368063 / 1009086440 / -0.1% 1203904610 / 1218589573 / -1.2% 0.84 / 0.83 / +1.1%
clickbench_q24/datafusion:parquet 28990420 / 29748389 / -2.5% 89605947 / 89405958 / +0.2% 0.32 / 0.33 / -2.8%
clickbench_q25/datafusion:parquet 36241602 / 36886880 / -1.7% 102597381 / 102788329 / -0.2% 0.35 / 0.36 / -1.6%
clickbench_q26/datafusion:parquet 29821966 / 30452891 / -2.1% 88265906 / 90123702 / -2.1% 0.34 / 0.34 / -0.0%
clickbench_q27/datafusion:parquet 190511120 / 193338084 / -1.5% 290940762 / 297193685 / -2.1% 0.65 / 0.65 / +0.7%
clickbench_q28/datafusion:parquet 615605066 / 620037760 / -0.7% 704071467 / 707915517 / -0.5% 0.87 / 0.88 / -0.2%
clickbench_q29/datafusion:parquet 28704234 / 28969171 / -0.9% 90580745 / 90649284 / -0.1% 0.32 / 0.32 / -0.8%
clickbench_q30/datafusion:parquet 90615514 / 91789734 / -1.3% 174651228 / 173497366 / +0.7% 0.52 / 0.53 / -1.9%
clickbench_q31/datafusion:parquet 102535415 / 102789277 / -0.2% 204968003 / 197970932 / +3.5% 0.50 / 0.52 / -3.7%
clickbench_q32/datafusion:parquet 309244240 / 310018836 / -0.2% 420673060 / 432955253 / -2.8% 0.74 / 0.72 / +2.7%
clickbench_q33/datafusion:parquet 377467852 / 378390285 / -0.2% 474401100 / 478744919 / -0.9% 0.80 / 0.79 / +0.7%
clickbench_q34/datafusion:parquet 376406673 / 379447670 / -0.8% 477160260 / 484818964 / -1.6% 0.79 / 0.78 / +0.8%
clickbench_q35/datafusion:parquet 65139170 / 63527172 / +2.5% 122932097 / 126279210 / -2.7% 0.53 / 0.50 / +5.3%
clickbench_q36/datafusion:parquet 73339674 / 73459316 / -0.2% 135972239 / 135267962 / +0.5% 0.54 / 0.54 / -0.7%
clickbench_q37/datafusion:parquet 35281088 / 35504100 / -0.6% 91012874 / 92586204 / -1.7% 0.39 / 0.38 / +1.1%
clickbench_q38/datafusion:parquet 46888180 / 47666606 / -1.6% 109260567 / 110007885 / -0.7% 0.43 / 0.43 / -1.0%
clickbench_q39/datafusion:parquet 143543019 / 143325492 / +0.2% 212611585 / 215368185 / -1.3% 0.68 / 0.67 / +1.5%
clickbench_q40/datafusion:parquet 19781739 / 20218712 / -2.2% 77911215 / 79247199 / -1.7% 0.25 / 0.26 / -0.5%
clickbench_q41/datafusion:parquet 18437312 / 18665490 / -1.2% 74762397 / 75999552 / -1.6% 0.25 / 0.25 / +0.4%
clickbench_q42/datafusion:parquet 19194405 / 19457247 / -1.4% 75083269 / 75763974 / -0.9% 0.26 / 0.26 / -0.5%
duckdb / vortex-file-compressed / ns (0.992x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
clickbench_q00/duckdb:vortex-file-compressed 2431650 / 2473686 / -1.7% 25256696 / 25641112 / -1.5% 0.10 / 0.10 / -0.2%
clickbench_q01/duckdb:vortex-file-compressed 7601330 / 7611955 / -0.1% 29362444 / 30157460 / -2.6% 0.26 / 0.25 / +2.6%
clickbench_q02/duckdb:vortex-file-compressed 8382464 / 8320431 / +0.7% 40062040 / 36188808 / +10.7% 🔴 0.21 / 0.23 / -9.0%
clickbench_q03/duckdb:vortex-file-compressed 16216172 / 16123425 / +0.6% 61835256 / 60601006 / +2.0% 0.26 / 0.27 / -1.4%
clickbench_q04/duckdb:vortex-file-compressed 56895075 / 58327280 / -2.5% 99355695 / 102164949 / -2.7% 0.57 / 0.57 / +0.3%
clickbench_q05/duckdb:vortex-file-compressed 65759037 / 65073504 / +1.1% 101118633 / 95638431 / +5.7% 0.65 / 0.68 / -4.4%
clickbench_q06/duckdb:vortex-file-compressed 2744960 / 2745149 / -0.0% 29234001 / 33337882 / -12.3% 🟢 0.09 / 0.08 / +14.0%
clickbench_q07/duckdb:vortex-file-compressed 8793659 / 8903376 / -1.2% 29997128 / 32661695 / -8.2% 0.29 / 0.27 / +7.5%
clickbench_q08/duckdb:vortex-file-compressed 68829144 / 68774498 / +0.1% 115554928 / 116793085 / -1.1% 0.60 / 0.59 / +1.2%
clickbench_q09/duckdb:vortex-file-compressed 88915942 / 89691031 / -0.9% 136573079 / 138135714 / -1.1% 0.65 / 0.65 / +0.3%
clickbench_q10/duckdb:vortex-file-compressed 27433155 / 27774694 / -1.2% 71837361 / 73410011 / -2.1% 0.38 / 0.38 / +0.9%
clickbench_q11/duckdb:vortex-file-compressed 29718556 / 29951371 / -0.8% 74954839 / 75434535 / -0.6% 0.40 / 0.40 / -0.1%
clickbench_q12/duckdb:vortex-file-compressed 70727765 / 71791413 / -1.5% 102033935 / 101998086 / +0.0% 0.69 / 0.70 / -1.5%
clickbench_q13/duckdb:vortex-file-compressed 129268512 / 130243302 / -0.7% 169121329 / 171518396 / -1.4% 0.76 / 0.76 / +0.7%
clickbench_q14/duckdb:vortex-file-compressed 75801270 / 76517858 / -0.9% 106421608 / 105806229 / +0.6% 0.71 / 0.72 / -1.5%
clickbench_q15/duckdb:vortex-file-compressed 76712565 / 77428818 / -0.9% 118842129 / 116171970 / +2.3% 0.65 / 0.67 / -3.2%
clickbench_q16/duckdb:vortex-file-compressed 140182210 / 140817846 / -0.5% 184628084 / 187034386 / -1.3% 0.76 / 0.75 / +0.8%
clickbench_q17/duckdb:vortex-file-compressed 143548953 / 143503642 / +0.0% 187339728 / 180996517 / +3.5% 0.77 / 0.79 / -3.4%
clickbench_q18/duckdb:vortex-file-compressed 264890176 / 259813888 / +2.0% 325900310 / 327416375 / -0.5% 0.81 / 0.79 / +2.4%
clickbench_q19/duckdb:vortex-file-compressed 9183268 / 9322268 / -1.5% 44446540 / 46185175 / -3.8% 0.21 / 0.20 / +2.4%
clickbench_q20/duckdb:vortex-file-compressed 65633760 / 66135222 / -0.8% 173858353 / 176566155 / -1.5% 0.38 / 0.37 / +0.8%
clickbench_q21/duckdb:vortex-file-compressed 97577814 / 99385166 / -1.8% 279651925 / 283471200 / -1.3% 0.35 / 0.35 / -0.5%
clickbench_q22/duckdb:vortex-file-compressed 177322574 / 177169149 / +0.1% 436656327 / 442764855 / -1.4% 0.41 / 0.40 / +1.5%
clickbench_q23/duckdb:vortex-file-compressed 35334294 / 35823536 / -1.4% 94164697 / 91055304 / +3.4% 0.38 / 0.39 / -4.6%
clickbench_q24/duckdb:vortex-file-compressed 14715672 / 14829160 / -0.8% 40074480 / 41006563 / -2.3% 0.37 / 0.36 / +1.5%
clickbench_q25/duckdb:vortex-file-compressed 18956072 / 19130250 / -0.9% 55426813 / 54855838 / +1.0% 0.34 / 0.35 / -1.9%
clickbench_q26/duckdb:vortex-file-compressed 11440372 / 11709151 / -2.3% 39188643 / 38067292 / +2.9% 0.29 / 0.31 / -5.1%
clickbench_q27/duckdb:vortex-file-compressed 54678886 / 55375238 / -1.3% 223507209 / 228375116 / -2.1% 0.24 / 0.24 / +0.9%
clickbench_q28/duckdb:vortex-file-compressed 453700632 / 451705399 / +0.4% 527032266 / 524329649 / +0.5% 0.86 / 0.86 / -0.1%
clickbench_q29/duckdb:vortex-file-compressed 18162461 / 18569736 / -2.2% 49151786 / 45930727 / +7.0% 0.37 / 0.40 / -8.6%
clickbench_q30/duckdb:vortex-file-compressed 59114828 / 60649438 / -2.5% 113635360 / 114083074 / -0.4% 0.52 / 0.53 / -2.1%
clickbench_q31/duckdb:vortex-file-compressed 110570178 / 114332830 / -3.3% 200563454 / 179105668 / +12.0% 🔴 0.55 / 0.64 / -13.6%
clickbench_q32/duckdb:vortex-file-compressed 381331598 / 374520922 / +1.8% 418294883 / 411681052 / +1.6% 0.91 / 0.91 / +0.2%
clickbench_q33/duckdb:vortex-file-compressed 348182406 / 348384500 / -0.1% 452846864 / 455141387 / -0.5% 0.77 / 0.77 / +0.4%
clickbench_q34/duckdb:vortex-file-compressed 362974781 / 368452730 / -1.5% 468055704 / 472667423 / -1.0% 0.78 / 0.78 / -0.5%
clickbench_q35/duckdb:vortex-file-compressed 57644898 / 58682670 / -1.8% 94020227 / 96284674 / -2.4% 0.61 / 0.61 / +0.6%
clickbench_q36/duckdb:vortex-file-compressed 12563067 / 12338751 / +1.8% 34171586 / 34262539 / -0.3% 0.37 / 0.36 / +2.1%
clickbench_q37/duckdb:vortex-file-compressed 8611667 / 8753183 / -1.6% 30766483 / 30762892 / +0.0% 0.28 / 0.28 / -1.6%
clickbench_q38/duckdb:vortex-file-compressed 9273860 / 9137472 / +1.5% 33581209 / 31828746 / +5.5% 0.28 / 0.29 / -3.8%
clickbench_q39/duckdb:vortex-file-compressed 20600093 / 20703902 / -0.5% 42909098 / 43783996 / -2.0% 0.48 / 0.47 / +1.5%
clickbench_q40/duckdb:vortex-file-compressed 7533384 / 7791591 / -3.3% 30346857 / 31038524 / -2.2% 0.25 / 0.25 / -1.1%
clickbench_q41/duckdb:vortex-file-compressed 8305154 / 8373800 / -0.8% 31127906 / 30679660 / +1.5% 0.27 / 0.27 / -2.2%
clickbench_q42/duckdb:vortex-file-compressed 7454471 / 7588680 / -1.8% 29737109 / 30317986 / -1.9% 0.25 / 0.25 / +0.2%
duckdb / parquet / ns (0.991x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
clickbench_q00/duckdb:parquet 12516576 / 12650054 / -1.1% 19069447 / 20273137 / -5.9% 0.66 / 0.62 / +5.2%
clickbench_q01/duckdb:parquet 19299697 / 19809408 / -2.6% 26736147 / 26257577 / +1.8% 0.72 / 0.75 / -4.3%
clickbench_q02/duckdb:parquet 27594951 / 27390572 / +0.7% 38240937 / 37198607 / +2.8% 0.72 / 0.74 / -2.0%
clickbench_q03/duckdb:parquet 26806442 / 26730794 / +0.3% 37931313 / 38768087 / -2.2% 0.71 / 0.69 / +2.5%
clickbench_q04/duckdb:parquet 65784968 / 66184226 / -0.6% 77420527 / 80656303 / -4.0% 0.85 / 0.82 / +3.6%
clickbench_q05/duckdb:parquet 88029658 / 91007850 / -3.3% 107536113 / 109148979 / -1.5% 0.82 / 0.83 / -1.8%
clickbench_q06/duckdb:parquet 26234820 / 25562459 / +2.6% 36263895 / 34065390 / +6.5% 0.72 / 0.75 / -3.6%
clickbench_q07/duckdb:parquet 21196472 / 22205884 / -4.5% 28605173 / 29438201 / -2.8% 0.74 / 0.75 / -1.8%
clickbench_q08/duckdb:parquet 77711977 / 80949642 / -4.0% 97328617 / 95053383 / +2.4% 0.80 / 0.85 / -6.2%
clickbench_q09/duckdb:parquet 104277072 / 106525661 / -2.1% 124654964 / 125075821 / -0.3% 0.84 / 0.85 / -1.8%
clickbench_q10/duckdb:parquet 45701454 / 45409953 / +0.6% 60404030 / 60499553 / -0.2% 0.76 / 0.75 / +0.8%
clickbench_q11/duckdb:parquet 49987188 / 50835093 / -1.7% 70559357 / 66973884 / +5.4% 0.71 / 0.76 / -6.7%
clickbench_q12/duckdb:parquet 99255464 / 99540686 / -0.3% 119080513 / 119225411 / -0.1% 0.83 / 0.83 / -0.2%
clickbench_q13/duckdb:parquet 156190093 / 159564938 / -2.1% 181514708 / 184286331 / -1.5% 0.86 / 0.87 / -0.6%
clickbench_q14/duckdb:parquet 108370971 / 107740879 / +0.6% 131559694 / 130760619 / +0.6% 0.82 / 0.82 / -0.0%
clickbench_q15/duckdb:parquet 92352018 / 94285780 / -2.1% 104637085 / 107428276 / -2.6% 0.88 / 0.88 / +0.6%
clickbench_q16/duckdb:parquet 182501752 / 197607024 / -7.6% 190737575 / 191238549 / -0.3% 0.96 / 1.03 / -7.4%
clickbench_q17/duckdb:parquet 184999540 / 181182310 / +2.1% 192719395 / 203278137 / -5.2% 0.96 / 0.89 / +7.7%
clickbench_q18/duckdb:parquet 317572610 / 314302903 / +1.0% 341314353 / 353583023 / -3.5% 0.93 / 0.89 / +4.7%
clickbench_q19/duckdb:parquet 23283727 / 23914886 / -2.6% 31468311 / 32319404 / -2.6% 0.74 / 0.74 / -0.0%
clickbench_q20/duckdb:parquet 197712297 / 193695783 / +2.1% 245334397 / 242302698 / +1.3% 0.81 / 0.80 / +0.8%
clickbench_q21/duckdb:parquet 237326668 / 245648786 / -3.4% 282553029 / 279351140 / +1.1% 0.84 / 0.88 / -4.5%
clickbench_q22/duckdb:parquet 323416558 / 337148476 / -4.1% 371141898 / 372113452 / -0.3% 0.87 / 0.91 / -3.8%
clickbench_q23/duckdb:parquet 181442237 / 186685502 / -2.8% 249212512 / 256326831 / -2.8% 0.73 / 0.73 / -0.0%
clickbench_q24/duckdb:parquet 35883434 / 36682046 / -2.2% 47703255 / 54262723 / -12.1% 🟢 0.75 / 0.68 / +11.3%
clickbench_q25/duckdb:parquet 46835403 / 46988930 / -0.3% 67291658 / 71447665 / -5.8% 0.70 / 0.66 / +5.8%
clickbench_q26/duckdb:parquet 36597336 / 36955640 / -1.0% 53103674 / 51050191 / +4.0% 0.69 / 0.72 / -4.8%
clickbench_q27/duckdb:parquet 211609853 / 193576787 / +9.3% 243703020 / 242956218 / +0.3% 0.87 / 0.80 / +9.0%
clickbench_q28/duckdb:parquet 855714192 / 843733842 / +1.4% 841705742 / 840858308 / +0.1% 1.02 / 1.00 / +1.3%
clickbench_q29/duckdb:parquet 30881035 / 31183474 / -1.0% 39376511 / 39691605 / -0.8% 0.78 / 0.79 / -0.2%
clickbench_q30/duckdb:parquet 110605952 / 113654239 / -2.7% 141117112 / 141845146 / -0.5% 0.78 / 0.80 / -2.2%
clickbench_q31/duckdb:parquet 163571094 / 166963099 / -2.0% 185020234 / 212836273 / -13.1% 🟢 0.88 / 0.78 / +12.7%
clickbench_q32/duckdb:parquet 406488732 / 405030908 / +0.4% 431982113 / 417974618 / +3.4% 0.94 / 0.97 / -2.9%
clickbench_q33/duckdb:parquet 483882566 / 477225110 / +1.4% 464253488 / 488382159 / -4.9% 1.04 / 0.98 / +6.7%
clickbench_q34/duckdb:parquet 479874666 / 479203214 / +0.1% 469736779 / 467016979 / +0.6% 1.02 / 1.03 / -0.4%
clickbench_q35/duckdb:parquet 66398958 / 67239655 / -1.3% 80717217 / 80118372 / +0.7% 0.82 / 0.84 / -2.0%
clickbench_q36/duckdb:parquet 37148591 / 37914602 / -2.0% 45965642 / 45883790 / +0.2% 0.81 / 0.83 / -2.2%
clickbench_q37/duckdb:parquet 28206296 / 28606758 / -1.4% 37800437 / 37711912 / +0.2% 0.75 / 0.76 / -1.6%
clickbench_q38/duckdb:parquet 31011624 / 30529641 / +1.6% 39041096 / 40054896 / -2.5% 0.79 / 0.76 / +4.2%
clickbench_q39/duckdb:parquet 62624586 / 63057700 / -0.7% 70918791 / 72923579 / -2.7% 0.88 / 0.86 / +2.1%
clickbench_q40/duckdb:parquet 18237954 / 18709288 / -2.5% 25804026 / 27059683 / -4.6% 0.71 / 0.69 / +2.2%
clickbench_q41/duckdb:parquet 18659614 / 18954402 / -1.6% 26263083 / 27031776 / -2.8% 0.71 / 0.70 / +1.3%
clickbench_q42/duckdb:parquet 18229009 / 18036739 / +1.1% 28012880 / 27671709 / +1.2% 0.65 / 0.65 / -0.2%

No file size changes detected.

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks: TPC-DS SF=1 on NVME 📖

Commits: PR da8a7c8a vs base 31027fc2
Verdict: No clear signal (low confidence)
Attributed Vortex impact: +0.5%
Engines: DataFusion No clear signal (+1.0%, low confidence) · DuckDB No clear signal (-0.1%, low confidence)
Vortex (geomean): hot 0.999x ➖ · cold 1.003x ➖
Parquet (geomean): hot 0.994x ➖ · cold 1.001x ➖
Shifts: Parquet (control) -0.6% · Median polish -0.5%

How to read Verdict and Engines
  • Verdict: Overall PR-level signal after subtracting baseline drift estimated from Parquet control rows. It can be Likely improvement, Likely regression, or No clear signal.
  • Engines: Per-engine attribution. DataFusion is compared against DataFusion/Parquet controls; DuckDB is compared against DuckDB/Parquet controls. This answers whether each engine improved or regressed independently.
  • Confidence: Based on directional consistency, share of rows above the noise floor, and control-run noise.
  • Hot vs cold: Every measurement is run several times. The first run is reported as the cold run, and the median of the runs after it is reported as the hot run. The verdict and significance use hot runs; each target's geomean reports hot and cold beside each other where the individual runs were recorded and hot alone where they were not, the cold column shows first-run cost per row, and hot/cold is how much of each run the warm path saves. Rows whose results predate per-run reporting show only one value, taken from the value the runner reported.
  • Table cells: Each cell reads PR / base / %diff. The hot and cold columns mark a change as 🔴 slower or 🟢 faster once it clears this suite's threshold; anything smaller is noise here and is left unmarked, as is hot/cold, because a shift in the warm-up ratio is not a win or a loss by itself.

datafusion / vortex-file-compressed / ns (1.005x ➖, 0↑ 1↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpcds_q01/datafusion:vortex-file-compressed 24716222 / 24422950 / +1.2% 42644690 / 41713721 / +2.2% 0.58 / 0.59 / -1.0%
tpcds_q02/datafusion:vortex-file-compressed 47359232 / 47249193 / +0.2% 65352114 / 65210228 / +0.2% 0.72 / 0.72 / +0.0%
tpcds_q03/datafusion:vortex-file-compressed 12250054 / 12259355 / -0.1% 26952047 / 27469091 / -1.9% 0.45 / 0.45 / +1.8%
tpcds_q04/datafusion:vortex-file-compressed 121709147 / 123073218 / -1.1% 155003686 / 152160996 / +1.9% 0.79 / 0.81 / -2.9%
tpcds_q05/datafusion:vortex-file-compressed 59728257 / 59858944 / -0.2% 80807882 / 80358024 / +0.6% 0.74 / 0.74 / -0.8%
tpcds_q06/datafusion:vortex-file-compressed 22871700 / 23056359 / -0.8% 44745799 / 41776705 / +7.1% 0.51 / 0.55 / -7.4%
tpcds_q07/datafusion:vortex-file-compressed 31691746 / 31123659 / +1.8% 52632193 / 52221538 / +0.8% 0.60 / 0.60 / +1.0%
tpcds_q08/datafusion:vortex-file-compressed 24737110 / 24761588 / -0.1% 41274175 / 40866146 / +1.0% 0.60 / 0.61 / -1.1%
tpcds_q09/datafusion:vortex-file-compressed 18266809 / 18211640 / +0.3% 35999576 / 33007998 / +9.1% 0.51 / 0.55 / -8.0%
tpcds_q10/datafusion:vortex-file-compressed 26927330 / 27274416 / -1.3% 47717668 / 46161892 / +3.4% 0.56 / 0.59 / -4.5%
tpcds_q11/datafusion:vortex-file-compressed 64831090 / 63905464 / +1.4% 90464656 / 91459183 / -1.1% 0.72 / 0.70 / +2.6%
tpcds_q12/datafusion:vortex-file-compressed 16689942 / 16902012 / -1.3% 31408803 / 31785413 / -1.2% 0.53 / 0.53 / -0.1%
tpcds_q13/datafusion:vortex-file-compressed 32447899 / 31875405 / +1.8% 54199388 / 54636491 / -0.8% 0.60 / 0.58 / +2.6%
tpcds_q14/datafusion:vortex-file-compressed 497982214 / 495254547 / +0.6% 555960113 / 546774120 / +1.7% 0.90 / 0.91 / -1.1%
tpcds_q15/datafusion:vortex-file-compressed 16062306 / 15420112 / +4.2% 33661749 / 33932883 / -0.8% 0.48 / 0.45 / +5.0%
tpcds_q16/datafusion:vortex-file-compressed 19754314 / 20087974 / -1.7% 38683695 / 37975694 / +1.9% 0.51 / 0.53 / -3.5%
tpcds_q17/datafusion:vortex-file-compressed 55317136 / 59171354 / -6.5% 74266786 / 74649401 / -0.5% 0.74 / 0.79 / -6.0%
tpcds_q18/datafusion:vortex-file-compressed 68258494 / 68902366 / -0.9% 90026172 / 90277737 / -0.3% 0.76 / 0.76 / -0.7%
tpcds_q19/datafusion:vortex-file-compressed 17315036 / 17092177 / +1.3% 38290714 / 39162658 / -2.2% 0.45 / 0.44 / +3.6%
tpcds_q20/datafusion:vortex-file-compressed 17879881 / 17636308 / +1.4% 33537439 / 34642134 / -3.2% 0.53 / 0.51 / +4.7%
tpcds_q21/datafusion:vortex-file-compressed 16195308 / 16451934 / -1.6% 38052801 / 38284480 / -0.6% 0.43 / 0.43 / -1.0%
tpcds_q22/datafusion:vortex-file-compressed 58135660 / 57363202 / +1.3% 79735432 / 80177293 / -0.6% 0.73 / 0.72 / +1.9%
tpcds_q23/datafusion:vortex-file-compressed 73518464 / 71131666 / +3.4% 100315287 / 105854192 / -5.2% 0.73 / 0.67 / +9.1%
tpcds_q24/datafusion:vortex-file-compressed 68065076 / 67904586 / +0.2% 89730861 / 90094037 / -0.4% 0.76 / 0.75 / +0.6%
tpcds_q25/datafusion:vortex-file-compressed 50228750 / 53333052 / -5.8% 77480020 / 76138784 / +1.8% 0.65 / 0.70 / -7.5%
tpcds_q26/datafusion:vortex-file-compressed 30625956 / 30640026 / -0.0% 48850559 / 48054573 / +1.7% 0.63 / 0.64 / -1.7%
tpcds_q27/datafusion:vortex-file-compressed 61860180 / 63534224 / -2.6% 87478282 / 80912224 / +8.1% 0.71 / 0.79 / -9.9%
tpcds_q28/datafusion:vortex-file-compressed 18176367 / 18333928 / -0.9% 36092030 / 34797932 / +3.7% 0.50 / 0.53 / -4.4%
tpcds_q29/datafusion:vortex-file-compressed 58977137 / 51117640 / +15.4% 🔴 79788691 / 71963254 / +10.9% 🔴 0.74 / 0.71 / +4.1%
tpcds_q30/datafusion:vortex-file-compressed 27115280 / 27094850 / +0.1% 44870013 / 43720666 / +2.6% 0.60 / 0.62 / -2.5%
tpcds_q31/datafusion:vortex-file-compressed 58498760 / 58192894 / +0.5% 82406807 / 79978380 / +3.0% 0.71 / 0.73 / -2.4%
tpcds_q32/datafusion:vortex-file-compressed 13499190 / 13494499 / +0.0% 30547960 / 29672834 / +2.9% 0.44 / 0.45 / -2.8%
tpcds_q33/datafusion:vortex-file-compressed 28475574 / 28132704 / +1.2% 48341097 / 47071656 / +2.7% 0.59 / 0.60 / -1.4%
tpcds_q34/datafusion:vortex-file-compressed 17672546 / 17543160 / +0.7% 33459986 / 34708690 / -3.6% 0.53 / 0.51 / +4.5%
tpcds_q35/datafusion:vortex-file-compressed 34424458 / 34127384 / +0.9% 57188915 / 55315562 / +3.4% 0.60 / 0.62 / -2.4%
tpcds_q36/datafusion:vortex-file-compressed 46802712 / 47413962 / -1.3% 72247259 / 71102774 / +1.6% 0.65 / 0.67 / -2.9%
tpcds_q37/datafusion:vortex-file-compressed 13297728 / 12941790 / +2.8% 32967869 / 32568213 / +1.2% 0.40 / 0.40 / +1.5%
tpcds_q38/datafusion:vortex-file-compressed 30709872 / 29790266 / +3.1% 51000244 / 49089690 / +3.9% 0.60 / 0.61 / -0.8%
tpcds_q39/datafusion:vortex-file-compressed 62712220 / 61958185 / +1.2% 87712544 / 88244056 / -0.6% 0.71 / 0.70 / +1.8%
tpcds_q40/datafusion:vortex-file-compressed 24920232 / 24117339 / +3.3% 43058527 / 42841029 / +0.5% 0.58 / 0.56 / +2.8%
tpcds_q41/datafusion:vortex-file-compressed 17371216 / 17009686 / +2.1% 30470298 / 30116323 / +1.2% 0.57 / 0.56 / +0.9%
tpcds_q42/datafusion:vortex-file-compressed 11561326 / 11194194 / +3.3% 25484435 / 25800524 / -1.2% 0.45 / 0.43 / +4.6%
tpcds_q43/datafusion:vortex-file-compressed 12942394 / 12851160 / +0.7% 30391256 / 29176165 / +4.2% 0.43 / 0.44 / -3.3%
tpcds_q44/datafusion:vortex-file-compressed 26269090 / 25861536 / +1.6% 47467299 / 48172347 / -1.5% 0.55 / 0.54 / +3.1%
tpcds_q45/datafusion:vortex-file-compressed 18850768 / 18524946 / +1.8% 36157537 / 37165720 / -2.7% 0.52 / 0.50 / +4.6%
tpcds_q46/datafusion:vortex-file-compressed 23286185 / 22879180 / +1.8% 44388183 / 45223748 / -1.8% 0.52 / 0.51 / +3.7%
tpcds_q47/datafusion:vortex-file-compressed 77479972 / 77956142 / -0.6% 106043505 / 105204058 / +0.8% 0.73 / 0.74 / -1.4%
tpcds_q48/datafusion:vortex-file-compressed 29558118 / 29227950 / +1.1% 51802771 / 50087705 / +3.4% 0.57 / 0.58 / -2.2%
tpcds_q49/datafusion:vortex-file-compressed 58078756 / 59353887 / -2.1% 79494955 / 78029772 / +1.9% 0.73 / 0.76 / -4.0%
tpcds_q50/datafusion:vortex-file-compressed 32542588 / 33840671 / -3.8% 53530188 / 51289595 / +4.4% 0.61 / 0.66 / -7.9%
tpcds_q51/datafusion:vortex-file-compressed 68009820 / 67295610 / +1.1% 90095041 / 88284880 / +2.1% 0.75 / 0.76 / -1.0%
tpcds_q52/datafusion:vortex-file-compressed 11770732 / 11874957 / -0.9% 26839760 / 26710267 / +0.5% 0.44 / 0.44 / -1.4%
tpcds_q53/datafusion:vortex-file-compressed 17488818 / 17981568 / -2.7% 36580133 / 37147095 / -1.5% 0.48 / 0.48 / -1.2%
tpcds_q54/datafusion:vortex-file-compressed 33122904 / 33014860 / +0.3% 59491296 / 57829652 / +2.9% 0.56 / 0.57 / -2.5%
tpcds_q55/datafusion:vortex-file-compressed 11522577 / 11171222 / +3.1% 26752620 / 25574530 / +4.6% 0.43 / 0.44 / -1.4%
tpcds_q56/datafusion:vortex-file-compressed 26968887 / 26417084 / +2.1% 47056889 / 47619460 / -1.2% 0.57 / 0.55 / +3.3%
tpcds_q57/datafusion:vortex-file-compressed 78199378 / 77382479 / +1.1% 103090365 / 100025981 / +3.1% 0.76 / 0.77 / -1.9%
tpcds_q58/datafusion:vortex-file-compressed 41558603 / 41043717 / +1.3% 63123615 / 62722170 / +0.6% 0.66 / 0.65 / +0.6%
tpcds_q59/datafusion:vortex-file-compressed 31369170 / 31111953 / +0.8% 50262953 / 50870624 / -1.2% 0.62 / 0.61 / +2.0%
tpcds_q60/datafusion:vortex-file-compressed 26978438 / 27227950 / -0.9% 47020306 / 45943148 / +2.3% 0.57 / 0.59 / -3.2%
tpcds_q61/datafusion:vortex-file-compressed 23615549 / 23187124 / +1.8% 43752698 / 42219484 / +3.6% 0.54 / 0.55 / -1.7%
tpcds_q62/datafusion:vortex-file-compressed 18123289 / 17865185 / +1.4% 33935541 / 33075175 / +2.6% 0.53 / 0.54 / -1.1%
tpcds_q63/datafusion:vortex-file-compressed 18004328 / 17696958 / +1.7% 37242129 / 37729044 / -1.3% 0.48 / 0.47 / +3.1%
tpcds_q64/datafusion:vortex-file-compressed 224740678 / 225325008 / -0.3% 259578589 / 257206818 / +0.9% 0.87 / 0.88 / -1.2%
tpcds_q65/datafusion:vortex-file-compressed 75942699 / 74155888 / +2.4% 93654315 / 93507785 / +0.2% 0.81 / 0.79 / +2.2%
tpcds_q66/datafusion:vortex-file-compressed 52674644 / 52179442 / +0.9% 71722585 / 70572058 / +1.6% 0.73 / 0.74 / -0.7%
tpcds_q67/datafusion:vortex-file-compressed 58078136 / 58509098 / -0.7% 87393425 / 86280391 / +1.3% 0.66 / 0.68 / -2.0%
tpcds_q68/datafusion:vortex-file-compressed 23157996 / 22531870 / +2.8% 43871603 / 43740568 / +0.3% 0.53 / 0.52 / +2.5%
tpcds_q69/datafusion:vortex-file-compressed 27929009 / 27859934 / +0.2% 48929284 / 47785128 / +2.4% 0.57 / 0.58 / -2.1%
tpcds_q70/datafusion:vortex-file-compressed 23083156 / 23744342 / -2.8% 45291790 / 43206892 / +4.8% 0.51 / 0.55 / -7.3%
tpcds_q71/datafusion:vortex-file-compressed 18860680 / 19730928 / -4.4% 39749935 / 38161372 / +4.2% 0.47 / 0.52 / -8.2%
tpcds_q72/datafusion:vortex-file-compressed 346323724 / 363326532 / -4.7% 400385919 / 377357859 / +6.1% 0.86 / 0.96 / -10.2%
tpcds_q73/datafusion:vortex-file-compressed 16297931 / 16227445 / +0.4% 34478109 / 36520074 / -5.6% 0.47 / 0.44 / +6.4%
tpcds_q74/datafusion:vortex-file-compressed 46059708 / 46262381 / -0.4% 71399366 / 70102268 / +1.9% 0.65 / 0.66 / -2.2%
tpcds_q75/datafusion:vortex-file-compressed 137896464 / 138025502 / -0.1% 157302228 / 160998509 / -2.3% 0.88 / 0.86 / +2.3%
tpcds_q76/datafusion:vortex-file-compressed 27522458 / 26231817 / +4.9% 43691864 / 43942565 / -0.6% 0.63 / 0.60 / +5.5%
tpcds_q77/datafusion:vortex-file-compressed 45670032 / 46538385 / -1.9% 67287867 / 63390677 / +6.1% 0.68 / 0.73 / -7.5%
tpcds_q78/datafusion:vortex-file-compressed 68014445 / 68747413 / -1.1% 95977661 / 94445487 / +1.6% 0.71 / 0.73 / -2.6%
tpcds_q79/datafusion:vortex-file-compressed 19865698 / 19483699 / +2.0% 39844608 / 41799781 / -4.7% 0.50 / 0.47 / +7.0%
tpcds_q80/datafusion:vortex-file-compressed 74843712 / 74639438 / +0.3% 102898428 / 102819886 / +0.1% 0.73 / 0.73 / +0.2%
tpcds_q81/datafusion:vortex-file-compressed 27988844 / 27068568 / +3.4% 43732309 / 43682226 / +0.1% 0.64 / 0.62 / +3.3%
tpcds_q82/datafusion:vortex-file-compressed 12521616 / 12997562 / -3.7% 33682811 / 34116796 / -1.3% 0.37 / 0.38 / -2.4%
tpcds_q83/datafusion:vortex-file-compressed 35692714 / 35278853 / +1.2% 54619662 / 51166456 / +6.7% 0.65 / 0.69 / -5.2%
tpcds_q84/datafusion:vortex-file-compressed 12064044 / 11794177 / +2.3% 26675820 / 25396598 / +5.0% 0.45 / 0.46 / -2.6%
tpcds_q85/datafusion:vortex-file-compressed 57503837 / 57925560 / -0.7% 82877138 / 80348889 / +3.1% 0.69 / 0.72 / -3.8%
tpcds_q86/datafusion:vortex-file-compressed 16610660 / 16457530 / +0.9% 31230201 / 32469222 / -3.8% 0.53 / 0.51 / +4.9%
tpcds_q87/datafusion:vortex-file-compressed 30119396 / 29567438 / +1.9% 49951548 / 50905596 / -1.9% 0.60 / 0.58 / +3.8%
tpcds_q88/datafusion:vortex-file-compressed 32250763 / 32104016 / +0.5% 69416222 / 63612905 / +9.1% 0.46 / 0.50 / -7.9%
tpcds_q89/datafusion:vortex-file-compressed 20982158 / 20663336 / +1.5% 39996198 / 39249159 / +1.9% 0.52 / 0.53 / -0.4%
tpcds_q90/datafusion:vortex-file-compressed 10452082 / 10668205 / -2.0% 26258269 / 26904779 / -2.4% 0.40 / 0.40 / +0.4%
tpcds_q91/datafusion:vortex-file-compressed 16101880 / 15822708 / +1.8% 35731458 / 35674979 / +0.2% 0.45 / 0.44 / +1.6%
tpcds_q92/datafusion:vortex-file-compressed 13698268 / 13465226 / +1.7% 30293833 / 29450460 / +2.9% 0.45 / 0.46 / -1.1%
tpcds_q93/datafusion:vortex-file-compressed 22254886 / 22288306 / -0.1% 41344369 / 39311503 / +5.2% 0.54 / 0.57 / -5.1%
tpcds_q94/datafusion:vortex-file-compressed 19541344 / 18989217 / +2.9% 37559687 / 35884910 / +4.7% 0.52 / 0.53 / -1.7%
tpcds_q95/datafusion:vortex-file-compressed 45319710 / 45085632 / +0.5% 65134074 / 65843865 / -1.1% 0.70 / 0.68 / +1.6%
tpcds_q96/datafusion:vortex-file-compressed 8701148 / 8687084 / +0.2% 24461655 / 24920610 / -1.8% 0.36 / 0.35 / +2.0%
tpcds_q97/datafusion:vortex-file-compressed 20951752 / 21076740 / -0.6% 41693563 / 40801915 / +2.2% 0.50 / 0.52 / -2.7%
tpcds_q98/datafusion:vortex-file-compressed 17246014 / 17153452 / +0.5% 35330948 / 35728656 / -1.1% 0.49 / 0.48 / +1.7%
tpcds_q99/datafusion:vortex-file-compressed 20888712 / 20814182 / +0.4% 35618957 / 35554835 / +0.2% 0.59 / 0.59 / +0.2%
datafusion / parquet / ns (0.995x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpcds_q01/datafusion:parquet 43122274 / 43846422 / -1.7% 60709965 / 60005347 / +1.2% 0.71 / 0.73 / -2.8%
tpcds_q02/datafusion:parquet 54731755 / 55757277 / -1.8% 72901520 / 71357306 / +2.2% 0.75 / 0.78 / -3.9%
tpcds_q03/datafusion:parquet 18765100 / 19050948 / -1.5% 30330028 / 32322113 / -6.2% 0.62 / 0.59 / +5.0%
tpcds_q04/datafusion:parquet 181538452 / 180009476 / +0.8% 206122303 / 202731080 / +1.7% 0.88 / 0.89 / -0.8%
tpcds_q05/datafusion:parquet 67359654 / 67452735 / -0.1% 90033825 / 91252454 / -1.3% 0.75 / 0.74 / +1.2%
tpcds_q06/datafusion:parquet 33085440 / 33397300 / -0.9% 48944273 / 48649176 / +0.6% 0.68 / 0.69 / -1.5%
tpcds_q07/datafusion:parquet 46942410 / 46694988 / +0.5% 63351948 / 67932655 / -6.7% 0.74 / 0.69 / +7.8%
tpcds_q08/datafusion:parquet 30794636 / 31199608 / -1.3% 47132560 / 45345275 / +3.9% 0.65 / 0.69 / -5.0%
tpcds_q09/datafusion:parquet 31854138 / 32116022 / -0.8% 37512188 / 44213601 / -15.2% 🟢 0.85 / 0.73 / +16.9%
tpcds_q10/datafusion:parquet 43046291 / 44087352 / -2.4% 60643992 / 55032584 / +10.2% 🔴 0.71 / 0.80 / -11.4%
tpcds_q11/datafusion:parquet 97099779 / 99118944 / -2.0% 120445041 / 115581825 / +4.2% 0.81 / 0.86 / -6.0%
tpcds_q12/datafusion:parquet 23769012 / 23973628 / -0.9% 36189479 / 35973293 / +0.6% 0.66 / 0.67 / -1.4%
tpcds_q13/datafusion:parquet 46967030 / 46483706 / +1.0% 69059319 / 66333368 / +4.1% 0.68 / 0.70 / -2.9%
tpcds_q14/datafusion:parquet 536537559 / 538154738 / -0.3% 582731402 / 588539299 / -1.0% 0.92 / 0.91 / +0.7%
tpcds_q15/datafusion:parquet 23839817 / 23329618 / +2.2% 38328547 / 37781490 / +1.4% 0.62 / 0.62 / +0.7%
tpcds_q16/datafusion:parquet 36897586 / 36544121 / +1.0% 50640818 / 50619896 / +0.0% 0.73 / 0.72 / +0.9%
tpcds_q17/datafusion:parquet 73692464 / 75119042 / -1.9% 96385034 / 96474387 / -0.1% 0.76 / 0.78 / -1.8%
tpcds_q18/datafusion:parquet 69389275 / 66836378 / +3.8% 93468550 / 88630199 / +5.5% 0.74 / 0.75 / -1.6%
tpcds_q19/datafusion:parquet 29144616 / 29729388 / -2.0% 43657411 / 42819515 / +2.0% 0.67 / 0.69 / -3.8%
tpcds_q20/datafusion:parquet 25627355 / 24969518 / +2.6% 37690319 / 38866462 / -3.0% 0.68 / 0.64 / +5.8%
tpcds_q21/datafusion:parquet 20114950 / 20161090 / -0.2% 31776469 / 31800546 / -0.1% 0.63 / 0.63 / -0.2%
tpcds_q22/datafusion:parquet 77650293 / 77142012 / +0.7% 89131932 / 87858154 / +1.4% 0.87 / 0.88 / -0.8%
tpcds_q23/datafusion:parquet 92052668 / 91349462 / +0.8% 111421485 / 113181120 / -1.6% 0.83 / 0.81 / +2.4%
tpcds_q24/datafusion:parquet 90608282 / 92770976 / -2.3% 115712225 / 113350744 / +2.1% 0.78 / 0.82 / -4.3%
tpcds_q25/datafusion:parquet 81672518 / 80229011 / +1.8% 101450449 / 100842256 / +0.6% 0.81 / 0.80 / +1.2%
tpcds_q26/datafusion:parquet 42999488 / 43787389 / -1.8% 60762223 / 57659742 / +5.4% 0.71 / 0.76 / -6.8%
tpcds_q27/datafusion:parquet 75514446 / 75409834 / +0.1% 94205167 / 96101182 / -2.0% 0.80 / 0.78 / +2.2%
tpcds_q28/datafusion:parquet 28417208 / 28846260 / -1.5% 43553068 / 43554917 / -0.0% 0.65 / 0.66 / -1.5%
tpcds_q29/datafusion:parquet 74536804 / 74650711 / -0.2% 97750473 / 95427162 / +2.4% 0.76 / 0.78 / -2.5%
tpcds_q30/datafusion:parquet 46339880 / 47178713 / -1.8% 58928522 / 58551559 / +0.6% 0.79 / 0.81 / -2.4%
tpcds_q31/datafusion:parquet 79937916 / 80818462 / -1.1% 98005770 / 98873811 / -0.9% 0.82 / 0.82 / -0.2%
tpcds_q32/datafusion:parquet 26450072 / 26086708 / +1.4% 41634529 / 39508030 / +5.4% 0.64 / 0.66 / -3.8%
tpcds_q33/datafusion:parquet 36784062 / 38558912 / -4.6% 52610704 / 53023663 / -0.8% 0.70 / 0.73 / -3.9%
tpcds_q34/datafusion:parquet 24522102 / 24739372 / -0.9% 35480188 / 35909965 / -1.2% 0.69 / 0.69 / +0.3%
tpcds_q35/datafusion:parquet 49969137 / 51716168 / -3.4% 66001829 / 64607301 / +2.2% 0.76 / 0.80 / -5.4%
tpcds_q36/datafusion:parquet 50805662 / 53633372 / -5.3% 72959463 / 71365370 / +2.2% 0.70 / 0.75 / -7.3%
tpcds_q37/datafusion:parquet 21333390 / 21059308 / +1.3% 34803289 / 32948046 / +5.6% 0.61 / 0.64 / -4.1%
tpcds_q38/datafusion:parquet 44888200 / 44653446 / +0.5% 63865606 / 60746799 / +5.1% 0.70 / 0.74 / -4.4%
tpcds_q39/datafusion:parquet 67455412 / 67618510 / -0.2% 84404741 / 86536931 / -2.5% 0.80 / 0.78 / +2.3%
tpcds_q40/datafusion:parquet 29811554 / 30076230 / -0.9% 50319519 / 48872359 / +3.0% 0.59 / 0.62 / -3.7%
tpcds_q41/datafusion:parquet 20011630 / 19795827 / +1.1% 31714575 / 30811184 / +2.9% 0.63 / 0.64 / -1.8%
tpcds_q42/datafusion:parquet 18068536 / 18211920 / -0.8% 30298455 / 32111581 / -5.6% 0.60 / 0.57 / +5.1%
tpcds_q43/datafusion:parquet 19488348 / 19268661 / +1.1% 31562175 / 30985079 / +1.9% 0.62 / 0.62 / -0.7%
tpcds_q44/datafusion:parquet 35912020 / 36438808 / -1.4% 49704416 / 51954713 / -4.3% 0.72 / 0.70 / +3.0%
tpcds_q45/datafusion:parquet 28007480 / 27398212 / +2.2% 41115827 / 39109204 / +5.1% 0.68 / 0.70 / -2.8%
tpcds_q46/datafusion:parquet 28895813 / 29286111 / -1.3% 46185459 / 44982114 / +2.7% 0.63 / 0.65 / -3.9%
tpcds_q47/datafusion:parquet 97910254 / 98429680 / -0.5% 119202856 / 123516112 / -3.5% 0.82 / 0.80 / +3.1%
tpcds_q48/datafusion:parquet 42398953 / 41857703 / +1.3% 59890550 / 59999377 / -0.2% 0.71 / 0.70 / +1.5%
tpcds_q49/datafusion:parquet 72253965 / 72155906 / +0.1% 96096368 / 92353355 / +4.1% 0.75 / 0.78 / -3.8%
tpcds_q50/datafusion:parquet 47326836 / 47630214 / -0.6% 70411162 / 66493960 / +5.9% 0.67 / 0.72 / -6.2%
tpcds_q51/datafusion:parquet 75047358 / 75748952 / -0.9% 95827991 / 93780446 / +2.2% 0.78 / 0.81 / -3.0%
tpcds_q52/datafusion:parquet 18400886 / 18440540 / -0.2% 30729799 / 31499026 / -2.4% 0.60 / 0.59 / +2.3%
tpcds_q53/datafusion:parquet 22604204 / 23311745 / -3.0% 39101204 / 38476973 / +1.6% 0.58 / 0.61 / -4.6%
tpcds_q54/datafusion:parquet 53130748 / 52869332 / +0.5% 66883370 / 70753202 / -5.5% 0.79 / 0.75 / +6.3%
tpcds_q55/datafusion:parquet 18255374 / 18285992 / -0.2% 29672866 / 30486470 / -2.7% 0.62 / 0.60 / +2.6%
tpcds_q56/datafusion:parquet 41288987 / 40571934 / +1.8% 55175291 / 54021515 / +2.1% 0.75 / 0.75 / -0.4%
tpcds_q57/datafusion:parquet 101628016 / 103228732 / -1.6% 120959043 / 120073909 / +0.7% 0.84 / 0.86 / -2.3%
tpcds_q58/datafusion:parquet 65596535 / 65899958 / -0.5% 83391260 / 83882670 / -0.6% 0.79 / 0.79 / +0.1%
tpcds_q59/datafusion:parquet 48248306 / 48264130 / -0.0% 66090610 / 64543094 / +2.4% 0.73 / 0.75 / -2.4%
tpcds_q60/datafusion:parquet 40251446 / 39449744 / +2.0% 55313027 / 53105060 / +4.2% 0.73 / 0.74 / -2.0%
tpcds_q61/datafusion:parquet 36155258 / 37940298 / -4.7% 52835194 / 48420637 / +9.1% 0.68 / 0.78 / -12.7%
tpcds_q62/datafusion:parquet 25100457 / 24913400 / +0.8% 37578641 / 37514164 / +0.2% 0.67 / 0.66 / +0.6%
tpcds_q63/datafusion:parquet 22450176 / 22438395 / +0.1% 39179529 / 37774202 / +3.7% 0.57 / 0.59 / -3.5%
tpcds_q64/datafusion:parquet 289152880 / 292243279 / -1.1% 328094674 / 327971890 / +0.0% 0.88 / 0.89 / -1.1%
tpcds_q65/datafusion:parquet 121427228 / 122812174 / -1.1% 132407780 / 140616984 / -5.8% 0.92 / 0.87 / +5.0%
tpcds_q66/datafusion:parquet 59601298 / 60823197 / -2.0% 79220195 / 78250959 / +1.2% 0.75 / 0.78 / -3.2%
tpcds_q67/datafusion:parquet 68191144 / 69017602 / -1.2% 93295427 / 92414069 / +1.0% 0.73 / 0.75 / -2.1%
tpcds_q68/datafusion:parquet 29255714 / 29713764 / -1.5% 48796309 / 47088362 / +3.6% 0.60 / 0.63 / -5.0%
tpcds_q69/datafusion:parquet 43524280 / 43409056 / +0.3% 55392598 / 58228856 / -4.9% 0.79 / 0.75 / +5.4%
tpcds_q70/datafusion:parquet 80055928 / 80976967 / -1.1% 98352161 / 97646049 / +0.7% 0.81 / 0.83 / -1.8%
tpcds_q71/datafusion:parquet 25453088 / 26198760 / -2.8% 38546848 / 38817389 / -0.7% 0.66 / 0.67 / -2.2%
tpcds_q72/datafusion:parquet 524075677 / 520424787 / +0.7% 555217179 / 548824251 / +1.2% 0.94 / 0.95 / -0.5%
tpcds_q73/datafusion:parquet 23479464 / 23774588 / -1.2% 36106770 / 35994926 / +0.3% 0.65 / 0.66 / -1.5%
tpcds_q74/datafusion:parquet 69958746 / 71964559 / -2.8% 91905728 / 88593375 / +3.7% 0.76 / 0.81 / -6.3%
tpcds_q75/datafusion:parquet 152111575 / 155009072 / -1.9% 177993219 / 177967028 / +0.0% 0.85 / 0.87 / -1.9%
tpcds_q76/datafusion:parquet 34213314 / 33216860 / +3.0% 46541639 / 47889564 / -2.8% 0.74 / 0.69 / +6.0%
tpcds_q77/datafusion:parquet 57406387 / 57123894 / +0.5% 72548657 / 75735250 / -4.2% 0.79 / 0.75 / +4.9%
tpcds_q78/datafusion:parquet 85969347 / 85268329 / +0.8% 117323029 / 115062750 / +2.0% 0.73 / 0.74 / -1.1%
tpcds_q79/datafusion:parquet 27177558 / 27016716 / +0.6% 42922658 / 41406123 / +3.7% 0.63 / 0.65 / -3.0%
tpcds_q80/datafusion:parquet 81033820 / 80177621 / +1.1% 108540026 / 107359603 / +1.1% 0.75 / 0.75 / -0.0%
tpcds_q81/datafusion:parquet 38258438 / 36689468 / +4.3% 50525983 / 51731213 / -2.3% 0.76 / 0.71 / +6.8%
tpcds_q82/datafusion:parquet 21992970 / 22566992 / -2.5% 36416237 / 35373497 / +2.9% 0.60 / 0.64 / -5.3%
tpcds_q83/datafusion:parquet 58612768 / 58063186 / +0.9% 72090611 / 75073381 / -4.0% 0.81 / 0.77 / +5.1%
tpcds_q84/datafusion:parquet 25745566 / 26433304 / -2.6% 42240610 / 38836633 / +8.8% 0.61 / 0.68 / -10.5%
tpcds_q85/datafusion:parquet 81259810 / 80894374 / +0.5% 104035948 / 101416266 / +2.6% 0.78 / 0.80 / -2.1%
tpcds_q86/datafusion:parquet 20718298 / 20851596 / -0.6% 33238157 / 33115555 / +0.4% 0.62 / 0.63 / -1.0%
tpcds_q87/datafusion:parquet 45126260 / 44118442 / +2.3% 64269253 / 64350399 / -0.1% 0.70 / 0.69 / +2.4%
tpcds_q88/datafusion:parquet 37932268 / 37626844 / +0.8% 51889881 / 52415287 / -1.0% 0.73 / 0.72 / +1.8%
tpcds_q89/datafusion:parquet 25932154 / 26014490 / -0.3% 41544970 / 41199555 / +0.8% 0.62 / 0.63 / -1.1%
tpcds_q90/datafusion:parquet 14548414 / 15252398 / -4.6% 27518450 / 27255033 / +1.0% 0.53 / 0.56 / -5.5%
tpcds_q91/datafusion:parquet 31562374 / 32264378 / -2.2% 48220232 / 47253760 / +2.0% 0.65 / 0.68 / -4.1%
tpcds_q92/datafusion:parquet 26492787 / 27016796 / -1.9% 43617719 / 41389571 / +5.4% 0.61 / 0.65 / -6.9%
tpcds_q93/datafusion:parquet 26920136 / 27882475 / -3.5% 47368689 / 45762040 / +3.5% 0.57 / 0.61 / -6.7%
tpcds_q94/datafusion:parquet 34643391 / 35073608 / -1.2% 48508173 / 48864859 / -0.7% 0.71 / 0.72 / -0.5%
tpcds_q95/datafusion:parquet 64734618 / 63547685 / +1.9% 79208956 / 82201726 / -3.6% 0.82 / 0.77 / +5.7%
tpcds_q96/datafusion:parquet 12460749 / 12581218 / -1.0% 25101698 / 24073556 / +4.3% 0.50 / 0.52 / -5.0%
tpcds_q97/datafusion:parquet 35315365 / 35233132 / +0.2% 52052786 / 49607060 / +4.9% 0.68 / 0.71 / -4.5%
tpcds_q98/datafusion:parquet 24895042 / 25180659 / -1.1% 40584194 / 39568618 / +2.6% 0.61 / 0.64 / -3.6%
tpcds_q99/datafusion:parquet 29327538 / 29883085 / -1.9% 43770878 / 42943170 / +1.9% 0.67 / 0.70 / -3.7%
duckdb / vortex-file-compressed / ns (0.994x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpcds_q01/duckdb:vortex-file-compressed 17404511 / 17439644 / -0.2% 25572649 / 27219297 / -6.0% 0.68 / 0.64 / +6.2%
tpcds_q02/duckdb:vortex-file-compressed 16131546 / 16083914 / +0.3% 23267313 / 23502917 / -1.0% 0.69 / 0.68 / +1.3%
tpcds_q03/duckdb:vortex-file-compressed 7174012 / 7170842 / +0.0% 15730922 / 16666916 / -5.6% 0.46 / 0.43 / +6.0%
tpcds_q04/duckdb:vortex-file-compressed 48353047 / 48707472 / -0.7% 57582886 / 58047581 / -0.8% 0.84 / 0.84 / +0.1%
tpcds_q05/duckdb:vortex-file-compressed 23226534 / 23618420 / -1.7% 31708250 / 31794352 / -0.3% 0.73 / 0.74 / -1.4%
tpcds_q06/duckdb:vortex-file-compressed 28154117 / 28492640 / -1.2% 42126842 / 42541896 / -1.0% 0.67 / 0.67 / -0.2%
tpcds_q07/duckdb:vortex-file-compressed 14348598 / 14174695 / +1.2% 25325702 / 25347357 / -0.1% 0.57 / 0.56 / +1.3%
tpcds_q08/duckdb:vortex-file-compressed 18761526 / 18900235 / -0.7% 27301000 / 27718311 / -1.5% 0.69 / 0.68 / +0.8%
tpcds_q09/duckdb:vortex-file-compressed 18147568 / 18138864 / +0.0% 28605571 / 29221507 / -2.1% 0.63 / 0.62 / +2.2%
tpcds_q10/duckdb:vortex-file-compressed 33066213 / 33029630 / +0.1% 45987871 / 46829434 / -1.8% 0.72 / 0.71 / +1.9%
tpcds_q11/duckdb:vortex-file-compressed 39645610 / 39458654 / +0.5% 47785988 / 47656455 / +0.3% 0.83 / 0.83 / +0.2%
tpcds_q12/duckdb:vortex-file-compressed 10439530 / 10685926 / -2.3% 17733416 / 17944220 / -1.2% 0.59 / 0.60 / -1.1%
tpcds_q13/duckdb:vortex-file-compressed 21096500 / 21505498 / -1.9% 34220960 / 34571928 / -1.0% 0.62 / 0.62 / -0.9%
tpcds_q14/duckdb:vortex-file-compressed 58371658 / 59354654 / -1.7% 68593787 / 69010908 / -0.6% 0.85 / 0.86 / -1.1%
tpcds_q15/duckdb:vortex-file-compressed 27651018 / 27865054 / -0.8% 35414039 / 35466133 / -0.1% 0.78 / 0.79 / -0.6%
tpcds_q16/duckdb:vortex-file-compressed 36306352 / 36263682 / +0.1% 46711722 / 46410167 / +0.6% 0.78 / 0.78 / -0.5%
tpcds_q17/duckdb:vortex-file-compressed 26167291 / 26014247 / +0.6% 39962111 / 39653790 / +0.8% 0.65 / 0.66 / -0.2%
tpcds_q18/duckdb:vortex-file-compressed 32793346 / 32597166 / +0.6% 42992300 / 43159512 / -0.4% 0.76 / 0.76 / +1.0%
tpcds_q19/duckdb:vortex-file-compressed 89598144 / 89557922 / +0.0% 100843233 / 101850245 / -1.0% 0.89 / 0.88 / +1.0%
tpcds_q20/duckdb:vortex-file-compressed 11189797 / 11335046 / -1.3% 19147645 / 18866297 / +1.5% 0.58 / 0.60 / -2.7%
tpcds_q21/duckdb:vortex-file-compressed 10597598 / 10550480 / +0.4% 22654304 / 22047254 / +2.8% 0.47 / 0.48 / -2.2%
tpcds_q22/duckdb:vortex-file-compressed 18991054 / 18974138 / +0.1% 29219747 / 28581449 / +2.2% 0.65 / 0.66 / -2.1%
tpcds_q23/duckdb:vortex-file-compressed 39475751 / 39314652 / +0.4% 50396263 / 51213966 / -1.6% 0.78 / 0.77 / +2.0%
tpcds_q24/duckdb:vortex-file-compressed 28575868 / 28884934 / -1.1% 40476583 / 40024470 / +1.1% 0.71 / 0.72 / -2.2%
tpcds_q25/duckdb:vortex-file-compressed 24165326 / 24429660 / -1.1% 36496004 / 36379295 / +0.3% 0.66 / 0.67 / -1.4%
tpcds_q26/duckdb:vortex-file-compressed 13592394 / 13690386 / -0.7% 21358202 / 22307538 / -4.3% 0.64 / 0.61 / +3.7%
tpcds_q27/duckdb:vortex-file-compressed 17049474 / 17139150 / -0.5% 27899615 / 28790767 / -3.1% 0.61 / 0.60 / +2.7%
tpcds_q28/duckdb:vortex-file-compressed 15540588 / 15418094 / +0.8% 24249595 / 24049146 / +0.8% 0.64 / 0.64 / -0.0%
tpcds_q29/duckdb:vortex-file-compressed 24183800 / 24086816 / +0.4% 36504672 / 36218944 / +0.8% 0.66 / 0.67 / -0.4%
tpcds_q30/duckdb:vortex-file-compressed 16738330 / 16423360 / +1.9% 25623015 / 25162420 / +1.8% 0.65 / 0.65 / +0.1%
tpcds_q31/duckdb:vortex-file-compressed 19025982 / 19038258 / -0.1% 27887868 / 27773983 / +0.4% 0.68 / 0.69 / -0.5%
tpcds_q32/duckdb:vortex-file-compressed 13459838 / 13370864 / +0.7% 23069677 / 21994982 / +4.9% 0.58 / 0.61 / -4.0%
tpcds_q33/duckdb:vortex-file-compressed 17850380 / 18050817 / -1.1% 26129808 / 25375692 / +3.0% 0.68 / 0.71 / -4.0%
tpcds_q34/duckdb:vortex-file-compressed 12879598 / 12846442 / +0.3% 23140737 / 22710999 / +1.9% 0.56 / 0.57 / -1.6%
tpcds_q35/duckdb:vortex-file-compressed 29239876 / 29170485 / +0.2% 40387655 / 40616529 / -0.6% 0.72 / 0.72 / +0.8%
tpcds_q36/duckdb:vortex-file-compressed 15438031 / 15500460 / -0.4% 25467594 / 25928680 / -1.8% 0.61 / 0.60 / +1.4%
tpcds_q37/duckdb:vortex-file-compressed 9594712 / 9584120 / +0.1% 23587324 / 23057283 / +2.3% 0.41 / 0.42 / -2.1%
tpcds_q38/duckdb:vortex-file-compressed 25403988 / 25402442 / +0.0% 32327690 / 32979596 / -2.0% 0.79 / 0.77 / +2.0%
tpcds_q39/duckdb:vortex-file-compressed 20376152 / 21551021 / -5.5% 33247789 / 31761303 / +4.7% 0.61 / 0.68 / -9.7%
tpcds_q40/duckdb:vortex-file-compressed 14479482 / 14691824 / -1.4% 21954078 / 21942694 / +0.1% 0.66 / 0.67 / -1.5%
tpcds_q41/duckdb:vortex-file-compressed 15621592 / 15635824 / -0.1% 23857314 / 24539561 / -2.8% 0.65 / 0.64 / +2.8%
tpcds_q42/duckdb:vortex-file-compressed 7309903 / 7127577 / +2.6% 15479365 / 16028414 / -3.4% 0.47 / 0.44 / +6.2%
tpcds_q43/duckdb:vortex-file-compressed 10342268 / 10416310 / -0.7% 19199499 / 19702965 / -2.6% 0.54 / 0.53 / +1.9%
tpcds_q44/duckdb:vortex-file-compressed 14978118 / 15288050 / -2.0% 26480421 / 27312336 / -3.0% 0.57 / 0.56 / +1.1%
tpcds_q45/duckdb:vortex-file-compressed 25390806 / 25522246 / -0.5% 32705093 / 33381185 / -2.0% 0.78 / 0.76 / +1.5%
tpcds_q46/duckdb:vortex-file-compressed 20296122 / 20097704 / +1.0% 28901683 / 29393995 / -1.7% 0.70 / 0.68 / +2.7%
tpcds_q47/duckdb:vortex-file-compressed 36830337 / 36720506 / +0.3% 45946956 / 47230154 / -2.7% 0.80 / 0.78 / +3.1%
tpcds_q48/duckdb:vortex-file-compressed 24335514 / 24168216 / +0.7% 37363788 / 36654957 / +1.9% 0.65 / 0.66 / -1.2%
tpcds_q49/duckdb:vortex-file-compressed 20499200 / 20488396 / +0.1% 33447172 / 33177951 / +0.8% 0.61 / 0.62 / -0.8%
tpcds_q50/duckdb:vortex-file-compressed 17439118 / 17931386 / -2.7% 29288979 / 29638240 / -1.2% 0.60 / 0.61 / -1.6%
tpcds_q51/duckdb:vortex-file-compressed 51990104 / 52500616 / -1.0% 79052091 / 80923259 / -2.3% 0.66 / 0.65 / +1.4%
tpcds_q52/duckdb:vortex-file-compressed 7331032 / 7319667 / +0.2% 15771966 / 16698794 / -5.6% 0.46 / 0.44 / +6.0%
tpcds_q53/duckdb:vortex-file-compressed 12003345 / 12050183 / -0.4% 21708316 / 20427654 / +6.3% 0.55 / 0.59 / -6.3%
tpcds_q54/duckdb:vortex-file-compressed 20586837 / 20459934 / +0.6% 29539980 / 30721248 / -3.8% 0.70 / 0.67 / +4.6%
tpcds_q55/duckdb:vortex-file-compressed 7074685 / 7112698 / -0.5% 15444556 / 16245077 / -4.9% 0.46 / 0.44 / +4.6%
tpcds_q56/duckdb:vortex-file-compressed 18127792 / 18217444 / -0.5% 26556002 / 26742044 / -0.7% 0.68 / 0.68 / +0.2%
tpcds_q57/duckdb:vortex-file-compressed 27269762 / 27667744 / -1.4% 35424847 / 35748223 / -0.9% 0.77 / 0.77 / -0.5%
tpcds_q58/duckdb:vortex-file-compressed 20616182 / 20594944 / +0.1% 29308071 / 29427011 / -0.4% 0.70 / 0.70 / +0.5%
tpcds_q59/duckdb:vortex-file-compressed 20792138 / 20750972 / +0.2% 28438046 / 29050640 / -2.1% 0.73 / 0.71 / +2.4%
tpcds_q60/duckdb:vortex-file-compressed 18809594 / 19135727 / -1.7% 28485010 / 27636985 / +3.1% 0.66 / 0.69 / -4.6%
tpcds_q61/duckdb:vortex-file-compressed 24022872 / 24108312 / -0.4% 33513610 / 34077043 / -1.7% 0.72 / 0.71 / +1.3%
tpcds_q62/duckdb:vortex-file-compressed 12553318 / 12456039 / +0.8% 20108587 / 20304566 / -1.0% 0.62 / 0.61 / +1.8%
tpcds_q63/duckdb:vortex-file-compressed 11310577 / 11689796 / -3.2% 20474684 / 19906462 / +2.9% 0.55 / 0.59 / -5.9%
tpcds_q64/duckdb:vortex-file-compressed 51472976 / 51378027 / +0.2% 71103705 / 72381847 / -1.8% 0.72 / 0.71 / +2.0%
tpcds_q65/duckdb:vortex-file-compressed 15411203 / 16437374 / -6.2% 24669347 / 25748689 / -4.2% 0.62 / 0.64 / -2.1%
tpcds_q66/duckdb:vortex-file-compressed 30971708 / 33208336 / -6.7% 41144699 / 42336058 / -2.8% 0.75 / 0.78 / -4.0%
tpcds_q67/duckdb:vortex-file-compressed 64869358 / 65435933 / -0.9% 74457887 / 73848023 / +0.8% 0.87 / 0.89 / -1.7%
tpcds_q68/duckdb:vortex-file-compressed 19818416 / 20078928 / -1.3% 29118520 / 29170901 / -0.2% 0.68 / 0.69 / -1.1%
tpcds_q69/duckdb:vortex-file-compressed 23214264 / 23241534 / -0.1% 38785749 / 38850516 / -0.2% 0.60 / 0.60 / +0.0%
tpcds_q70/duckdb:vortex-file-compressed 16265244 / 16538370 / -1.7% 27731393 / 25211757 / +10.0% 0.59 / 0.66 / -10.6%
tpcds_q71/duckdb:vortex-file-compressed 13412551 / 13516254 / -0.8% 21897476 / 22743346 / -3.7% 0.61 / 0.59 / +3.1%
tpcds_q72/duckdb:vortex-file-compressed 58140911 / 58587628 / -0.8% 72945027 / 72788882 / +0.2% 0.80 / 0.80 / -1.0%
tpcds_q73/duckdb:vortex-file-compressed 11643922 / 11713432 / -0.6% 21626945 / 22329312 / -3.1% 0.54 / 0.52 / +2.6%
tpcds_q74/duckdb:vortex-file-compressed 27514647 / 27674992 / -0.6% 34843328 / 35033246 / -0.5% 0.79 / 0.79 / -0.0%
tpcds_q75/duckdb:vortex-file-compressed 28857836 / 29288680 / -1.5% 40086345 / 40611473 / -1.3% 0.72 / 0.72 / -0.2%
tpcds_q76/duckdb:vortex-file-compressed 12931946 / 13116972 / -1.4% 22419274 / 21974451 / +2.0% 0.58 / 0.60 / -3.4%
tpcds_q77/duckdb:vortex-file-compressed 20884846 / 21265524 / -1.8% 31791468 / 32589973 / -2.5% 0.66 / 0.65 / +0.7%
tpcds_q78/duckdb:vortex-file-compressed 43891219 / 44440038 / -1.2% 53151424 / 53650764 / -0.9% 0.83 / 0.83 / -0.3%
tpcds_q79/duckdb:vortex-file-compressed 13691468 / 13880707 / -1.4% 21756558 / 22258998 / -2.3% 0.63 / 0.62 / +0.9%
tpcds_q80/duckdb:vortex-file-compressed 38165928 / 37344568 / +2.2% 49341661 / 49823572 / -1.0% 0.77 / 0.75 / +3.2%
tpcds_q81/duckdb:vortex-file-compressed 22210950 / 22079180 / +0.6% 29527624 / 29931506 / -1.3% 0.75 / 0.74 / +2.0%
tpcds_q82/duckdb:vortex-file-compressed 9899054 / 10058612 / -1.6% 23500839 / 23175922 / +1.4% 0.42 / 0.43 / -2.9%
tpcds_q83/duckdb:vortex-file-compressed 17615406 / 17976734 / -2.0% 24638871 / 25007513 / -1.5% 0.71 / 0.72 / -0.5%
tpcds_q84/duckdb:vortex-file-compressed 15769548 / 16074242 / -1.9% 24191678 / 24634746 / -1.8% 0.65 / 0.65 / -0.1%
tpcds_q85/duckdb:vortex-file-compressed 25003022 / 25467392 / -1.8% 38182982 / 38371984 / -0.5% 0.65 / 0.66 / -1.3%
tpcds_q86/duckdb:vortex-file-compressed 10282238 / 10327764 / -0.4% 18317849 / 18271613 / +0.3% 0.56 / 0.57 / -0.7%
tpcds_q87/duckdb:vortex-file-compressed 27124155 / 27195582 / -0.3% 33603920 / 34082461 / -1.4% 0.81 / 0.80 / +1.2%
tpcds_q88/duckdb:vortex-file-compressed 38393330 / 38891858 / -1.3% 47562458 / 48534789 / -2.0% 0.81 / 0.80 / +0.7%
tpcds_q89/duckdb:vortex-file-compressed 12750930 / 13064133 / -2.4% 21833981 / 22099014 / -1.2% 0.58 / 0.59 / -1.2%
tpcds_q90/duckdb:vortex-file-compressed 8612808 / 8715810 / -1.2% 15381020 / 15807495 / -2.7% 0.56 / 0.55 / +1.6%
tpcds_q91/duckdb:vortex-file-compressed 14550112 / 14795734 / -1.7% 21591017 / 21648977 / -0.3% 0.67 / 0.68 / -1.4%
tpcds_q92/duckdb:vortex-file-compressed 13875932 / 14046564 / -1.2% 23217487 / 23426387 / -0.9% 0.60 / 0.60 / -0.3%
tpcds_q93/duckdb:vortex-file-compressed 11209942 / 11185930 / +0.2% 24701245 / 24912610 / -0.8% 0.45 / 0.45 / +1.1%
tpcds_q94/duckdb:vortex-file-compressed 32612539 / 32675963 / -0.2% 42087524 / 42873121 / -1.8% 0.77 / 0.76 / +1.7%
tpcds_q95/duckdb:vortex-file-compressed 43635252 / 43801560 / -0.4% 53368443 / 54021690 / -1.2% 0.82 / 0.81 / +0.8%
tpcds_q96/duckdb:vortex-file-compressed 6899549 / 6795696 / +1.5% 15160593 / 15466802 / -2.0% 0.46 / 0.44 / +3.6%
tpcds_q97/duckdb:vortex-file-compressed 23958687 / 24096507 / -0.6% 31022334 / 31722642 / -2.2% 0.77 / 0.76 / +1.7%
tpcds_q98/duckdb:vortex-file-compressed 11936775 / 11999761 / -0.5% 21159560 / 20860478 / +1.4% 0.56 / 0.58 / -1.9%
tpcds_q99/duckdb:vortex-file-compressed 15342880 / 15267530 / +0.5% 23531620 / 23326632 / +0.9% 0.65 / 0.65 / -0.4%
duckdb / parquet / ns (0.994x ➖, 0↑ 0↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpcds_q01/duckdb:parquet 27204633 / 27347317 / -0.5% 34959400 / 35303502 / -1.0% 0.78 / 0.77 / +0.5%
tpcds_q02/duckdb:parquet 19377860 / 19487888 / -0.6% 25869869 / 26543727 / -2.5% 0.75 / 0.73 / +2.0%
tpcds_q03/duckdb:parquet 11018104 / 11096145 / -0.7% 17796395 / 18150226 / -1.9% 0.62 / 0.61 / +1.3%
tpcds_q04/duckdb:parquet 131972152 / 131379761 / +0.5% 137768200 / 141158352 / -2.4% 0.96 / 0.93 / +2.9%
tpcds_q05/duckdb:parquet 31081359 / 30833834 / +0.8% 36447201 / 37028776 / -1.6% 0.85 / 0.83 / +2.4%
tpcds_q06/duckdb:parquet 32339862 / 32150086 / +0.6% 43108883 / 42644460 / +1.1% 0.75 / 0.75 / -0.5%
tpcds_q07/duckdb:parquet 32978242 / 33298061 / -1.0% 42116772 / 42603548 / -1.1% 0.78 / 0.78 / +0.2%
tpcds_q08/duckdb:parquet 22455378 / 22679677 / -1.0% 28452162 / 29862720 / -4.7% 0.79 / 0.76 / +3.9%
tpcds_q09/duckdb:parquet 28507844 / 29306652 / -2.7% 34010941 / 34056098 / -0.1% 0.84 / 0.86 / -2.6%
tpcds_q10/duckdb:parquet 41215024 / 41164660 / +0.1% 49446129 / 50308642 / -1.7% 0.83 / 0.82 / +1.9%
tpcds_q11/duckdb:parquet 74813478 / 75149775 / -0.4% 81245244 / 83075332 / -2.2% 0.92 / 0.90 / +1.8%
tpcds_q12/duckdb:parquet 16147020 / 16362310 / -1.3% 22023646 / 22513717 / -2.2% 0.73 / 0.73 / +0.9%
tpcds_q13/duckdb:parquet 34005784 / 33044183 / +2.9% 43286099 / 44182828 / -2.0% 0.79 / 0.75 / +5.0%
tpcds_q14/duckdb:parquet 70527760 / 71174578 / -0.9% 78028579 / 79471883 / -1.8% 0.90 / 0.90 / +0.9%
tpcds_q15/duckdb:parquet 18512554 / 18668916 / -0.8% 25815528 / 26114769 / -1.1% 0.72 / 0.71 / +0.3%
tpcds_q16/duckdb:parquet 43775804 / 44263705 / -1.1% 51123128 / 51154541 / -0.1% 0.86 / 0.87 / -1.0%
tpcds_q17/duckdb:parquet 37697273 / 37858576 / -0.4% 45742299 / 45437532 / +0.7% 0.82 / 0.83 / -1.1%
tpcds_q18/duckdb:parquet 51614556 / 51899668 / -0.5% 59095696 / 59726302 / -1.1% 0.87 / 0.87 / +0.5%
tpcds_q19/duckdb:parquet 20478813 / 20570085 / -0.4% 28090077 / 29074077 / -3.4% 0.73 / 0.71 / +3.0%
tpcds_q20/duckdb:parquet 17201504 / 17192398 / +0.1% 23238307 / 23405915 / -0.7% 0.74 / 0.73 / +0.8%
tpcds_q21/duckdb:parquet 12009552 / 12069398 / -0.5% 19256452 / 19193985 / +0.3% 0.62 / 0.63 / -0.8%
tpcds_q22/duckdb:parquet 22447210 / 22786454 / -1.5% 29438567 / 29371010 / +0.2% 0.76 / 0.78 / -1.7%
tpcds_q23/duckdb:parquet 46067616 / 46531502 / -1.0% 52227559 / 52932614 / -1.3% 0.88 / 0.88 / +0.3%
tpcds_q24/duckdb:parquet 33467704 / 33533062 / -0.2% 41294658 / 41847818 / -1.3% 0.81 / 0.80 / +1.1%
tpcds_q25/duckdb:parquet 33705246 / 34025074 / -0.9% 41715340 / 42410854 / -1.6% 0.81 / 0.80 / +0.7%
tpcds_q26/duckdb:parquet 31265500 / 31858504 / -1.9% 39167863 / 38845727 / +0.8% 0.80 / 0.82 / -2.7%
tpcds_q27/duckdb:parquet 36123361 / 35889354 / +0.7% 45565378 / 45815253 / -0.5% 0.79 / 0.78 / +1.2%
tpcds_q28/duckdb:parquet 28908190 / 30018104 / -3.7% 37237606 / 37590008 / -0.9% 0.78 / 0.80 / -2.8%
tpcds_q29/duckdb:parquet 35538666 / 35842821 / -0.8% 44210684 / 43915527 / +0.7% 0.80 / 0.82 / -1.5%
tpcds_q30/duckdb:parquet 40734312 / 40950778 / -0.5% 50479073 / 53761078 / -6.1% 0.81 / 0.76 / +5.9%
tpcds_q31/duckdb:parquet 38834650 / 38876682 / -0.1% 46901645 / 47252166 / -0.7% 0.83 / 0.82 / +0.6%
tpcds_q32/duckdb:parquet 17453800 / 17467670 / -0.1% 24665626 / 24704014 / -0.2% 0.71 / 0.71 / +0.1%
tpcds_q33/duckdb:parquet 24689911 / 25273202 / -2.3% 33066253 / 32285324 / +2.4% 0.75 / 0.78 / -4.6%
tpcds_q34/duckdb:parquet 18465751 / 18557908 / -0.5% 26330146 / 26435074 / -0.4% 0.70 / 0.70 / -0.1%
tpcds_q35/duckdb:parquet 39670731 / 39911215 / -0.6% 49652748 / 48425176 / +2.5% 0.80 / 0.82 / -3.1%
tpcds_q36/duckdb:parquet 42538156 / 42703088 / -0.4% 52057353 / 52222944 / -0.3% 0.82 / 0.82 / -0.1%
tpcds_q37/duckdb:parquet 14681338 / 14975561 / -2.0% 22420762 / 22350433 / +0.3% 0.65 / 0.67 / -2.3%
tpcds_q38/duckdb:parquet 32230516 / 32298115 / -0.2% 37178194 / 37193818 / -0.0% 0.87 / 0.87 / -0.2%
tpcds_q39/duckdb:parquet 25169127 / 25590262 / -1.6% 33201616 / 33087117 / +0.3% 0.76 / 0.77 / -2.0%
tpcds_q40/duckdb:parquet 18048562 / 18153762 / -0.6% 24575901 / 24397925 / +0.7% 0.73 / 0.74 / -1.3%
tpcds_q41/duckdb:parquet 14118046 / 14246674 / -0.9% 21925581 / 21943308 / -0.1% 0.64 / 0.65 / -0.8%
tpcds_q42/duckdb:parquet 10475015 / 10579660 / -1.0% 17664764 / 17727575 / -0.4% 0.59 / 0.60 / -0.6%
tpcds_q43/duckdb:parquet 13587414 / 13619888 / -0.2% 21116878 / 20808750 / +1.5% 0.64 / 0.65 / -1.7%
tpcds_q44/duckdb:parquet 23190675 / 24287447 / -4.5% 30732627 / 28739059 / +6.9% 0.75 / 0.85 / -10.7%
tpcds_q45/duckdb:parquet 23429548 / 23696610 / -1.1% 30994657 / 31357422 / -1.2% 0.76 / 0.76 / +0.0%
tpcds_q46/duckdb:parquet 38548740 / 38500332 / +0.1% 47293501 / 47718020 / -0.9% 0.82 / 0.81 / +1.0%
tpcds_q47/duckdb:parquet 37378397 / 37871174 / -1.3% 45151303 / 46527552 / -3.0% 0.83 / 0.81 / +1.7%
tpcds_q48/duckdb:parquet 30549300 / 30891434 / -1.1% 40461243 / 40608555 / -0.4% 0.76 / 0.76 / -0.7%
tpcds_q49/duckdb:parquet 32186469 / 31652608 / +1.7% 40499848 / 40689618 / -0.5% 0.79 / 0.78 / +2.2%
tpcds_q50/duckdb:parquet 21511290 / 21500242 / +0.1% 29485934 / 29406199 / +0.3% 0.73 / 0.73 / -0.2%
tpcds_q51/duckdb:parquet 55946892 / 56409870 / -0.8% 63210141 / 64688708 / -2.3% 0.89 / 0.87 / +1.5%
tpcds_q52/duckdb:parquet 10668042 / 10763580 / -0.9% 18088328 / 18112062 / -0.1% 0.59 / 0.59 / -0.8%
tpcds_q53/duckdb:parquet 15463727 / 15476084 / -0.1% 23149291 / 23446814 / -1.3% 0.67 / 0.66 / +1.2%
tpcds_q54/duckdb:parquet 27319394 / 27484921 / -0.6% 35635495 / 35644381 / -0.0% 0.77 / 0.77 / -0.6%
tpcds_q55/duckdb:parquet 10380050 / 10666912 / -2.7% 17799885 / 17759741 / +0.2% 0.58 / 0.60 / -2.9%
tpcds_q56/duckdb:parquet 26871574 / 26985425 / -0.4% 33910971 / 34252694 / -1.0% 0.79 / 0.79 / +0.6%
tpcds_q57/duckdb:parquet 33737474 / 33679152 / +0.2% 40095136 / 40326070 / -0.6% 0.84 / 0.84 / +0.8%
tpcds_q58/duckdb:parquet 26322729 / 26536364 / -0.8% 33488186 / 33483367 / +0.0% 0.79 / 0.79 / -0.8%
tpcds_q59/duckdb:parquet 24953730 / 25114642 / -0.6% 32219599 / 32525005 / -0.9% 0.77 / 0.77 / +0.3%
tpcds_q60/duckdb:parquet 28327502 / 28401478 / -0.3% 35474202 / 35608805 / -0.4% 0.80 / 0.80 / +0.1%
tpcds_q61/duckdb:parquet 26385498 / 27084780 / -2.6% 31860945 / 32072144 / -0.7% 0.83 / 0.84 / -1.9%
tpcds_q62/duckdb:parquet 14372380 / 14452104 / -0.6% 20358953 / 20694763 / -1.6% 0.71 / 0.70 / +1.1%
tpcds_q63/duckdb:parquet 14718138 / 14807718 / -0.6% 22283964 / 22419485 / -0.6% 0.66 / 0.66 / -0.0%
tpcds_q64/duckdb:parquet 77443932 / 77044416 / +0.5% 88426432 / 88989658 / -0.6% 0.88 / 0.87 / +1.2%
tpcds_q65/duckdb:parquet 21623700 / 21999061 / -1.7% 27386487 / 27453346 / -0.2% 0.79 / 0.80 / -1.5%
tpcds_q66/duckdb:parquet 39987762 / 40164515 / -0.4% 48149102 / 48418907 / -0.6% 0.83 / 0.83 / +0.1%
tpcds_q67/duckdb:parquet 67556590 / 67849475 / -0.4% 76912417 / 76309207 / +0.8% 0.88 / 0.89 / -1.2%
tpcds_q68/duckdb:parquet 30466498 / 30772986 / -1.0% 40173019 / 39496453 / +1.7% 0.76 / 0.78 / -2.7%
tpcds_q69/duckdb:parquet 28708868 / 28968358 / -0.9% 38092903 / 38537349 / -1.2% 0.75 / 0.75 / +0.3%
tpcds_q70/duckdb:parquet 21380098 / 21713808 / -1.5% 29845245 / 29551750 / +1.0% 0.72 / 0.73 / -2.5%
tpcds_q71/duckdb:parquet 18748244 / 18364015 / +2.1% 26170219 / 26083380 / +0.3% 0.72 / 0.70 / +1.8%
tpcds_q72/duckdb:parquet 60706188 / 60419342 / +0.5% 68641055 / 70373632 / -2.5% 0.88 / 0.86 / +3.0%
tpcds_q73/duckdb:parquet 15949272 / 15972982 / -0.1% 24241942 / 24157600 / +0.3% 0.66 / 0.66 / -0.5%
tpcds_q74/duckdb:parquet 93473558 / 92831064 / +0.7% 101539143 / 101609503 / -0.1% 0.92 / 0.91 / +0.8%
tpcds_q75/duckdb:parquet 47330510 / 46978390 / +0.7% 56223583 / 56255548 / -0.1% 0.84 / 0.84 / +0.8%
tpcds_q76/duckdb:parquet 19889589 / 20723146 / -4.0% 25188122 / 25748937 / -2.2% 0.79 / 0.80 / -1.9%
tpcds_q77/duckdb:parquet 26753238 / 26867437 / -0.4% 33738826 / 34106605 / -1.1% 0.79 / 0.79 / +0.7%
tpcds_q78/duckdb:parquet 81781919 / 82669150 / -1.1% 89710073 / 90493928 / -0.9% 0.91 / 0.91 / -0.2%
tpcds_q79/duckdb:parquet 23205682 / 23370406 / -0.7% 32034233 / 31826809 / +0.7% 0.72 / 0.73 / -1.3%
tpcds_q80/duckdb:parquet 41457538 / 39822459 / +4.1% 47469111 / 47482389 / -0.0% 0.87 / 0.84 / +4.1%
tpcds_q81/duckdb:parquet 40762924 / 41480985 / -1.7% 50397464 / 50605131 / -0.4% 0.81 / 0.82 / -1.3%
tpcds_q82/duckdb:parquet 15597605 / 15761252 / -1.0% 23414340 / 23587700 / -0.7% 0.67 / 0.67 / -0.3%
tpcds_q83/duckdb:parquet 21980659 / 22334745 / -1.6% 28519304 / 28123425 / +1.4% 0.77 / 0.79 / -3.0%
tpcds_q84/duckdb:parquet 24601234 / 24533518 / +0.3% 31257904 / 31456642 / -0.6% 0.79 / 0.78 / +0.9%
tpcds_q85/duckdb:parquet 35480059 / 35836572 / -1.0% 43878658 / 44209113 / -0.7% 0.81 / 0.81 / -0.2%
tpcds_q86/duckdb:parquet 13590028 / 13810191 / -1.6% 19960152 / 19817337 / +0.7% 0.68 / 0.70 / -2.3%
tpcds_q87/duckdb:parquet 34295591 / 34206630 / +0.3% 39965619 / 39386514 / +1.5% 0.86 / 0.87 / -1.2%
tpcds_q88/duckdb:parquet 43149835 / 43280864 / -0.3% 48546313 / 54118964 / -10.3% 🟢 0.89 / 0.80 / +11.1%
tpcds_q89/duckdb:parquet 15579984 / 15691137 / -0.7% 23622864 / 23659831 / -0.2% 0.66 / 0.66 / -0.6%
tpcds_q90/duckdb:parquet 10876534 / 10859698 / +0.2% 17862991 / 17619035 / +1.4% 0.61 / 0.62 / -1.2%
tpcds_q91/duckdb:parquet 23159430 / 23136540 / +0.1% 32204928 / 31639361 / +1.8% 0.72 / 0.73 / -1.7%
tpcds_q92/duckdb:parquet 18784124 / 19125308 / -1.8% 26512067 / 26458391 / +0.2% 0.71 / 0.72 / -2.0%
tpcds_q93/duckdb:parquet 15423936 / 15483261 / -0.4% 23138695 / 23411350 / -1.2% 0.67 / 0.66 / +0.8%
tpcds_q94/duckdb:parquet 37746878 / 37727360 / +0.1% 45876421 / 45479438 / +0.9% 0.82 / 0.83 / -0.8%
tpcds_q95/duckdb:parquet 48366638 / 47991017 / +0.8% 53615029 / 54105684 / -0.9% 0.90 / 0.89 / +1.7%
tpcds_q96/duckdb:parquet 9015411 / 9126438 / -1.2% 15498478 / 15644767 / -0.9% 0.58 / 0.58 / -0.3%
tpcds_q97/duckdb:parquet 29220275 / 29273749 / -0.2% 36585504 / 37201939 / -1.7% 0.80 / 0.79 / +1.5%
tpcds_q98/duckdb:parquet 18918603 / 18846741 / +0.4% 26622867 / 26462560 / +0.6% 0.71 / 0.71 / -0.2%
tpcds_q99/duckdb:parquet 20578274 / 20298226 / +1.4% 26496075 / 26502711 / -0.0% 0.78 / 0.77 / +1.4%

No file size changes detected.

joseph-isaacs and others added 2 commits October 22, 2026 13:35
The stream a scan returns now owns the planning run and drives it as it
is polled. Every CPU step of the run, the planners' and morsels'
compute, is a `spawn_cpu` task; every read is already a `spawn_io` task
of the segment source; the stream's poll awaits one or the other and
does no scan work on the engine's thread. The scan advances only as fast
as its consumer pulls, so the task and channel that ran ahead of it go.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A prune planner no longer knows about chunks or selections. It is built
with the planner it continues into, as a function of the rows its
proofs keep, and emits that planner with the kept mask once every proof
has run. `PreparedScan::planner` supplies the chunk planner.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Benchmarks: TPC-H SF=1 on S3 📖

Commits: PR da8a7c8a vs base 31027fc2
Verdict: No clear signal (environment too noisy confidence)
Attributed Vortex impact: -9.1%
Engines: DataFusion No clear signal (-25.5%, environment too noisy confidence) · DuckDB No clear signal (+10.9%, environment too noisy confidence)
Vortex (geomean): hot 0.964x ➖ · cold 0.993x ➖
Parquet (geomean): hot 1.061x ➖ · cold 1.090x ➖
Shifts: Parquet (control) +6.1% · Median polish +3.9%

How to read Verdict and Engines
  • Verdict: Overall PR-level signal after subtracting baseline drift estimated from Parquet control rows. It can be Likely improvement, Likely regression, or No clear signal.
  • Engines: Per-engine attribution. DataFusion is compared against DataFusion/Parquet controls; DuckDB is compared against DuckDB/Parquet controls. This answers whether each engine improved or regressed independently.
  • Confidence: Based on directional consistency, share of rows above the noise floor, and control-run noise.
  • Hot vs cold: Every measurement is run several times. The first run is reported as the cold run, and the median of the runs after it is reported as the hot run. The verdict and significance use hot runs; each target's geomean reports hot and cold beside each other where the individual runs were recorded and hot alone where they were not, the cold column shows first-run cost per row, and hot/cold is how much of each run the warm path saves. Rows whose results predate per-run reporting show only one value, taken from the value the runner reported.
  • Table cells: Each cell reads PR / base / %diff. The hot and cold columns mark a change as 🔴 slower or 🟢 faster once it clears this suite's threshold; anything smaller is noise here and is left unmarked, as is hot/cold, because a shift in the warm-up ratio is not a win or a loss by itself.

datafusion / vortex-file-compressed / ns (0.799x ➖, 5↑ 1↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/datafusion:vortex-file-compressed 250811611 / 267707148 / -6.3% 756460408 / 1286047577 / -41.2% 🟢 0.33 / 0.21 / +59.3%
tpch_q02/datafusion:vortex-file-compressed 326318286 / 416827196 / -21.7% 767744471 / 964511425 / -20.4% 0.43 / 0.43 / -1.6%
tpch_q03/datafusion:vortex-file-compressed 392678427 / 448775125 / -12.5% 1197139491 / 1484291328 / -19.3% 0.33 / 0.30 / +8.5%
tpch_q04/datafusion:vortex-file-compressed 207035886 / 242301955 / -14.6% 451726946 / 695566848 / -35.1% 🟢 0.46 / 0.35 / +31.6%
tpch_q05/datafusion:vortex-file-compressed 770077008 / 446320311 / +72.5% 🔴 768862692 / 696805981 / +10.3% 1.00 / 0.64 / +56.4%
tpch_q06/datafusion:vortex-file-compressed 160082699 / 428614632 / -62.7% 🟢 416194959 / 494628790 / -15.9% 0.38 / 0.87 / -55.6%
tpch_q07/datafusion:vortex-file-compressed 400768840 / 435168624 / -7.9% 569216288 / 545378043 / +4.4% 0.70 / 0.80 / -11.8%
tpch_q08/datafusion:vortex-file-compressed 458939171 / 521383232 / -12.0% 684200509 / 663032925 / +3.2% 0.67 / 0.79 / -14.7%
tpch_q09/datafusion:vortex-file-compressed 295343816 / 487434394 / -39.4% 🟢 515984725 / 646172232 / -20.1% 0.57 / 0.75 / -24.1%
tpch_q10/datafusion:vortex-file-compressed 352139369 / 416314867 / -15.4% 539446922 / 854774764 / -36.9% 🟢 0.65 / 0.49 / +34.0%
tpch_q11/datafusion:vortex-file-compressed 355124475 / 364692198 / -2.6% 526227292 / 478470177 / +10.0% 0.67 / 0.76 / -11.5%
tpch_q12/datafusion:vortex-file-compressed 255281112 / 752496903 / -66.1% 🟢 769731253 / 1208065625 / -36.3% 🟢 0.33 / 0.62 / -46.8%
tpch_q13/datafusion:vortex-file-compressed 130488924 / 147340225 / -11.4% 409168189 / 350492133 / +16.7% 0.32 / 0.42 / -24.1%
tpch_q14/datafusion:vortex-file-compressed 175820888 / 197745573 / -11.1% 310726718 / 362499493 / -14.3% 0.57 / 0.55 / +3.7%
tpch_q15/datafusion:vortex-file-compressed 343137747 / 342774677 / +0.1% 561033856 / 612815149 / -8.4% 0.61 / 0.56 / +9.3%
tpch_q16/datafusion:vortex-file-compressed 134095123 / 156820251 / -14.5% 267453483 / 272808337 / -2.0% 0.50 / 0.57 / -12.8%
tpch_q17/datafusion:vortex-file-compressed 282066308 / 637566919 / -55.8% 🟢 427577458 / 696135197 / -38.6% 🟢 0.66 / 0.92 / -28.0%
tpch_q18/datafusion:vortex-file-compressed 288146693 / 271840370 / +6.0% 881960862 / 462638470 / +90.6% 🔴 0.33 / 0.59 / -44.4%
tpch_q19/datafusion:vortex-file-compressed 275593142 / 456263692 / -39.6% 🟢 474653521 / 554818440 / -14.4% 0.58 / 0.82 / -29.4%
tpch_q20/datafusion:vortex-file-compressed 294683080 / 304001086 / -3.1% 481040737 / 536483639 / -10.3% 0.61 / 0.57 / +8.1%
tpch_q21/datafusion:vortex-file-compressed 526848816 / 593234606 / -11.2% 700437150 / 838985520 / -16.5% 0.75 / 0.71 / +6.4%
tpch_q22/datafusion:vortex-file-compressed 176920033 / 196364260 / -9.9% 435421017 / 380134121 / +14.5% 0.41 / 0.52 / -21.3%
datafusion / parquet / ns (1.073x ➖, 0↑ 3↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/datafusion:parquet 107529052 / 108985789 / -1.3% 397709406 / 388303497 / +2.4% 0.27 / 0.28 / -3.7%
tpch_q02/datafusion:parquet 5544604413 / 5615566732 / -1.3% 5643042724 / 6272268641 / -10.0% 0.98 / 0.90 / +9.7%
tpch_q03/datafusion:parquet 594633926 / 315366453 / +88.6% 🔴 908565638 / 676120001 / +34.4% 🔴 0.65 / 0.47 / +40.3%
tpch_q04/datafusion:parquet 244939115 / 219699700 / +11.5% 523596309 / 385841975 / +35.7% 🔴 0.47 / 0.57 / -17.8%
tpch_q05/datafusion:parquet 3540493612 / 2975299663 / +19.0% 3306462282 / 3405014240 / -2.9% 1.07 / 0.87 / +22.5%
tpch_q06/datafusion:parquet 183555250 / 116087462 / +58.1% 🔴 502796761 / 230485772 / +118.1% 🔴 0.37 / 0.50 / -27.5%
tpch_q07/datafusion:parquet 3151030818 / 3652918284 / -13.7% 3220031576 / 3129960199 / +2.9% 0.98 / 1.17 / -16.2%
tpch_q08/datafusion:parquet 3039289423 / 3261344197 / -6.8% 3085969359 / 3460035446 / -10.8% 0.98 / 0.94 / +4.5%
tpch_q09/datafusion:parquet 3053369354 / 3193894735 / -4.4% 3129167861 / 3165740637 / -1.2% 0.98 / 1.01 / -3.3%
tpch_q10/datafusion:parquet 292263674 / 311770813 / -6.3% 501339826 / 457433990 / +9.6% 0.58 / 0.68 / -14.5%
tpch_q11/datafusion:parquet 5478314943 / 5485462724 / -0.1% 6208784111 / 5439356571 / +14.1% 0.88 / 1.01 / -12.5%
tpch_q12/datafusion:parquet 386149722 / 219515797 / +75.9% 🔴 696054649 / 353540494 / +96.9% 🔴 0.55 / 0.62 / -10.7%
tpch_q13/datafusion:parquet 224900691 / 179562615 / +25.2% 335310528 / 440611745 / -23.9% 0.67 / 0.41 / +64.6%
tpch_q14/datafusion:parquet 198993340 / 195907293 / +1.6% 328020083 / 379968760 / -13.7% 0.61 / 0.52 / +17.7%
tpch_q15/datafusion:parquet 2850109751 / 2912710831 / -2.1% 2973356102 / 3553580199 / -16.3% 0.96 / 0.82 / +16.9%
tpch_q16/datafusion:parquet 2679453541 / 2800592128 / -4.3% 2871737942 / 2731497775 / +5.1% 0.93 / 1.03 / -9.0%
tpch_q17/datafusion:parquet 286884107 / 329983591 / -13.1% 545232244 / 447417787 / +21.9% 0.53 / 0.74 / -28.7%
tpch_q18/datafusion:parquet 351825026 / 396053617 / -11.2% 563596600 / 553482367 / +1.8% 0.62 / 0.72 / -12.8%
tpch_q19/datafusion:parquet 259840968 / 224212601 / +15.9% 472415277 / 304969421 / +54.9% 🔴 0.55 / 0.74 / -25.2%
tpch_q20/datafusion:parquet 2881780011 / 2874525016 / +0.3% 3217376673 / 3029607551 / +6.2% 0.90 / 0.95 / -5.6%
tpch_q21/datafusion:parquet 3089403965 / 2896165949 / +6.7% 3064538560 / 3788385940 / -19.1% 1.01 / 0.76 / +31.9%
tpch_q22/datafusion:parquet 424691883 / 502695029 / -15.5% 446627805 / 647722641 / -31.0% 🟢 0.95 / 0.78 / +22.5%
duckdb / vortex-file-compressed / ns (1.162x ➖, 0↑ 4↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/duckdb:vortex-file-compressed 198335353 / 212170199 / -6.5% 287664222 / 417486268 / -31.1% 🟢 0.69 / 0.51 / +35.7%
tpch_q02/duckdb:vortex-file-compressed 228166567 / 225704631 / +1.1% 295853494 / 255415474 / +15.8% 0.77 / 0.88 / -12.7%
tpch_q03/duckdb:vortex-file-compressed 551774395 / 400479101 / +37.8% 🔴 665824406 / 429449138 / +55.0% 🔴 0.83 / 0.93 / -11.1%
tpch_q04/duckdb:vortex-file-compressed 215792641 / 208866401 / +3.3% 294596627 / 275077405 / +7.1% 0.73 / 0.76 / -3.5%
tpch_q05/duckdb:vortex-file-compressed 829739910 / 431572870 / +92.3% 🔴 578650498 / 498909098 / +16.0% 1.43 / 0.87 / +65.8%
tpch_q06/duckdb:vortex-file-compressed 325937072 / 321586325 / +1.4% 323690007 / 311084295 / +4.1% 1.01 / 1.03 / -2.6%
tpch_q07/duckdb:vortex-file-compressed 381860780 / 312826181 / +22.1% 518370792 / 352106299 / +47.2% 🔴 0.74 / 0.89 / -17.1%
tpch_q08/duckdb:vortex-file-compressed 503985625 / 468481423 / +7.6% 534961054 / 503729645 / +6.2% 0.94 / 0.93 / +1.3%
tpch_q09/duckdb:vortex-file-compressed 411397993 / 354663942 / +16.0% 461306614 / 393317006 / +17.3% 0.89 / 0.90 / -1.1%
tpch_q10/duckdb:vortex-file-compressed 460634753 / 423180082 / +8.9% 559052921 / 494454690 / +13.1% 0.82 / 0.86 / -3.7%
tpch_q11/duckdb:vortex-file-compressed 192684684 / 172615825 / +11.6% 217031492 / 210317145 / +3.2% 0.89 / 0.82 / +8.2%
tpch_q12/duckdb:vortex-file-compressed 679360401 / 437263266 / +55.4% 🔴 642922208 / 581248292 / +10.6% 1.06 / 0.75 / +40.5%
tpch_q13/duckdb:vortex-file-compressed 306125800 / 272711896 / +12.3% 275428982 / 221427711 / +24.4% 1.11 / 1.23 / -9.8%
tpch_q14/duckdb:vortex-file-compressed 306371290 / 197200811 / +55.4% 🔴 243234046 / 298794927 / -18.6% 1.26 / 0.66 / +90.8%
tpch_q15/duckdb:vortex-file-compressed 188929609 / 187068995 / +1.0% 282142504 / 218923011 / +28.9% 0.67 / 0.85 / -21.6%
tpch_q16/duckdb:vortex-file-compressed 138533541 / 129667478 / +6.8% 161675155 / 165462258 / -2.3% 0.86 / 0.78 / +9.3%
tpch_q17/duckdb:vortex-file-compressed 370634211 / 384689541 / -3.7% 377361031 / 380988777 / -1.0% 0.98 / 1.01 / -2.7%
tpch_q18/duckdb:vortex-file-compressed 327761026 / 297389355 / +10.2% 498363052 / 334448442 / +49.0% 🔴 0.66 / 0.89 / -26.0%
tpch_q19/duckdb:vortex-file-compressed 457815859 / 364134618 / +25.7% 452614335 / 414685202 / +9.1% 1.01 / 0.88 / +15.2%
tpch_q20/duckdb:vortex-file-compressed 405165317 / 370054109 / +9.5% 513564530 / 451797355 / +13.7% 0.79 / 0.82 / -3.7%
tpch_q21/duckdb:vortex-file-compressed 712864255 / 561206678 / +27.0% 670860586 / 563983743 / +19.0% 1.06 / 1.00 / +6.8%
tpch_q22/duckdb:vortex-file-compressed 165928720 / 160119572 / +3.6% 200903114 / 191379818 / +5.0% 0.83 / 0.84 / -1.3%
duckdb / parquet / ns (1.048x ➖, 1↑ 3↓)
name hot ns (PR / base / %diff) cold ns (PR / base / %diff) hot/cold (PR / base / %diff)
tpch_q01/duckdb:parquet 187873910 / 138502921 / +35.6% 🔴 453611890 / 177305776 / +155.8% 🔴 0.41 / 0.78 / -47.0%
tpch_q02/duckdb:parquet 416448005 / 426957352 / -2.5% 434579589 / 534202633 / -18.6% 0.96 / 0.80 / +19.9%
tpch_q03/duckdb:parquet 536479549 / 475792397 / +12.8% 562259967 / 552872261 / +1.7% 0.95 / 0.86 / +10.9%
tpch_q04/duckdb:parquet 354212173 / 310016445 / +14.3% 392083406 / 389724946 / +0.6% 0.90 / 0.80 / +13.6%
tpch_q05/duckdb:parquet 680852476 / 621459893 / +9.6% 622923985 / 646958910 / -3.7% 1.09 / 0.96 / +13.8%
tpch_q06/duckdb:parquet 175361004 / 190001524 / -7.7% 220123026 / 254943682 / -13.7% 0.80 / 0.75 / +6.9%
tpch_q07/duckdb:parquet 561122758 / 556321217 / +0.9% 593243520 / 527569475 / +12.4% 0.95 / 1.05 / -10.3%
tpch_q08/duckdb:parquet 718338868 / 681392973 / +5.4% 779217797 / 800967629 / -2.7% 0.92 / 0.85 / +8.4%
tpch_q09/duckdb:parquet 628011370 / 672271671 / -6.6% 674453368 / 659438316 / +2.3% 0.93 / 1.02 / -8.7%
tpch_q10/duckdb:parquet 624373444 / 557699757 / +12.0% 788746233 / 614578057 / +28.3% 0.79 / 0.91 / -12.8%
tpch_q11/duckdb:parquet 253663510 / 298371800 / -15.0% 330413826 / 1266956609 / -73.9% 🟢 0.77 / 0.24 / +226.0%
tpch_q12/duckdb:parquet 538276446 / 351495069 / +53.1% 🔴 1449773788 / 484645496 / +199.1% 🔴 0.37 / 0.73 / -48.8%
tpch_q13/duckdb:parquet 356085388 / 332590739 / +7.1% 437327422 / 348579089 / +25.5% 0.81 / 0.95 / -14.7%
tpch_q14/duckdb:parquet 359448109 / 362923328 / -1.0% 451138856 / 445643531 / +1.2% 0.80 / 0.81 / -2.2%
tpch_q15/duckdb:parquet 263797906 / 231548955 / +13.9% 305396270 / 251613746 / +21.4% 0.86 / 0.92 / -6.1%
tpch_q16/duckdb:parquet 358711045 / 615657818 / -41.7% 🟢 425803998 / 1569573083 / -72.9% 🟢 0.84 / 0.39 / +114.8%
tpch_q17/duckdb:parquet 362805762 / 413544607 / -12.3% 423314434 / 537406489 / -21.2% 0.86 / 0.77 / +11.4%
tpch_q18/duckdb:parquet 478889311 / 425986187 / +12.4% 483283919 / 468945283 / +3.1% 0.99 / 0.91 / +9.1%
tpch_q19/duckdb:parquet 382250184 / 344498828 / +11.0% 1921578652 / 333092103 / +476.9% 🔴 0.20 / 1.03 / -80.8%
tpch_q20/duckdb:parquet 558586836 / 514154054 / +8.6% 545272882 / 531220937 / +2.6% 1.02 / 0.97 / +5.8%
tpch_q21/duckdb:parquet 568710454 / 551584435 / +3.1% 612927570 / 717665038 / -14.6% 0.93 / 0.77 / +20.7%
tpch_q22/duckdb:parquet 457931017 / 349008457 / +31.2% 🔴 1082361290 / 430769821 / +151.3% 🔴 0.42 / 0.81 / -47.8%

joseph-isaacs and others added 7 commits October 22, 2026 13:58
…h other

A planner may now emit a child with `PlannerOutput::Spawn`: the run does
not queue it but hands it to its owner as `Progress::Spawn`, and the
planner continues at once. The owner runs it anywhere; the blocking
driver admits it as another root of the same run.

The chunk planner spawns every chunk. The scan's stream runs each on a
run and a session of its own, stepped on `spawn_cpu`, up to
`concurrency` chunks per worker thread at once, merging their batches as
they finish. A scan with fewer engine partitions than cores had lost the
parallelism of one task per split, 2 to 4 times slower on selective
queries with one partition; it is back, without a planner knowing about
threads.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Hints were deduplicated by scanning the batch for each segment, which is
quadratic in a chunk's segments: a wide projection over a filtered chunk
announces hundreds. A set of the segments seen replaces the scan.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…es not

A spawned chunk runs on one task of the runtime that drives its run to
the end and awaits only its reads, instead of a `spawn_cpu` task per
step: a chunk's run waits for reads many times, and a hop at each wait
was latency on its critical path that no other chunk's work filled.

At a concurrency of one, chunks run on the scan's own run as further
roots: the run's steps already interleave their work, and a run, a
session and a task per chunk only added a hand-off per chunk, measured
at 2 to 3 percent on TPC-H, for parallelism the engine provides.
DataFusion sets the concurrency, unless configured, to the cores per
partition, so a scan over one partition per core runs its chunks inline
and a single-partition scan runs them beside each other.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A planner says what it needs, compute or reads. Where either runs is an
engine's decision, so this crate stops driving: `ScanBuilder::prepare`
lowers and plans a scan without IO into a `PreparedScan`, which exposes
its rows, selection, filter plans and IO service, and `PrunePlanner` and
`ChunkPlanner` are public for an engine to compose, the prune planner
continuing into whatever it is built with and passing `None` when no
proof ran. The builder's ordering, concurrency, mapping and streams go
with the driver, and the layout's tests drive their scans on a run of
their own.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The opener composes a scan's planners, a prune planner into a chunk
planner when the scan has a filter and the chunk planner alone when it
does not, and a driver of this crate runs them: the root run stepped on
`spawn_cpu` tasks as DataFusion polls the stream, each spawned chunk on
a task of its own up to the concurrency, or on the root run when the
engine's partitions already fill the cores, with the concurrency
derived from cores per partition unless configured. Batches are mapped
to Arrow on the task that produced them. Every spawning decision of a
V2 scan under DataFusion is in this crate.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
`vortex_file::v2::ScanDriver` composes a scan's planners and runs them
on the session's runtime, the way an engine's driver does, for the file
API's callers: the compress and random-access benchmarks move to it.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The opener prepares the scan where compute runs, composes its planners
itself, a prune planner continuing into a chunk planner when there is a
filter and the chunk planner alone when there is not, and hands the
driver the first planner. The driver only drives.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@joseph-isaacs joseph-isaacs added the action/bench-sql Run SQL benchmarks without Vortex Compact on this PR label Oct 22, 2026
@github-actions github-actions Bot removed the action/bench-sql Run SQL benchmarks without Vortex Compact on this PR label Oct 22, 2026
The prune planner skipped prefetching the zone maps of proofs an earlier
scan of the file had proved. The segment list now comes from compiling
the proof, and a proved proof compiles to its kept result without a
segment scan, so the check repeated what compile already knew.

Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The scan code named the filter's zone-map plans proofs. They are the
filter's pruning expressions evaluated over the file's zone map, so the
layout, file and DataFusion code now says pruning, matching
prune_zones, PrunedZones and the pruning field they already used.
Behaviour is unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
@joseph-isaacs joseph-isaacs added the action/bench-sql Run SQL benchmarks without Vortex Compact on this PR label Oct 22, 2026
@github-actions github-actions Bot removed the action/bench-sql Run SQL benchmarks without Vortex Compact on this PR label Oct 22, 2026
joseph-isaacs and others added 24 commits October 22, 2026 18:16
…steps

A planner that waits can now say what it will read later: the run asks
every parked planner to speculate when nothing else can compute, and
registers the answer with its root's session as reads that are never
delivered. The prune planner speculates the predicate columns of the
next chunk of its partition on each ask, so they are read while the zone
maps are, as its filter planner would read them once pruning keeps the
chunk; a scan selecting rows by index speculates nothing. The segment IO
service keeps speculated reads for whichever session fetches a segment
first, so a chunk on its own session takes the read the prune planner
started.

The root run's CPU step now runs until the run has a batch, waits, or
is done, collecting every chunk it spawns, instead of one spawn_cpu hop
per chunk.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
The prune planner ran its pruning plans one after another, each over
the rows the previous one kept, so a filter with three plans waited for
three reads in turn, each wait costing a round trip and a hop of the
root run. It now builds every plan's adaptor in its first compute,
publishes all their zone-map reads as one batch, waits once, and
intersects the kept rows. Each adaptor numbers its requests from its
own range, so the planner routes deliveries by request id. The separate
compile of each plan to prefetch its segments is gone: the adaptors'
fetches are the reads.

Debug events mark when the pruning reads go out, when a chunk's reads
are speculated, and when a chunk's run starts.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
The root run was stepped on a spawn_cpu task per step, so a partition
paid a hop to take its zone-map completion, another to step the run,
and a task spawn for its chunk, each a few hundred microseconds when
every core is busy. The root run now runs on one task that awaits its
reads in place, like a chunk's, and the first chunk a partition spawns
runs on that run as another root. Later chunks are spawned as before,
so one partition with many chunks stays parallel.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Planning cuts a partition's rows from the footer's row count on the
writer's 8192-row grid, but the writer buffers chunks to megabytes, so
at fourteen partitions nearly every boundary fell inside a chunk and
both neighbours decoded it: q19 at SF1 retired 17% more instructions
than the stacked V2 scan, which aligned partitions to natural splits,
and none more at one partition. The opener now snaps the planning-time
rows up to the natural split boundaries of the columns the scan reads,
computed once per file as the byte-range fallback already does, so the
partitions still tile the file and no chunk is decoded twice.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
…reads

Speculation prefetched only the predicate columns of the next chunk,
so the projection columns interleaved between them in the file were
read as gap bytes and then read again on their own: q6 at SF1 issued
23 physical reads for 164 requests where the stacked scan issued 14,
and 14% more bytes. The prune planner now speculates the batch the
chunk's filter planner would publish, predicate prefetches and
projection announcements together, and the segment IO service keeps
speculated announcements, requested and never polled, for whichever
session fetches the segment first.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
…erlap

The session polled a fetch as it was submitted, which marked it wanted
and let the read driver dispatch the zone map alone before the run had
speculated the chunk's reads microseconds later: q6 at SF1 still issued
25 physical reads for the stacked scan's 14. The run now speculates
before it polls its sources, and the session registers a fetch on
submit and polls it when the run polls, so what a planner speculates is
registered beside the reads it waits for and a coalescing source folds
them into one read.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
A chunk's filter planner announced its projection through its own
session, which registered a second request for a segment speculation
had already announced beside the chunk's reads. The second request was
dispatched alone when the projection fetched, after the chunk's read
had gone: two of each partition's eleven requests came back as a
separate read inside the same range. A session announcement now takes
the speculated announcement, and a fetch prefers it too.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
A chunk straddling two partitions is fetched by both. A partition's
chunk took its speculated read out of the service's map, so when the
neighbouring partition speculated the same segment a moment later it
started another read, and once the first had completed the file's
shared source no longer folded them: on q6 at SF1, 26 segments were
read twice. A speculated read now stays in the service's map for as
long as the service lives, cloned by every session that fetches it.
Trace events name each new segment request by the path that made it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Filtered chunks were cut on a fixed 1M-row grid over the file, so a
partition of 430K rows straddling a grid line got a small second
chunk, speculated only on the next idle wait, after its neighbour's
read had gone: on q6 at SF1 those tails came back as separate reads of
ranges already read. Chunks now start at the partition's own first row,
so a partition shorter than a chunk is one chunk and its reads go out
together.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
One chunk per idle wait left a partition of five chunks at SF10
reading its last three only once their tasks started, where the
stacked scan had every split prefetching from the start. The prune
planner now speculates every chunk's predicate prefetches and
projection announcements in one batch on the first ask, registered
together so the partition's reads coalesce as one scan's.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Two chunks of one partition can straddle a writer chunk. The first
chunk's session took the speculated announcement for it and read it;
the second found nothing speculated, announced a request of its own and
read the segment again at the end of the scan: q12 at SF10 issued 30
single-request reads of ranges already read. A speculated announcement
now stays with the service, a session's own announcement of the segment
adds nothing, and the first fetch turns it into the shared read every
later session finds.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
A projection-only partition of seventeen 64K-row chunks handed each
chunk through the channel on its own, each needing a poll, a hop and a
task spawn, so its chunks started their first reads a few hundred
microseconds apart and the last ones no longer coalesced: q12 at SF10
issued 27 single-request reads of the orders table at the end of the
scan, where the stacked scan spawned every split of a partition within
microseconds. The root task now collects every chunk the run spawns
until it has a batch, waits, or finishes, and sends them as one group
the consumer spawns at once.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
…ments

A read only announced is not started until the projection fetches it,
after the filter, with nothing to overlap, and in a file whose columns
are written in bursts a wide projection column shares no read with the
narrow predicate beside it. On q14 at SF1 the projection waited 2.4 to
4 ms on reads of its own while its CPU was under 0.1 ms, the whole gap
to V1, which polls all of a split's reads at open. The prune planner
now speculates the projection's prefetches after the predicates' in the
same batch, and the session registers a batch's announcements before it
starts any read, so what is announced is dispatched with the reads it
coalesces with. Debug events mark the projection's start, reads and
finish, and each batch handed to the engine.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
A prepared scan carries a set of metrics its planners and morsels
update, registered with the engine's registry under the partition's
labels like the IO metrics: pruning duration and rows, speculated
requests, chunks planned and skipped, filter duration, conjunct
evaluations and their rows, projection duration and the wait from its
reads going out to its first piece, rows projected and batches handed
over. The DataFusion opener registers them, so they print beside the
engine's own per-operator metrics.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
…hunks

A partition without a filter had each 64K-row chunk fetch its own
segments as it started, so the coalescer saw them piecemeal: q9's
lineitem scan at SF1 issued 62 reads and 18% more bytes than V1, which
registers a split's reads at open. The chunk planner now prefetches
the partition's projection segments before it emits a chunk, and a
prefetch is shared by every session of the service, like a speculated
read, since chunks run on sessions of their own. Listing a plan's
segments now shares the scan's value cache, so a dictionary's values
already held list no segment and are not read ahead again. Timer
metrics gain a total.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Debug events now bracket each phase a partition goes through: open
prepared and stream returned, pruning started, reads out, speculated
and finished, filter started and each conjunct evaluated, projection
started, reads out, first piece and finished, and each batch sent, so
a trace gives the timeline of a scan without instrumenting it again.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
The driver takes driver metrics from the opener and records, under the
partition's labels, the time from the stream's creation to its first
batch and to its end, each spawned chunk's run, and how many chunks it
spawned, so --show-metrics gives a partition's timeline end to end
beside the stages' own durations.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
…ions waiting for it

Every partition of a file rebuilt the filter plans and optimized the
projection on every query: all fourteen open together before any has
filled the file's cache, so the cache never hit within a query. On q6
at SF1 that was 448 us of filter plans and 92 us of projection per
partition, on q14 177 and 142, at open, on every partition, fourteen
times over. Each plan is now a once-cell in the cache: the first
partition to reach it builds it and the others wait for that plan
alone, not for the cache. Debug events time prepare's steps.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
…nd values

The scan cache keys plans, pruned zones and values by the identity of
a bound expression's tree, and every DataFusion partition binds the
filter and projection on its own, so no two partitions ever hit the
same entry: every partition built every plan, proved its own zones and
decoded every dictionary's values for itself. A prepared scan now
interns its filter and projection in the file's cache, structurally,
and uses the shared tree, so the once-cells build once and the values
are decoded once per file.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
A filtered partition of fewer rows than a chunk ran as one chunk, on one
task from its first read to its last batch, and an engine's partitions
started together straggled on uneven cores: identical 430K-row filter
chunks took 0.5 to 5 ms at SF1, and the query waited for the slowest
while V1's finer futures were stolen by the idle cores. A filtered chunk
is now a quarter of the partition's rows on the row grid, between 256K
and 1M rows, so a partition's chunks after its first are spawned where
the runtime has room. SF1 partitions get two chunks; SF10 partitions keep
their 1M-row chunks. A fixed 256K cost SF10 q1 8%.

Local, 14 partitions, against the previous head: SF1 0.993 median
(q15 0.976, q19 0.982), SF10 1.008.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Interning hashes an expression's whole tree, and under a mutex the
partitions opening a file together serialized on it: 3 ms of lock
spinning over 15 runs of q15. Readers probe concurrently; only a miss
takes the write lock, and checks again under it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
… beside

A zone-map fetch is the read everything else in a partition waits on, yet
the file's read driver coalesced it with the chunk reads speculated beside
it, so pruning waited for a 3 MB read from the page cache and, over an
object store, for a 9.5 MB one behind 150 others. An urgent intent reads
a segment on its own as soon as it is published, coalesced only with
other urgent reads: a segment source may request a segment alone, the
read driver keeps such requests apart, and the prune planner's adaptors
publish their reads urgent. Over MinIO with 20 ms of round trip, SF10 q6
pruning finished at 25 to 50 ms instead of 320 to 390.

Local: neutral (SF1 0.996, SF10 1.005 against the previous commit). MinIO
with 20 ms round trip and 100 MB/s per connection: SF1 0.60 of V1,
SF10 1.2 (the SF10 loss is addressed next).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
A partition speculated every chunk's reads at once, and the file's read
driver dispatches in registration order, so with an engine's partitions
started together the last partitions' first chunks queued behind the
first partitions' last: over MinIO at SF10 every partition's zone maps
and first batches came at once, and the batches of the rest tailed for
300 ms while V1, reading one split at a time per partition, shared the
bandwidth evenly. Each partition now reads ahead only its first chunks
when the store is not a local file, two by default; the later chunks fetch
their own reads as their tasks start, interleaved across partitions. A
local file keeps reading every chunk ahead: reading two ahead there cost
SF10 6%.

MinIO, 20 ms round trip, 100 MB/s per connection, 10 partitions at SF10:
0.90 of V1 at the median (q1 0.79, q19 0.66, q6 1.23 bimodal), from 1.27
with everything read ahead; SF1 at 14 partitions 0.61 of V1. Local
unchanged (SF1 1.001, SF10 1.001).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
A V2 scan cache lived only as long as the scans of one query holding it,
so every query lowered the file's layout, optimized its projection and
filter plans, proved its zones and decoded its dictionary values again:
q2 at SF1 ran 35 prepares a query, 1.6 ms of CPU, with the first per
table on the critical path of a five-table join chain. The cache now
lives beside the footer in DataFusion's session-level file metadata
cache, so a later query of the file plans nothing again; partitions
opening a file the cache misses still share one cache, put with the
entry the first of them writes, and a rewritten file invalidates both.
The entry's reported size does not count the cache, which grows after
the entry is put.

Local, 14 partitions, against the previous commit: SF1 0.965 (q19 0.90,
q6 0.93, q2 0.96, q13 0.96), SF10 0.962 (q6 0.95, q12 0.95, q19 0.94).
Against V1: SF1 0.955, SF10 0.81 on the targeted sets.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vr65ZwPZz4LPjkvDA6ZUuE
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog/performance A performance improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant