Skip to content

feat: add BatchNormalizer: re-chunk data source batches by rows and bytes (target_batch_size_bytes)#23390

Draft
adriangb wants to merge 11 commits into
apache:mainfrom
pydantic:batch-normalizer
Draft

feat: add BatchNormalizer: re-chunk data source batches by rows and bytes (target_batch_size_bytes)#23390
adriangb wants to merge 11 commits into
apache:mainfrom
pydantic:batch-normalizer

Conversation

@adriangb

@adriangb adriangb commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

  • N/A (design discussed offline; can file a tracking issue if preferred)

Rationale for this change

Operators bound their output batches by row count (datafusion.execution.batch_size) only. With wide rows (large string values, wide schemas) a batch within the row limit can still be arbitrarily large in bytes — multi-GB batches break memory accounting assumptions and cause OOMs. Conversely, streams of many tiny batches waste per-batch overhead.

The existing BatchSplitStream on DataSourceExec splits by rows only, and splitting by zero-copy slice cannot release memory anyway: a slice of a 4GB batch still pins all 4GB of buffers (arrow's concat also short-circuits single inputs to a zero-copy slice).

This PR adds a batch normalizer: a stream wrapper that re-chunks data source output towards a target row count and byte size, opt-in via a new config option.

What changes are included in this PR?

  1. BatchNormalizer / BatchNormalizerStream (datafusion/physical-plan/src/batch_normalizer.rs). Per input batch, one of four actions:
    • Pass through (zero copy): rows ≥ batch_size / 2 or logical bytes ≥ target / 2, up to 2x the byte target. The wide acceptance band means near-target batches are never copied.
    • Coalesce: small batches are buffered (via arrow BatchCoalescer) and flushed when the buffer reaches the row target or the byte target, whichever first.
    • Split: oversized batches (by rows or bytes) are re-emitted as compact ~target-sized copies (take_record_batch + view-array GC), produced incrementally (one chunk per poll) so peak memory is the parent plus ~one chunk. Copying is load-bearing: zero-copy slices would keep the oversized parent alive.
    • Compact: batches that retain far more memory than they logically use (> 2x and > 1MiB waste, e.g. a small slice pinning a huge parent, or sparse StringView data buffers) are copied so the backing buffers can be freed.
  2. New config datafusion.execution.target_batch_size_bytes (default None = unchanged behavior). When set, DataSourceExec wraps its output in BatchNormalizerStream instead of the row-only BatchSplitStream.
  3. Operator metrics: batches_passed_through, batches_coalesced, batches_split, batches_compacted.

Planned follow-ups (intentionally not in this PR): memory-pool reservation for the normalizer's buffer with a spill fallback (following the RepartitionExec OutputChannel/SpillPool pattern), and byte-aware bounding for operator emit paths (join/aggregate output amplification is not addressable at the scan).

Local benchmark observations (laptop, noisy — GKE runs requested)

Interleaved off/on A/B (2 rounds, per-query minimums, same binary, 16MiB target via DATAFUSION_EXECUTION_TARGET_BATCH_SIZE_BYTES):

  • TPC-H SF1: total off 623ms vs on 678ms. Operator metrics confirm the normalizer is pure zero-copy pass-through on these scans (e.g. Q1/Q6: 742/742 batches_passed_through, 0 copies), so the residual delta is per-batch size measurement overhead and/or laptop noise (off-vs-off noise floor spans 0.66-1.22x per query).
  • ClickBench partitioned: total off 21.9s vs on 22.4s (+2.6%; noise floor p90 1.13x). String-heavy group-by queries (Q13/Q17/Q21) show 1.19-1.25x, slightly above the noise band — likely the StringView waste-compaction path; being investigated with operator metrics. Improvements to 0.81x on Q32/Q33.

Laptop numbers are close to the noise floor; treating the dedicated benchmark runner as the source of truth.

Are these changes tested?

Yes — written test-first (TDD):

  • 18 unit tests covering pass-through zero-copy guarantees (pointer equality), coalesce flush on rows/bytes, incremental split with compaction guarantees (chunks must not retain the parent's buffers, including the StringView GC case), waste compaction and its thresholds, ordering across buffered/pass-through boundaries, single-giant-row and zero-column edge cases, metrics, and the stream adapter.
  • 3 end-to-end tests exercising the config through SessionContext scans.
  • Extended workspace test suite passes; config docs and information_schema.slt regenerated.

Are there any user-facing changes?

New opt-in config option datafusion.execution.target_batch_size_bytes (documented in configs.md). Default behavior is unchanged. No breaking API changes.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm

adriangb and others added 2 commits July 8, 2026 01:25
Adds a sans-IO BatchNormalizer plus a BatchNormalizerStream adapter that
re-chunks a stream of RecordBatches towards a target row count AND byte
size. Per input batch it either passes through (zero copy, wide
acceptance band), coalesces small batches (flushing on rows or bytes,
whichever first), splits oversized batches into compact ~target-sized
copies, or compacts batches that pin far more memory than they use.

Splitting/compaction copies via take + view-array GC: slice/concat are
zero-copy for a single input and would keep the oversized parent
buffers alive.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm
…ource batches

When set, DataSourceExec wraps its output in BatchNormalizerStream
instead of the row-only BatchSplitStream, re-chunking scan output
towards both the row target (batch_size) and the new byte target.
Default is unset (row-based splitting only, unchanged behavior).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm
@adriangb

adriangb commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

run benchmarks

@github-actions github-actions Bot added documentation Improvements or additions to documentation core Core DataFusion crate sqllogictest SQL Logic Tests (.slt) common Related to common crate datasource Changes to the datasource crate physical-plan Changes to the physical-plan crate labels Jul 8, 2026
@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4916045708-908-gtrbf 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (9e3c032) to c2e3473 (merge-base) diff using: tpcds
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4916045708-909-d9wc2 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (9e3c032) to c2e3473 (merge-base) diff using: tpch
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4916045708-907-r8dbp 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (9e3c032) to c2e3473 (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃               batch-normalizer ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.53 / 39.47 ±1.10 / 41.28 ms │ 38.64 / 39.42 ±1.06 / 41.50 ms │     no change │
│ QQuery 2  │ 19.30 / 19.56 ±0.26 / 20.02 ms │ 18.98 / 19.53 ±0.38 / 20.13 ms │     no change │
│ QQuery 3  │ 31.78 / 33.20 ±1.04 / 34.42 ms │ 31.81 / 33.06 ±0.90 / 33.83 ms │     no change │
│ QQuery 4  │ 17.98 / 19.09 ±0.97 / 20.47 ms │ 17.64 / 17.89 ±0.22 / 18.26 ms │ +1.07x faster │
│ QQuery 5  │ 38.79 / 40.75 ±1.02 / 41.60 ms │ 38.33 / 39.95 ±1.40 / 42.07 ms │     no change │
│ QQuery 6  │ 16.12 / 17.04 ±0.96 / 18.85 ms │ 16.30 / 16.39 ±0.06 / 16.49 ms │     no change │
│ QQuery 7  │ 43.63 / 46.62 ±2.93 / 52.03 ms │ 44.87 / 46.01 ±0.93 / 47.52 ms │     no change │
│ QQuery 8  │ 43.30 / 43.55 ±0.18 / 43.79 ms │ 43.22 / 44.89 ±1.61 / 47.07 ms │     no change │
│ QQuery 9  │ 50.37 / 50.78 ±0.23 / 51.06 ms │ 49.82 / 51.11 ±0.80 / 52.14 ms │     no change │
│ QQuery 10 │ 42.50 / 42.79 ±0.33 / 43.39 ms │ 42.66 / 43.70 ±1.16 / 45.16 ms │     no change │
│ QQuery 11 │ 13.68 / 14.49 ±1.12 / 16.67 ms │ 13.69 / 13.75 ±0.05 / 13.85 ms │ +1.05x faster │
│ QQuery 12 │ 23.97 / 24.77 ±0.98 / 26.69 ms │ 24.32 / 24.49 ±0.18 / 24.82 ms │     no change │
│ QQuery 13 │ 32.44 / 33.54 ±1.35 / 36.19 ms │ 32.66 / 33.54 ±0.86 / 34.63 ms │     no change │
│ QQuery 14 │ 24.12 / 24.21 ±0.08 / 24.30 ms │ 24.03 / 24.16 ±0.10 / 24.27 ms │     no change │
│ QQuery 15 │ 31.22 / 32.22 ±1.67 / 35.55 ms │ 31.29 / 31.71 ±0.59 / 32.88 ms │     no change │
│ QQuery 16 │ 13.92 / 14.11 ±0.19 / 14.45 ms │ 14.15 / 14.34 ±0.18 / 14.67 ms │     no change │
│ QQuery 17 │ 73.93 / 75.03 ±1.03 / 76.96 ms │ 73.04 / 74.08 ±0.67 / 75.08 ms │     no change │
│ QQuery 18 │ 58.71 / 59.53 ±0.64 / 60.51 ms │ 60.44 / 61.72 ±1.42 / 63.61 ms │     no change │
│ QQuery 19 │ 33.28 / 33.95 ±0.64 / 35.08 ms │ 35.61 / 35.90 ±0.31 / 36.33 ms │  1.06x slower │
│ QQuery 20 │ 31.94 / 32.39 ±0.44 / 33.17 ms │ 35.31 / 35.99 ±0.64 / 37.16 ms │  1.11x slower │
│ QQuery 21 │ 56.71 / 58.23 ±0.84 / 59.01 ms │ 61.93 / 64.94 ±1.61 / 66.66 ms │  1.12x slower │
│ QQuery 22 │ 14.37 / 14.52 ±0.13 / 14.71 ms │ 15.10 / 15.57 ±0.32 / 16.10 ms │  1.07x slower │
└───────────┴────────────────────────────────┴────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary               ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)               │ 769.84ms │
│ Total Time (batch-normalizer)   │ 782.14ms │
│ Average Time (HEAD)             │  34.99ms │
│ Average Time (batch-normalizer) │  35.55ms │
│ Queries Faster                  │        2 │
│ Queries Slower                  │        4 │
│ Queries with No Change          │       16 │
│ Queries with Failure            │        0 │
└─────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.0s
Peak memory 1.2 GiB
Avg memory 510.2 MiB
CPU user 22.4s
CPU sys 1.6s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.0 GiB
Avg memory 481.0 MiB
CPU user 22.6s
CPU sys 1.9s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃                      batch-normalizer ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 1  │           5.37 / 5.83 ±0.88 / 7.59 ms │           5.32 / 5.80 ±0.89 / 7.58 ms │    no change │
│ QQuery 2  │        80.03 / 80.50 ±0.43 / 81.28 ms │        80.90 / 81.31 ±0.30 / 81.69 ms │    no change │
│ QQuery 3  │        29.20 / 29.59 ±0.43 / 30.36 ms │        29.48 / 29.67 ±0.14 / 29.91 ms │    no change │
│ QQuery 4  │     480.69 / 487.05 ±4.42 / 493.39 ms │     492.79 / 505.76 ±8.72 / 515.54 ms │    no change │
│ QQuery 5  │        51.47 / 51.83 ±0.27 / 52.21 ms │        51.79 / 52.21 ±0.55 / 53.27 ms │    no change │
│ QQuery 6  │        35.83 / 36.57 ±0.46 / 37.28 ms │        36.58 / 37.16 ±0.45 / 37.60 ms │    no change │
│ QQuery 7  │        94.29 / 94.68 ±0.33 / 95.25 ms │        94.99 / 96.40 ±1.83 / 99.97 ms │    no change │
│ QQuery 8  │        36.98 / 39.02 ±2.58 / 44.10 ms │        36.81 / 37.44 ±0.65 / 38.54 ms │    no change │
│ QQuery 9  │        53.67 / 54.24 ±0.40 / 54.68 ms │        53.77 / 55.64 ±1.18 / 57.07 ms │    no change │
│ QQuery 10 │        63.01 / 63.25 ±0.22 / 63.61 ms │        63.75 / 64.06 ±0.19 / 64.30 ms │    no change │
│ QQuery 11 │     293.71 / 299.45 ±4.86 / 306.70 ms │     298.45 / 303.86 ±3.94 / 307.78 ms │    no change │
│ QQuery 12 │        28.31 / 28.60 ±0.20 / 28.87 ms │        28.34 / 28.85 ±0.38 / 29.36 ms │    no change │
│ QQuery 13 │     117.51 / 118.19 ±0.55 / 118.99 ms │     119.65 / 120.22 ±0.73 / 121.65 ms │    no change │
│ QQuery 14 │     411.16 / 413.92 ±2.86 / 418.84 ms │     410.18 / 418.45 ±6.97 / 430.24 ms │    no change │
│ QQuery 15 │        57.19 / 57.84 ±0.57 / 58.79 ms │        56.90 / 57.74 ±0.68 / 58.51 ms │    no change │
│ QQuery 16 │           6.38 / 6.58 ±0.29 / 7.15 ms │           6.58 / 6.73 ±0.23 / 7.18 ms │    no change │
│ QQuery 17 │        79.65 / 80.87 ±0.85 / 82.25 ms │        79.76 / 80.58 ±0.85 / 82.16 ms │    no change │
│ QQuery 18 │     123.60 / 124.84 ±1.04 / 126.68 ms │     123.25 / 124.41 ±1.40 / 126.85 ms │    no change │
│ QQuery 19 │        41.56 / 41.85 ±0.34 / 42.52 ms │        41.60 / 41.85 ±0.18 / 42.12 ms │    no change │
│ QQuery 20 │        35.28 / 35.79 ±0.29 / 36.18 ms │        35.77 / 36.67 ±0.72 / 37.81 ms │    no change │
│ QQuery 21 │        17.26 / 17.57 ±0.26 / 17.91 ms │        17.19 / 17.54 ±0.35 / 18.08 ms │    no change │
│ QQuery 22 │        62.78 / 63.45 ±0.98 / 65.38 ms │        62.58 / 63.32 ±0.57 / 64.33 ms │    no change │
│ QQuery 23 │     344.98 / 348.67 ±4.53 / 357.47 ms │     346.88 / 350.86 ±3.43 / 355.99 ms │    no change │
│ QQuery 24 │     224.31 / 227.78 ±4.10 / 235.23 ms │     226.32 / 228.78 ±3.05 / 234.59 ms │    no change │
│ QQuery 25 │     109.85 / 110.88 ±1.20 / 113.14 ms │     110.08 / 111.44 ±1.20 / 113.66 ms │    no change │
│ QQuery 26 │        57.55 / 59.42 ±3.16 / 65.73 ms │        58.52 / 60.78 ±3.08 / 66.82 ms │    no change │
│ QQuery 27 │           6.15 / 6.29 ±0.14 / 6.54 ms │           6.11 / 6.28 ±0.21 / 6.69 ms │    no change │
│ QQuery 28 │        58.49 / 61.55 ±2.00 / 64.75 ms │        61.39 / 61.92 ±0.42 / 62.44 ms │    no change │
│ QQuery 29 │       97.30 / 98.61 ±1.41 / 101.25 ms │       97.33 / 98.79 ±1.67 / 101.98 ms │    no change │
│ QQuery 30 │        32.43 / 34.19 ±2.26 / 38.48 ms │        32.56 / 33.10 ±0.46 / 33.83 ms │    no change │
│ QQuery 31 │     111.32 / 113.34 ±1.42 / 115.10 ms │     112.11 / 112.38 ±0.22 / 112.70 ms │    no change │
│ QQuery 32 │        19.96 / 20.36 ±0.39 / 21.08 ms │        20.08 / 20.47 ±0.29 / 20.92 ms │    no change │
│ QQuery 33 │        37.92 / 38.26 ±0.27 / 38.74 ms │        37.89 / 38.28 ±0.31 / 38.74 ms │    no change │
│ QQuery 34 │          9.74 / 9.93 ±0.22 / 10.21 ms │          9.63 / 9.93 ±0.24 / 10.26 ms │    no change │
│ QQuery 35 │        72.93 / 75.07 ±2.17 / 78.92 ms │        72.56 / 72.78 ±0.19 / 73.12 ms │    no change │
│ QQuery 36 │           5.62 / 5.78 ±0.18 / 6.13 ms │           5.64 / 5.77 ±0.21 / 6.19 ms │    no change │
│ QQuery 37 │           6.76 / 6.87 ±0.08 / 6.97 ms │           6.92 / 7.00 ±0.07 / 7.12 ms │    no change │
│ QQuery 38 │        62.04 / 62.26 ±0.23 / 62.65 ms │        62.18 / 62.66 ±0.32 / 62.94 ms │    no change │
│ QQuery 39 │        89.67 / 90.54 ±0.93 / 92.27 ms │        91.53 / 93.49 ±2.82 / 99.10 ms │    no change │
│ QQuery 40 │        23.83 / 24.21 ±0.33 / 24.73 ms │        23.56 / 24.20 ±0.45 / 24.92 ms │    no change │
│ QQuery 41 │        11.39 / 11.54 ±0.20 / 11.94 ms │        11.76 / 11.95 ±0.17 / 12.25 ms │    no change │
│ QQuery 42 │        23.85 / 24.70 ±0.71 / 25.84 ms │        24.35 / 24.83 ±0.44 / 25.44 ms │    no change │
│ QQuery 43 │           4.78 / 4.86 ±0.12 / 5.10 ms │           4.80 / 4.93 ±0.20 / 5.32 ms │    no change │
│ QQuery 44 │           8.96 / 9.13 ±0.11 / 9.23 ms │           9.23 / 9.34 ±0.09 / 9.48 ms │    no change │
│ QQuery 45 │        37.69 / 38.48 ±0.49 / 39.15 ms │        40.41 / 41.45 ±0.69 / 42.24 ms │ 1.08x slower │
│ QQuery 46 │        11.41 / 11.67 ±0.23 / 12.04 ms │        11.95 / 12.19 ±0.32 / 12.82 ms │    no change │
│ QQuery 47 │     223.64 / 227.98 ±3.69 / 232.22 ms │     226.48 / 235.12 ±5.10 / 240.97 ms │    no change │
│ QQuery 48 │        96.47 / 98.22 ±1.10 / 99.60 ms │        97.28 / 97.82 ±0.57 / 98.88 ms │    no change │
│ QQuery 49 │        76.42 / 77.38 ±0.95 / 79.17 ms │        76.30 / 78.76 ±4.16 / 87.06 ms │    no change │
│ QQuery 50 │        58.69 / 60.18 ±2.33 / 64.81 ms │        59.38 / 60.28 ±0.71 / 61.54 ms │    no change │
│ QQuery 51 │        91.35 / 93.04 ±1.23 / 94.86 ms │        92.22 / 93.86 ±1.33 / 96.17 ms │    no change │
│ QQuery 52 │        24.09 / 24.31 ±0.17 / 24.50 ms │        24.12 / 24.43 ±0.18 / 24.66 ms │    no change │
│ QQuery 53 │        29.59 / 29.68 ±0.15 / 29.99 ms │        29.71 / 31.61 ±3.12 / 37.79 ms │ 1.06x slower │
│ QQuery 54 │        54.83 / 57.10 ±3.15 / 63.30 ms │        55.58 / 56.31 ±0.42 / 56.69 ms │    no change │
│ QQuery 55 │        23.58 / 24.12 ±0.36 / 24.70 ms │        23.41 / 23.86 ±0.48 / 24.69 ms │    no change │
│ QQuery 56 │        38.80 / 39.34 ±0.35 / 39.82 ms │        39.10 / 39.30 ±0.20 / 39.57 ms │    no change │
│ QQuery 57 │     175.29 / 177.76 ±3.25 / 184.11 ms │     176.20 / 179.29 ±4.02 / 187.24 ms │    no change │
│ QQuery 58 │     115.02 / 115.56 ±0.46 / 116.27 ms │     115.73 / 117.21 ±1.25 / 119.22 ms │    no change │
│ QQuery 59 │     116.86 / 117.89 ±1.09 / 119.86 ms │     117.81 / 118.44 ±0.63 / 119.54 ms │    no change │
│ QQuery 60 │        39.38 / 39.90 ±0.37 / 40.42 ms │        39.41 / 39.99 ±0.50 / 40.87 ms │    no change │
│ QQuery 61 │        11.83 / 11.97 ±0.20 / 12.37 ms │        12.29 / 12.38 ±0.11 / 12.56 ms │    no change │
│ QQuery 62 │        46.10 / 46.23 ±0.07 / 46.31 ms │        46.32 / 48.07 ±2.14 / 52.24 ms │    no change │
│ QQuery 63 │        29.88 / 30.28 ±0.39 / 31.02 ms │        29.69 / 30.48 ±0.54 / 31.38 ms │    no change │
│ QQuery 64 │     412.13 / 415.29 ±4.24 / 423.61 ms │     410.29 / 417.20 ±6.57 / 427.92 ms │    no change │
│ QQuery 65 │     143.44 / 146.80 ±2.34 / 149.55 ms │     146.67 / 149.36 ±2.40 / 153.82 ms │    no change │
│ QQuery 66 │        79.35 / 82.93 ±3.93 / 90.33 ms │        78.96 / 79.89 ±0.84 / 81.25 ms │    no change │
│ QQuery 67 │     236.43 / 244.73 ±7.58 / 255.60 ms │     239.12 / 242.94 ±3.40 / 248.49 ms │    no change │
│ QQuery 68 │        11.58 / 11.77 ±0.21 / 12.15 ms │        11.72 / 11.87 ±0.22 / 12.31 ms │    no change │
│ QQuery 69 │        57.08 / 57.59 ±0.39 / 58.05 ms │        57.82 / 60.46 ±4.54 / 69.52 ms │    no change │
│ QQuery 70 │     104.92 / 110.47 ±8.90 / 128.14 ms │     104.92 / 106.74 ±2.22 / 111.08 ms │    no change │
│ QQuery 71 │        35.57 / 36.22 ±0.57 / 37.26 ms │        35.55 / 36.49 ±1.47 / 39.43 ms │    no change │
│ QQuery 72 │ 2095.58 / 2153.44 ±48.02 / 2240.13 ms │ 2106.86 / 2146.33 ±57.98 / 2260.57 ms │    no change │
│ QQuery 73 │           9.32 / 9.46 ±0.20 / 9.86 ms │          9.38 / 9.63 ±0.21 / 10.02 ms │    no change │
│ QQuery 74 │     174.23 / 179.54 ±3.80 / 185.76 ms │     168.80 / 173.01 ±4.06 / 180.62 ms │    no change │
│ QQuery 75 │     149.42 / 153.21 ±5.19 / 163.03 ms │     149.50 / 153.20 ±5.12 / 163.36 ms │    no change │
│ QQuery 76 │        36.08 / 37.40 ±1.66 / 40.61 ms │        35.08 / 35.93 ±0.68 / 36.76 ms │    no change │
│ QQuery 77 │        61.33 / 61.64 ±0.29 / 62.17 ms │        60.69 / 61.20 ±0.49 / 61.92 ms │    no change │
│ QQuery 78 │     201.57 / 207.89 ±7.91 / 223.45 ms │     195.83 / 200.58 ±4.61 / 209.29 ms │    no change │
│ QQuery 79 │        67.05 / 67.55 ±0.30 / 67.93 ms │        67.10 / 68.19 ±1.32 / 70.76 ms │    no change │
│ QQuery 80 │      98.27 / 102.25 ±3.93 / 109.55 ms │      99.33 / 101.04 ±1.60 / 103.90 ms │    no change │
│ QQuery 81 │        25.37 / 26.11 ±0.56 / 26.90 ms │        25.67 / 25.87 ±0.20 / 26.23 ms │    no change │
│ QQuery 82 │        16.13 / 16.46 ±0.21 / 16.76 ms │        16.52 / 16.65 ±0.11 / 16.78 ms │    no change │
│ QQuery 83 │        39.81 / 39.90 ±0.08 / 40.04 ms │        39.80 / 40.84 ±1.46 / 43.73 ms │    no change │
│ QQuery 84 │        30.20 / 31.96 ±2.83 / 37.60 ms │        30.26 / 32.79 ±3.00 / 37.94 ms │    no change │
│ QQuery 85 │     106.09 / 107.62 ±1.59 / 110.64 ms │     108.28 / 108.90 ±0.61 / 110.06 ms │    no change │
│ QQuery 86 │        24.67 / 25.20 ±0.28 / 25.48 ms │        26.02 / 26.30 ±0.23 / 26.70 ms │    no change │
│ QQuery 87 │        61.98 / 62.50 ±0.42 / 63.05 ms │        64.31 / 67.00 ±3.66 / 74.08 ms │ 1.07x slower │
│ QQuery 88 │        63.24 / 65.37 ±2.20 / 68.98 ms │        63.86 / 64.17 ±0.31 / 64.73 ms │    no change │
│ QQuery 89 │        35.79 / 36.45 ±0.46 / 36.90 ms │        36.34 / 36.80 ±0.28 / 37.09 ms │    no change │
│ QQuery 90 │        16.86 / 17.03 ±0.17 / 17.36 ms │        17.45 / 17.81 ±0.24 / 18.08 ms │    no change │
│ QQuery 91 │        45.16 / 45.69 ±0.32 / 46.07 ms │        46.45 / 46.95 ±0.35 / 47.43 ms │    no change │
│ QQuery 92 │        29.25 / 29.61 ±0.21 / 29.81 ms │        29.97 / 32.24 ±2.00 / 35.79 ms │ 1.09x slower │
│ QQuery 93 │        49.79 / 51.89 ±2.74 / 57.26 ms │        51.11 / 51.92 ±0.67 / 52.68 ms │    no change │
│ QQuery 94 │        37.78 / 39.08 ±0.82 / 40.13 ms │        39.21 / 39.25 ±0.03 / 39.30 ms │    no change │
│ QQuery 95 │        81.09 / 81.58 ±0.34 / 81.99 ms │        82.33 / 83.23 ±0.50 / 83.69 ms │    no change │
│ QQuery 96 │        24.07 / 24.38 ±0.30 / 24.91 ms │        24.89 / 26.92 ±2.38 / 31.18 ms │ 1.10x slower │
│ QQuery 97 │        46.43 / 47.14 ±0.83 / 48.74 ms │        46.91 / 47.97 ±0.99 / 49.81 ms │    no change │
│ QQuery 98 │        42.10 / 43.23 ±1.00 / 45.08 ms │        42.79 / 43.31 ±0.34 / 43.85 ms │    no change │
│ QQuery 99 │        69.80 / 70.31 ±0.27 / 70.57 ms │        70.25 / 70.62 ±0.32 / 71.04 ms │    no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary               ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)               │ 9936.53ms │
│ Total Time (batch-normalizer)   │ 9990.07ms │
│ Average Time (HEAD)             │  100.37ms │
│ Average Time (batch-normalizer) │  100.91ms │
│ Queries Faster                  │         0 │
│ Queries Slower                  │         5 │
│ Queries with No Change          │        94 │
│ Queries with Failure            │         0 │
└─────────────────────────────────┴───────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 55.0s
Peak memory 2.0 GiB
Avg memory 1.3 GiB
CPU user 226.3s
CPU sys 5.9s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 55.0s
Peak memory 2.2 GiB
Avg memory 1.4 GiB
CPU user 225.4s
CPU sys 5.9s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃                      batch-normalizer ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.24 / 4.08 ±5.55 / 15.19 ms │          1.26 / 4.09 ±5.54 / 15.16 ms │     no change │
│ QQuery 1  │        12.92 / 13.11 ±0.13 / 13.28 ms │        12.55 / 13.12 ±0.29 / 13.38 ms │     no change │
│ QQuery 2  │        35.69 / 36.06 ±0.43 / 36.75 ms │        37.30 / 37.47 ±0.22 / 37.91 ms │     no change │
│ QQuery 3  │        30.77 / 31.44 ±0.90 / 33.21 ms │        31.46 / 31.82 ±0.34 / 32.38 ms │     no change │
│ QQuery 4  │     231.79 / 234.22 ±1.92 / 237.46 ms │     230.08 / 231.22 ±0.76 / 232.47 ms │     no change │
│ QQuery 5  │     274.09 / 281.15 ±4.08 / 285.61 ms │     280.37 / 281.96 ±1.86 / 285.52 ms │     no change │
│ QQuery 6  │           1.25 / 1.41 ±0.24 / 1.88 ms │           1.27 / 1.41 ±0.22 / 1.84 ms │     no change │
│ QQuery 7  │        13.81 / 14.01 ±0.15 / 14.19 ms │        13.97 / 14.15 ±0.18 / 14.44 ms │     no change │
│ QQuery 8  │     327.92 / 332.28 ±2.89 / 336.96 ms │     332.08 / 333.95 ±1.72 / 336.96 ms │     no change │
│ QQuery 9  │     465.80 / 472.70 ±5.66 / 479.52 ms │     469.55 / 479.07 ±6.46 / 485.88 ms │     no change │
│ QQuery 10 │        69.40 / 71.47 ±1.23 / 72.74 ms │        73.69 / 78.03 ±5.60 / 88.88 ms │  1.09x slower │
│ QQuery 11 │        82.78 / 83.30 ±0.43 / 83.84 ms │        85.02 / 86.24 ±0.88 / 87.38 ms │     no change │
│ QQuery 12 │     273.47 / 277.95 ±2.29 / 279.88 ms │     273.36 / 281.77 ±6.85 / 293.39 ms │     no change │
│ QQuery 13 │     371.77 / 383.35 ±8.14 / 393.27 ms │    376.95 / 394.22 ±11.01 / 405.68 ms │     no change │
│ QQuery 14 │     286.82 / 291.55 ±2.75 / 294.10 ms │    290.90 / 308.40 ±17.32 / 334.24 ms │  1.06x slower │
│ QQuery 15 │     273.56 / 282.11 ±7.21 / 294.00 ms │     280.91 / 295.21 ±9.75 / 311.17 ms │     no change │
│ QQuery 16 │    626.82 / 639.11 ±10.81 / 656.57 ms │     634.96 / 647.17 ±7.75 / 655.61 ms │     no change │
│ QQuery 17 │    627.08 / 646.19 ±18.76 / 680.43 ms │    644.00 / 664.83 ±16.20 / 689.61 ms │     no change │
│ QQuery 18 │ 1271.39 / 1305.20 ±32.58 / 1358.48 ms │ 1298.21 / 1320.26 ±16.62 / 1335.30 ms │     no change │
│ QQuery 19 │        27.93 / 28.24 ±0.20 / 28.47 ms │       28.56 / 38.47 ±18.75 / 75.97 ms │  1.36x slower │
│ QQuery 20 │    518.77 / 535.97 ±10.32 / 548.57 ms │    519.95 / 529.87 ±10.21 / 545.81 ms │     no change │
│ QQuery 21 │     516.96 / 527.44 ±9.05 / 542.99 ms │     519.53 / 524.82 ±5.03 / 532.06 ms │     no change │
│ QQuery 22 │    984.91 / 996.47 ±6.82 / 1004.82 ms │   992.98 / 1002.20 ±6.91 / 1011.72 ms │     no change │
│ QQuery 23 │ 3094.95 / 3116.65 ±21.27 / 3153.66 ms │ 3121.02 / 3161.11 ±24.95 / 3186.39 ms │     no change │
│ QQuery 24 │        41.80 / 41.89 ±0.08 / 42.00 ms │        41.49 / 41.88 ±0.35 / 42.53 ms │     no change │
│ QQuery 25 │     112.42 / 114.27 ±1.79 / 117.53 ms │     114.59 / 117.82 ±4.54 / 126.55 ms │     no change │
│ QQuery 26 │        41.92 / 43.89 ±2.45 / 48.64 ms │        42.22 / 44.29 ±2.81 / 49.71 ms │     no change │
│ QQuery 27 │     675.26 / 680.93 ±3.13 / 684.40 ms │     672.76 / 682.46 ±8.93 / 698.34 ms │     no change │
│ QQuery 28 │ 3055.80 / 3088.31 ±18.24 / 3108.40 ms │ 3068.00 / 3082.86 ±18.08 / 3117.36 ms │     no change │
│ QQuery 29 │      41.06 / 57.25 ±23.31 / 101.17 ms │        41.82 / 45.41 ±6.25 / 57.87 ms │ +1.26x faster │
│ QQuery 30 │     301.05 / 312.72 ±6.14 / 318.08 ms │     306.48 / 315.04 ±8.16 / 327.81 ms │     no change │
│ QQuery 31 │     286.11 / 294.65 ±6.82 / 302.07 ms │     295.23 / 300.37 ±4.11 / 305.46 ms │     no change │
│ QQuery 32 │ 1003.05 / 1041.88 ±33.38 / 1086.18 ms │  999.24 / 1017.81 ±19.46 / 1049.74 ms │     no change │
│ QQuery 33 │  1512.51 / 1523.65 ±9.61 / 1535.76 ms │ 1526.76 / 1545.55 ±15.54 / 1573.06 ms │     no change │
│ QQuery 34 │ 1512.99 / 1532.85 ±17.23 / 1553.91 ms │ 1507.55 / 1536.85 ±18.99 / 1565.91 ms │     no change │
│ QQuery 35 │    286.88 / 307.83 ±24.65 / 348.07 ms │    291.06 / 333.50 ±47.50 / 417.51 ms │  1.08x slower │
│ QQuery 36 │        68.61 / 79.88 ±7.77 / 92.58 ms │        68.34 / 74.17 ±4.31 / 78.36 ms │ +1.08x faster │
│ QQuery 37 │        36.11 / 36.48 ±0.26 / 36.87 ms │        36.88 / 42.81 ±8.69 / 60.06 ms │  1.17x slower │
│ QQuery 38 │        43.15 / 48.67 ±3.60 / 53.13 ms │        41.66 / 45.22 ±2.25 / 48.63 ms │ +1.08x faster │
│ QQuery 39 │     134.47 / 148.54 ±7.96 / 157.21 ms │     147.46 / 153.40 ±3.76 / 158.36 ms │     no change │
│ QQuery 40 │        14.56 / 15.21 ±0.58 / 16.05 ms │        14.52 / 14.58 ±0.08 / 14.73 ms │     no change │
│ QQuery 41 │        14.29 / 15.94 ±2.76 / 21.43 ms │        14.14 / 15.20 ±1.92 / 19.04 ms │     no change │
│ QQuery 42 │        13.55 / 16.19 ±2.85 / 20.01 ms │        13.60 / 13.86 ±0.19 / 14.17 ms │ +1.17x faster │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary               ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)               │ 20006.48ms │
│ Total Time (batch-normalizer)   │ 20183.92ms │
│ Average Time (HEAD)             │   465.27ms │
│ Average Time (batch-normalizer) │   469.39ms │
│ Queries Faster                  │          4 │
│ Queries Slower                  │          5 │
│ Queries with No Change          │         34 │
│ Queries with Failure            │          0 │
└─────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 105.0s
Peak memory 12.2 GiB
Avg memory 4.3 GiB
CPU user 1023.4s
CPU sys 72.8s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 105.0s
Peak memory 12.2 GiB
Avg memory 4.4 GiB
CPU user 1030.1s
CPU sys 75.0s
Peak spill 0 B

File an issue against this benchmark runner

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

Thank you for opening this pull request!

Reviewer note: cargo-semver-checks reported the current version number is not SemVer-compatible with the changes in this pull request (compared against the base branch).

Details
     Cloning apache/main
    Building datafusion v54.0.0 (current)
       Built [  85.524s] (current)
     Parsing datafusion v54.0.0 (current)
      Parsed [   0.030s] (current)
    Building datafusion v54.0.0 (baseline)
       Built [  84.902s] (baseline)
     Parsing datafusion v54.0.0 (baseline)
      Parsed [   0.030s] (baseline)
    Checking datafusion v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   0.860s] 223 checks: 223 pass, 30 skip
     Summary no semver update required
    Finished [ 173.184s] datafusion
    Building datafusion-common v54.0.0 (current)
       Built [  27.752s] (current)
     Parsing datafusion-common v54.0.0 (current)
      Parsed [   0.052s] (current)
    Building datafusion-common v54.0.0 (baseline)
       Built [  27.795s] (baseline)
     Parsing datafusion-common v54.0.0 (baseline)
      Parsed [   0.052s] (baseline)
    Checking datafusion-common v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   0.912s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure constructible_struct_adds_field: externally-constructible struct adds field ---

Description:
A pub struct constructible with a struct literal has a new pub field. Existing struct literals must be updated to include the new field.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field ExecutionOptions.target_batch_size_bytes in /home/runner/work/datafusion/datafusion/datafusion/common/src/config.rs:723
  field ExecutionOptions.adaptive_target_batch_size in /home/runner/work/datafusion/datafusion/datafusion/common/src/config.rs:723

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  57.886s] datafusion-common
    Building datafusion-datasource v54.0.0 (current)
       Built [  32.382s] (current)
     Parsing datafusion-datasource v54.0.0 (current)
      Parsed [   0.026s] (current)
    Building datafusion-datasource v54.0.0 (baseline)
       Built [  31.924s] (baseline)
     Parsing datafusion-datasource v54.0.0 (baseline)
      Parsed [   0.029s] (baseline)
    Checking datafusion-datasource v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   0.335s] 223 checks: 223 pass, 30 skip
     Summary no semver update required
    Finished [  65.758s] datafusion-datasource
    Building datafusion-physical-plan v54.0.0 (current)
       Built [  30.649s] (current)
     Parsing datafusion-physical-plan v54.0.0 (current)
      Parsed [   0.116s] (current)
    Building datafusion-physical-plan v54.0.0 (baseline)
       Built [  30.308s] (baseline)
     Parsing datafusion-physical-plan v54.0.0 (baseline)
      Parsed [   0.116s] (baseline)
    Checking datafusion-physical-plan v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   0.763s] 223 checks: 222 pass, 1 fail, 0 warn, 30 skip

--- failure function_parameter_count_changed: pub fn parameter count changed ---

Description:
A publicly-visible function now takes a different number of parameters.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#fn-change-arity
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.48.0/src/lints/function_parameter_count_changed.ron

Failed in:
  datafusion_physical_plan::sorts::sort::sort_batch_chunked now takes 4 parameters instead of 3, in /home/runner/work/datafusion/datafusion/datafusion/physical-plan/src/sorts/sort.rs:935

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  63.897s] datafusion-physical-plan
    Building datafusion-sqllogictest v54.0.0 (current)
       Built [ 146.312s] (current)
     Parsing datafusion-sqllogictest v54.0.0 (current)
      Parsed [   0.019s] (current)
    Building datafusion-sqllogictest v54.0.0 (baseline)
       Built [ 144.565s] (baseline)
     Parsing datafusion-sqllogictest v54.0.0 (baseline)
      Parsed [   0.020s] (baseline)
    Checking datafusion-sqllogictest v54.0.0 -> v54.0.0 (no change; assume patch)
     Checked [   0.107s] 223 checks: 223 pass, 30 skip
     Summary no semver update required
    Finished [ 294.202s] datafusion-sqllogictest

@github-actions github-actions Bot added the auto detected api change Auto detected API change label Jul 8, 2026
Existing suites (TPC-H, ClickBench) decode to ~1MiB batches and never
exercise the oversized-batch regime that target_batch_size_bytes
addresses. This benchmark generates incompressible multi-KiB string
values (default: 64k rows x 16KiB over 8 files, so each file decodes to
a single ~134MiB batch within the 8192-row limit) and runs 5 queries
stressing scan+filter, sort (small key / large key), aggregation, and
hash join. Designed for A/B runs of target_batch_size_bytes, optionally
under --memory-limit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm
@adriangb

adriangb commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

large_values benchmark results (new suite in this PR)

Since existing suites decode to ~1MiB batches (the normalizer is metrics-provably pure pass-through on TPC-H/ClickBench scans), commit 075ac32 adds a large_values dfbench suite: incompressible multi-KiB string values, so each parquet file decodes to a single 100MB+ batch within the 8192-row limit. Queries stress scan+filter, sort (small/large key), aggregation, and join. A/B = DATAFUSION_EXECUTION_TARGET_BATCH_SIZE_BYTES=16MiB vs unset, same binary.

16KiB values (134MB decoded batches), laptop:

scenario off on
unlimited memory, Q1-Q5 baseline +5-10% (worst case: every batch is split, ~1GiB copied per query)
--memory-limit 4G Q2 sort, n=4 819ms 630ms (-23%)
--memory-limit 4G Q2 sort, n=12 427ms 360ms (-16%)
--memory-limit 2G Q2/Q3 sorts FAIL in ExternalSorter insert (cannot reserve 2x134MB against fair share) FAIL, but much later: merge phase

64KiB values (536MB decoded batches), --memory-limit 2G: off fails instantly in ExternalSorter; on sorts + spills fine and then fails in the merge with a telling profile:

ExternalSorterMerge[0]#2(can spill: false) consumed 1106.2 MB
ExternalSorterMerge[1]#4(can spill: false) consumed 878.9 MB
Failed to allocate additional 639.1 MB for SortPreservingMergeExec[0]

A 639MB single allocation despite 16MiB input chunks: the sorter re-chunks its own output at batch_size rows (8192 x 64KiB = 536MB), reconstructing oversized batches downstream of the normalizer. Input-side normalization visibly helps (spill-heavy sorts get 16-23% faster, and the failure point moves from "cannot buffer one batch" to the merge), but completing these queries under tight limits needs byte-aware output chunking in sort/merge — the operator-emit-path follow-up called out in the PR description.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm

adriangb and others added 2 commits July 8, 2026 11:25
The sorter and streaming merge re-chunk their output at batch_size rows
only, so wide rows rebuild oversized batches downstream of a normalized
scan: sorting 536MB decoded batches under a 2GB limit failed in the
merge phase with ~1.1GB ExternalSorterMerge reservations (sized by the
largest spilled batch) and a single 639MB SortPreservingMergeExec grow.

When datafusion.execution.target_batch_size_bytes is set:
- IncrementalSortIterator (sorted-output chunking, also used by the
  aggregate spill path) reduces its chunk row count so chunks are about
  the byte target
- BatchBuilder tracks the estimated bytes of in-progress rows and the
  streaming merge emits when the row count OR the byte target is
  reached, plumbed through StreamingMergeBuilder/MultiLevelMergeBuilder
  and read from session config by SortExec, SortPreservingMergeExec and
  GroupedHashAggregateStream

Unset (default) keeps row-only chunking, byte-for-byte.

With this, the large_values 64KiB benchmark (536MB decoded batches,
2GB memory limit) goes from ResourcesExhausted to completing: spill
file batches shrink to the byte target, cutting merge reservations
from ~1.1GB to ~128MB per partition.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm
…ill output

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm
@adriangb

adriangb commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

Update: byte-aware sort/merge output chunking (commit 88bdade)

Following up on the finding above (the sorter re-chunks its own output at batch_size rows, rebuilding oversized batches downstream of a normalized scan): when target_batch_size_bytes is set, sorted-output chunking (IncrementalSortIterator, also used by the aggregation spill path) and the streaming merge (BatchBuilder emit, plumbed through StreamingMergeBuilder/MultiLevelMergeBuilder into SortExec, SortPreservingMergeExec, and GroupedHashAggregateStream) now emit when the row count or the estimated byte target is reached. Unset keeps row-only chunking byte-for-byte.

Result on the large_values benchmark, --memory-limit 2G:

dataset off on (before this commit) on (now)
64KiB values (536MB decoded batches), Q2 sort, n=4 FAIL (ExternalSorter cannot reserve 2x536MB) FAIL in merge (ExternalSorterMerge ~1.1GB reservations, 639MB single SPM grow) completes, 2.6s
16KiB values (134MB batches), all 5 queries, n=4 Q2/Q3 FAIL Q2/Q3 FAIL all 5 complete

The mechanism is visible in the memory profiles: spill-file batches now respect the byte target, so per-partition merge reservations (sized from the largest spilled batch) drop from ~1.1GB to ~128MB.

Remaining boundary: at 12 concurrent sort partitions in a pool ~2x the data size, the aggregate of per-partition merge reservations plus the top-level SPM buffering can still exhaust the fair pool — that is a genuine concurrent-capacity limit (and FairSpillPool interplay) rather than byte-blindness, left for follow-up.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm
@adriangb

adriangb commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

run benchmarks

@adriangb

adriangb commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark tpch tpch_mem clickbench_partitioned tpcds external_aggr

baseline:
ref: 047ea98
changed:
env:
DATAFUSION_EXECUTION_TARGET_BATCH_SIZE_BYTES: "16777216"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4917246033-910-8fcz7 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (047ea98) to c2e3473 (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4917246160-914-hnnzf 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (047ea98) to 047ea98 diff using: tpch_mem
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4917246160-915-v2zl8 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (047ea98) to 047ea98 diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4917246033-911-lfwkl 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (047ea98) to c2e3473 (merge-base) diff using: tpcds
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4917246033-912-lh567 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (047ea98) to c2e3473 (merge-base) diff using: tpch
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4918488456-920-x95pk 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (2cf5402) to 2cf5402 diff using: tpch
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃               batch-normalizer ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 1  │ 38.36 / 39.85 ±1.47 / 41.72 ms │ 38.94 / 40.08 ±0.97 / 41.61 ms │ no change │
│ QQuery 2  │ 19.53 / 19.78 ±0.14 / 19.90 ms │ 19.09 / 19.45 ±0.39 / 20.20 ms │ no change │
│ QQuery 3  │ 30.71 / 32.76 ±1.59 / 34.65 ms │ 31.46 / 32.96 ±1.18 / 34.13 ms │ no change │
│ QQuery 4  │ 17.36 / 17.55 ±0.18 / 17.83 ms │ 17.42 / 17.62 ±0.11 / 17.75 ms │ no change │
│ QQuery 5  │ 38.14 / 40.11 ±1.12 / 41.41 ms │ 37.87 / 40.67 ±1.53 / 42.33 ms │ no change │
│ QQuery 6  │ 16.10 / 16.74 ±1.20 / 19.13 ms │ 16.32 / 16.51 ±0.15 / 16.75 ms │ no change │
│ QQuery 7  │ 43.96 / 45.06 ±0.98 / 46.70 ms │ 43.37 / 44.72 ±0.97 / 46.09 ms │ no change │
│ QQuery 8  │ 43.07 / 43.82 ±0.76 / 45.28 ms │ 43.54 / 43.65 ±0.07 / 43.75 ms │ no change │
│ QQuery 9  │ 49.47 / 50.25 ±0.83 / 51.74 ms │ 49.10 / 50.31 ±0.76 / 51.29 ms │ no change │
│ QQuery 10 │ 41.99 / 43.70 ±1.26 / 45.06 ms │ 42.69 / 43.16 ±0.78 / 44.73 ms │ no change │
│ QQuery 11 │ 13.16 / 13.38 ±0.19 / 13.70 ms │ 13.36 / 13.69 ±0.38 / 14.42 ms │ no change │
│ QQuery 12 │ 23.87 / 24.34 ±0.27 / 24.60 ms │ 24.37 / 24.66 ±0.29 / 25.16 ms │ no change │
│ QQuery 13 │ 32.20 / 33.96 ±2.60 / 39.05 ms │ 33.59 / 35.39 ±1.68 / 38.57 ms │ no change │
│ QQuery 14 │ 23.80 / 24.61 ±1.21 / 27.01 ms │ 23.89 / 24.08 ±0.14 / 24.29 ms │ no change │
│ QQuery 15 │ 30.57 / 31.09 ±0.67 / 32.41 ms │ 31.43 / 31.53 ±0.07 / 31.62 ms │ no change │
│ QQuery 16 │ 13.73 / 13.90 ±0.14 / 14.12 ms │ 14.06 / 14.25 ±0.13 / 14.46 ms │ no change │
│ QQuery 17 │ 71.78 / 73.20 ±1.29 / 75.60 ms │ 74.63 / 75.04 ±0.34 / 75.65 ms │ no change │
│ QQuery 18 │ 59.14 / 59.72 ±0.71 / 61.07 ms │ 57.98 / 59.65 ±1.51 / 61.95 ms │ no change │
│ QQuery 19 │ 32.83 / 33.93 ±1.04 / 35.40 ms │ 33.59 / 33.94 ±0.27 / 34.40 ms │ no change │
│ QQuery 20 │ 31.58 / 31.98 ±0.34 / 32.58 ms │ 32.27 / 32.42 ±0.18 / 32.75 ms │ no change │
│ QQuery 21 │ 53.65 / 55.23 ±1.31 / 57.21 ms │ 55.46 / 56.56 ±1.11 / 58.13 ms │ no change │
│ QQuery 22 │ 13.79 / 13.90 ±0.19 / 14.29 ms │ 13.92 / 14.07 ±0.09 / 14.18 ms │ no change │
└───────────┴────────────────────────────────┴────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary               ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)               │ 758.88ms │
│ Total Time (batch-normalizer)   │ 764.40ms │
│ Average Time (HEAD)             │  34.49ms │
│ Average Time (batch-normalizer) │  34.75ms │
│ Queries Faster                  │        0 │
│ Queries Slower                  │        0 │
│ Queries with No Change          │       22 │
│ Queries with Failure            │        0 │
└─────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.0s
Peak memory 1.3 GiB
Avg memory 573.1 MiB
CPU user 22.0s
CPU sys 1.5s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.1 GiB
Avg memory 491.6 MiB
CPU user 22.2s
CPU sys 1.6s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃                      batch-normalizer ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.22 / 3.85 ±5.21 / 14.26 ms │          1.19 / 3.80 ±5.16 / 14.12 ms │     no change │
│ QQuery 1  │        12.96 / 13.12 ±0.17 / 13.36 ms │        12.61 / 12.79 ±0.13 / 12.92 ms │     no change │
│ QQuery 2  │        37.22 / 37.36 ±0.18 / 37.70 ms │        35.85 / 36.20 ±0.28 / 36.70 ms │     no change │
│ QQuery 3  │        31.05 / 31.54 ±0.73 / 32.97 ms │        30.19 / 30.76 ±0.57 / 31.84 ms │     no change │
│ QQuery 4  │     217.85 / 223.13 ±2.77 / 225.48 ms │     220.40 / 224.28 ±3.68 / 230.91 ms │     no change │
│ QQuery 5  │     266.81 / 269.70 ±2.50 / 274.22 ms │     270.90 / 272.81 ±1.49 / 275.14 ms │     no change │
│ QQuery 6  │           1.29 / 1.46 ±0.24 / 1.93 ms │           1.24 / 1.39 ±0.23 / 1.84 ms │     no change │
│ QQuery 7  │        13.94 / 14.19 ±0.17 / 14.45 ms │        13.70 / 13.76 ±0.05 / 13.83 ms │     no change │
│ QQuery 8  │     317.47 / 322.55 ±4.33 / 329.60 ms │     316.66 / 319.16 ±2.68 / 324.24 ms │     no change │
│ QQuery 9  │     442.43 / 451.79 ±5.01 / 456.15 ms │    440.07 / 454.79 ±12.82 / 478.77 ms │     no change │
│ QQuery 10 │        71.93 / 73.26 ±1.06 / 74.56 ms │        73.49 / 73.90 ±0.45 / 74.69 ms │     no change │
│ QQuery 11 │        82.42 / 83.76 ±0.87 / 85.14 ms │        84.62 / 85.30 ±0.78 / 86.81 ms │     no change │
│ QQuery 12 │     263.17 / 268.19 ±4.27 / 275.14 ms │     265.17 / 272.97 ±7.14 / 285.17 ms │     no change │
│ QQuery 13 │     364.55 / 372.57 ±5.54 / 380.57 ms │     371.75 / 380.59 ±8.25 / 394.71 ms │     no change │
│ QQuery 14 │     280.09 / 282.99 ±1.84 / 285.75 ms │     281.13 / 286.81 ±9.78 / 306.32 ms │     no change │
│ QQuery 15 │     263.13 / 269.26 ±3.60 / 273.21 ms │     268.14 / 276.12 ±4.57 / 280.70 ms │     no change │
│ QQuery 16 │     602.93 / 612.46 ±7.05 / 623.18 ms │     613.59 / 620.89 ±3.91 / 625.21 ms │     no change │
│ QQuery 17 │     612.51 / 621.15 ±5.19 / 627.37 ms │     612.16 / 627.08 ±8.21 / 635.61 ms │     no change │
│ QQuery 18 │  1247.15 / 1251.59 ±4.79 / 1260.15 ms │ 1224.76 / 1256.37 ±25.50 / 1288.63 ms │     no change │
│ QQuery 19 │       28.89 / 34.68 ±10.71 / 56.06 ms │        27.98 / 28.97 ±1.09 / 30.55 ms │ +1.20x faster │
│ QQuery 20 │     518.91 / 525.03 ±6.16 / 536.37 ms │     519.32 / 524.64 ±7.71 / 539.96 ms │     no change │
│ QQuery 21 │     515.94 / 519.49 ±2.80 / 523.66 ms │     516.78 / 527.83 ±7.58 / 540.45 ms │     no change │
│ QQuery 22 │     974.47 / 984.13 ±7.07 / 993.40 ms │   995.76 / 1003.13 ±7.06 / 1011.53 ms │     no change │
│ QQuery 23 │ 3036.09 / 3071.79 ±32.91 / 3110.99 ms │ 3244.85 / 3295.77 ±49.74 / 3381.80 ms │  1.07x slower │
│ QQuery 24 │        41.31 / 41.59 ±0.27 / 42.09 ms │        41.69 / 45.20 ±4.12 / 50.74 ms │  1.09x slower │
│ QQuery 25 │     112.46 / 118.03 ±8.51 / 134.98 ms │     116.49 / 118.53 ±1.36 / 120.76 ms │     no change │
│ QQuery 26 │        42.07 / 45.54 ±4.23 / 53.51 ms │        42.18 / 45.14 ±5.10 / 55.30 ms │     no change │
│ QQuery 27 │     663.88 / 673.06 ±4.84 / 677.40 ms │     680.60 / 686.04 ±3.97 / 690.51 ms │     no change │
│ QQuery 28 │ 3028.44 / 3065.99 ±29.37 / 3116.14 ms │ 3048.23 / 3083.34 ±33.76 / 3134.35 ms │     no change │
│ QQuery 29 │        40.45 / 40.83 ±0.47 / 41.72 ms │        40.56 / 44.07 ±5.83 / 55.66 ms │  1.08x slower │
│ QQuery 30 │     295.07 / 299.92 ±3.73 / 303.55 ms │     301.72 / 308.04 ±4.02 / 313.84 ms │     no change │
│ QQuery 31 │    285.48 / 302.04 ±24.53 / 350.53 ms │     285.27 / 291.45 ±3.94 / 296.48 ms │     no change │
│ QQuery 32 │    903.42 / 934.42 ±23.05 / 963.68 ms │    898.88 / 928.31 ±24.50 / 957.54 ms │     no change │
│ QQuery 33 │ 1423.55 / 1448.67 ±26.08 / 1497.50 ms │ 1436.52 / 1471.36 ±46.68 / 1563.44 ms │     no change │
│ QQuery 34 │ 1451.32 / 1482.57 ±21.02 / 1509.29 ms │ 1464.00 / 1482.34 ±14.49 / 1501.24 ms │     no change │
│ QQuery 35 │    275.87 / 293.96 ±29.14 / 351.60 ms │    273.87 / 301.52 ±32.88 / 347.23 ms │     no change │
│ QQuery 36 │        62.78 / 70.45 ±6.97 / 82.98 ms │        66.96 / 80.27 ±8.35 / 91.03 ms │  1.14x slower │
│ QQuery 37 │        35.33 / 39.81 ±3.15 / 44.84 ms │        36.05 / 38.67 ±3.86 / 46.26 ms │     no change │
│ QQuery 38 │        41.64 / 45.35 ±3.39 / 50.15 ms │        41.12 / 42.76 ±1.03 / 43.81 ms │ +1.06x faster │
│ QQuery 39 │     146.16 / 154.18 ±8.00 / 167.79 ms │     144.55 / 150.61 ±3.83 / 156.22 ms │     no change │
│ QQuery 40 │        13.76 / 14.55 ±0.71 / 15.84 ms │        13.94 / 15.35 ±2.32 / 19.96 ms │  1.06x slower │
│ QQuery 41 │        13.31 / 13.66 ±0.36 / 14.27 ms │        13.19 / 13.56 ±0.30 / 14.10 ms │     no change │
│ QQuery 42 │        12.84 / 13.07 ±0.18 / 13.28 ms │        12.89 / 13.05 ±0.12 / 13.22 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary               ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)               │ 19436.75ms │
│ Total Time (batch-normalizer)   │ 19789.70ms │
│ Average Time (HEAD)             │   452.02ms │
│ Average Time (batch-normalizer) │   460.23ms │
│ Queries Faster                  │          2 │
│ Queries Slower                  │          5 │
│ Queries with No Change          │         36 │
│ Queries with Failure            │          0 │
└─────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 10.5 GiB
Avg memory 4.2 GiB
CPU user 999.8s
CPU sys 66.5s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 100.0s
Peak memory 12.0 GiB
Avg memory 4.6 GiB
CPU user 1019.1s
CPU sys 69.4s
Peak spill 0 B

File an issue against this benchmark runner

@adriangb

adriangb commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

ClickBench A/B regression: diagnosed and fixed (commit 3a03ec5)

The earlier on/off A/B showed clickbench_partitioned +5.1% with the flag on (17 queries slower, up to 1.2x on string-heavy scans). EXPLAIN ANALYZE attribution on Q22: 7.96K of 12.3K scan batches hit the waste-compaction path — parquet-decoded string batches routinely retain 2-4x their logical size (decode buffers shared across consecutive batches), tripping the flat 1MB absolute-waste floor on nearly every batch and paying a full copy each time for no benefit.

Fix: the absolute-waste floor now scales to max(1MiB, target_batch_size_bytes) — pinned memory only matters at the scale of the byte target, and the shared-decode-buffer false positives sit well below it. After the fix Q22 shows 0 compacted / 12.2K passed through.

Fresh GKE A/B on the fixed head (2cf5402b58 both sides, flag on only for changed):

suite off → on before fix
tpch 758.9 → 764.4ms (+0.7%), 22/22 no-change +1.1%, 1 slower
clickbench_partitioned 19437 → 19790ms (+1.8%), 5 slower / 2 faster / 36 no-change +5.1%, 17 slower / 2 faster

The former regressors (Q13/Q17/Q20/Q21/Q22/Q33/Q34) are all back to no-change. Residuals are Q23 at 1.07x (a wide-row SELECT * TopK where the byte target legitimately re-chunks output) and a few 1.06-1.14x entries with overlapping error bars.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm

adriangb and others added 2 commits July 8, 2026 17:30
Adds datafusion.execution.adaptive_target_batch_size (default true):
when target_batch_size_bytes is unset and the memory pool reports a
finite limit, the byte target is derived as
pool_size / target_partitions / 16, capped at 16MiB. The /16 margin
covers per-batch multipliers in the sort/merge machinery (2x sort
buffering, ~4x spill-merge reservation per stream, SPM buffering all
streams); the ceiling is where tight-pool merges stay reliably stable
while larger batches add nothing.

Adaptive targeting deliberately stays off when there is no memory
limit (nothing to protect: identical code path to today) and when the
derived target falls below 1MiB (a pool that small cannot be saved by
re-chunking, and carefully crafted small-pool OOM scenarios keep their
exact behavior). An explicit target_batch_size_bytes always wins.

With no configuration at all, the large_values benchmark under a 2GB
limit goes from failing its sort queries to completing them at both
4 and 12 partitions, including the 2GiB-dataset variant.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm
@adriangb

adriangb commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

Adaptive byte target: derived from the memory limit (commit 775c059)

Per review discussion, the byte target can now derive itself instead of requiring manual configuration. New option datafusion.execution.adaptive_target_batch_size (default true):

  • Explicit target_batch_size_bytes always wins.
  • Otherwise, if the memory pool reports a finite limit: target = min(pool_size / target_partitions / 16, 16MiB). The /16 margin covers the per-batch multipliers in the sort/merge machinery (~2x sort buffering, ~4x spill-merge reservation per stream with read-ahead, SPM buffering every stream); the 16MiB ceiling is where tight-pool merges stay reliably stable and beyond which bigger batches add no amortization.
  • No memory limit → no target: the normalizer wrapper is not installed at all, so the unlimited case is the identical code path to today ("cases that pass never get slower" holds by construction).
  • Derived target below 1MiB → adaptive stays off: a pool that small cannot be saved by re-chunking, and carefully crafted small-pool OOM scenarios (e.g. the memory_limit test suite) keep their exact behavior.

Acceptance on large_values with zero configuration (just --memory-limit 2G):

scenario before adaptive
unlimited memory baseline identical code path
16KiB values (1GiB), 2G, n=4 Q2/Q3 FAIL all 5 queries pass
16KiB values, 2G, n=12 Q2/Q3 FAIL pass (rare Q3 flake at this 2:1 data:pool boundary)
64KiB values (2GiB data), 2G, n=4 / n=12 FAIL both pass

Trade-off note: with a finite limit, already-passing queries whose batches exceed the derived threshold pay the ~5-10% compaction tax (a scan-only query doesn't know whether a downstream sort needs protection). Full workspace test suite passes, including the memory-limit OOM-assertion tests.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm

@adriangb

adriangb commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

run benchmarks

@adriangb

adriangb commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark tpch sort_tpch clickbench_partitioned external_aggr

env:
DATAFUSION_RUNTIME_MEMORY_LIMIT: 2G

baseline:
ref: 775c059
env:
DATAFUSION_EXECUTION_ADAPTIVE_TARGET_BATCH_SIZE: "false"

@adriangbot

Copy link
Copy Markdown

Benchmark for this request failed.

Last 20 lines of output:

Click to expand
Cloning into '/workspace/datafusion-branch'...
From https://github.com/apache/datafusion
 * [new ref]         refs/pull/23390/head -> batch-normalizer
 * branch            main                 -> FETCH_HEAD
Switched to branch 'batch-normalizer'
c2e347370a616b43af192da0ff7a6719cfef0d46
Cloning into '/workspace/datafusion-base'...
From https://github.com/apache/datafusion
 * branch            refs/pull/23390/head -> FETCH_HEAD
fatal: reference is not a tree: 775c059d88f13d21f5f7570dc561e00b52ea6c39

File an issue against this benchmark runner

3 similar comments
@adriangbot

Copy link
Copy Markdown

Benchmark for this request failed.

Last 20 lines of output:

Click to expand
Cloning into '/workspace/datafusion-branch'...
From https://github.com/apache/datafusion
 * [new ref]         refs/pull/23390/head -> batch-normalizer
 * branch            main                 -> FETCH_HEAD
Switched to branch 'batch-normalizer'
c2e347370a616b43af192da0ff7a6719cfef0d46
Cloning into '/workspace/datafusion-base'...
From https://github.com/apache/datafusion
 * branch            refs/pull/23390/head -> FETCH_HEAD
fatal: reference is not a tree: 775c059d88f13d21f5f7570dc561e00b52ea6c39

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

Benchmark for this request failed.

Last 20 lines of output:

Click to expand
Cloning into '/workspace/datafusion-branch'...
From https://github.com/apache/datafusion
 * [new ref]         refs/pull/23390/head -> batch-normalizer
 * branch            main                 -> FETCH_HEAD
Switched to branch 'batch-normalizer'
c2e347370a616b43af192da0ff7a6719cfef0d46
Cloning into '/workspace/datafusion-base'...
From https://github.com/apache/datafusion
 * branch            refs/pull/23390/head -> FETCH_HEAD
fatal: reference is not a tree: 775c059d88f13d21f5f7570dc561e00b52ea6c39

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

Benchmark for this request failed.

Last 20 lines of output:

Click to expand
Cloning into '/workspace/datafusion-branch'...
From https://github.com/apache/datafusion
 * [new ref]         refs/pull/23390/head -> batch-normalizer
 * branch            main                 -> FETCH_HEAD
Switched to branch 'batch-normalizer'
c2e347370a616b43af192da0ff7a6719cfef0d46
Cloning into '/workspace/datafusion-base'...
From https://github.com/apache/datafusion
 * branch            refs/pull/23390/head -> FETCH_HEAD
fatal: reference is not a tree: 775c059d88f13d21f5f7570dc561e00b52ea6c39

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4920565490-926-dd2s8 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (775c059) to c2e3473 (merge-base) diff using: tpcds
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4920565490-925-wnn52 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (775c059) to c2e3473 (merge-base) diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4920567022-929-rxxtp 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (775c059) to 775c059 diff using: sort_tpch
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4920567022-930-75z4p 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (775c059) to 775c059 diff using: clickbench_partitioned
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4920565490-927-l7s5t 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (775c059) to c2e3473 (merge-base) diff using: tpch
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4920567022-928-bv7tb 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (775c059) to 775c059 diff using: tpch
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃               batch-normalizer ┃    Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ QQuery 1  │ 37.97 / 39.16 ±1.24 / 40.98 ms │ 38.07 / 39.27 ±0.96 / 40.82 ms │ no change │
│ QQuery 2  │ 18.82 / 19.23 ±0.35 / 19.81 ms │ 18.72 / 19.37 ±0.64 / 20.57 ms │ no change │
│ QQuery 3  │ 30.42 / 32.83 ±1.90 / 35.80 ms │ 30.76 / 32.14 ±1.08 / 33.33 ms │ no change │
│ QQuery 4  │ 17.26 / 17.34 ±0.08 / 17.46 ms │ 17.29 / 17.51 ±0.32 / 18.15 ms │ no change │
│ QQuery 5  │ 37.28 / 39.51 ±1.57 / 41.31 ms │ 40.24 / 40.74 ±0.41 / 41.33 ms │ no change │
│ QQuery 6  │ 16.26 / 17.19 ±0.94 / 18.65 ms │ 16.07 / 16.73 ±0.80 / 18.29 ms │ no change │
│ QQuery 7  │ 43.42 / 45.58 ±1.68 / 48.11 ms │ 43.81 / 44.17 ±0.29 / 44.55 ms │ no change │
│ QQuery 8  │ 42.87 / 43.64 ±1.01 / 45.58 ms │ 42.69 / 42.93 ±0.20 / 43.29 ms │ no change │
│ QQuery 9  │ 49.83 / 50.87 ±0.96 / 52.39 ms │ 49.68 / 51.35 ±2.18 / 55.60 ms │ no change │
│ QQuery 10 │ 42.02 / 42.43 ±0.67 / 43.75 ms │ 42.07 / 42.42 ±0.55 / 43.50 ms │ no change │
│ QQuery 11 │ 13.31 / 13.74 ±0.54 / 14.77 ms │ 12.99 / 13.60 ±0.74 / 15.05 ms │ no change │
│ QQuery 12 │ 23.50 / 23.77 ±0.31 / 24.35 ms │ 23.86 / 24.20 ±0.18 / 24.36 ms │ no change │
│ QQuery 13 │ 31.97 / 34.46 ±1.99 / 37.68 ms │ 32.47 / 34.48 ±1.93 / 38.07 ms │ no change │
│ QQuery 14 │ 23.32 / 24.18 ±1.08 / 26.26 ms │ 23.71 / 24.98 ±1.31 / 26.74 ms │ no change │
│ QQuery 15 │ 30.72 / 31.53 ±1.15 / 33.77 ms │ 30.80 / 31.94 ±0.97 / 33.51 ms │ no change │
│ QQuery 16 │ 13.76 / 13.92 ±0.09 / 14.01 ms │ 13.79 / 14.15 ±0.32 / 14.73 ms │ no change │
│ QQuery 17 │ 72.91 / 74.50 ±2.25 / 78.82 ms │ 72.98 / 73.35 ±0.36 / 73.90 ms │ no change │
│ QQuery 18 │ 58.78 / 60.70 ±2.23 / 64.98 ms │ 58.22 / 59.44 ±1.16 / 61.50 ms │ no change │
│ QQuery 19 │ 32.69 / 33.37 ±0.96 / 35.27 ms │ 32.42 / 32.76 ±0.42 / 33.42 ms │ no change │
│ QQuery 20 │ 32.06 / 32.42 ±0.53 / 33.47 ms │ 31.60 / 31.88 ±0.27 / 32.27 ms │ no change │
│ QQuery 21 │ 54.47 / 56.11 ±1.23 / 58.21 ms │ 52.70 / 55.23 ±2.22 / 58.56 ms │ no change │
│ QQuery 22 │ 13.55 / 13.87 ±0.18 / 14.09 ms │ 13.65 / 14.13 ±0.53 / 15.14 ms │ no change │
└───────────┴────────────────────────────────┴────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary               ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)               │ 760.34ms │
│ Total Time (batch-normalizer)   │ 756.77ms │
│ Average Time (HEAD)             │  34.56ms │
│ Average Time (batch-normalizer) │  34.40ms │
│ Queries Faster                  │        0 │
│ Queries Slower                  │        0 │
│ Queries with No Change          │       22 │
│ Queries with Failure            │        0 │
└─────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.0s
Peak memory 1.2 GiB
Avg memory 518.0 MiB
CPU user 21.8s
CPU sys 1.7s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.2 GiB
Avg memory 531.5 MiB
CPU user 21.9s
CPU sys 1.5s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark sort_tpch1.json
--------------------
┏━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query ┃                                  HEAD ┃                      batch-normalizer ┃       Change ┃
┡━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ Q1    │     114.46 / 115.22 ±0.95 / 117.04 ms │     113.35 / 113.86 ±0.68 / 115.18 ms │    no change │
│ Q2    │     102.95 / 103.62 ±0.40 / 104.05 ms │     102.89 / 103.49 ±0.61 / 104.64 ms │    no change │
│ Q3    │                                  FAIL │                                  FAIL │ incomparable │
│ Q4    │     182.43 / 183.86 ±1.45 / 186.54 ms │     182.71 / 184.12 ±1.93 / 187.83 ms │    no change │
│ Q5    │     263.10 / 265.14 ±1.89 / 268.31 ms │     264.15 / 264.92 ±0.85 / 266.30 ms │    no change │
│ Q6    │     276.80 / 277.68 ±0.58 / 278.52 ms │     277.39 / 278.23 ±0.55 / 279.01 ms │    no change │
│ Q7    │     573.48 / 576.61 ±1.62 / 577.94 ms │     580.09 / 581.87 ±1.41 / 583.99 ms │    no change │
│ Q8    │    353.68 / 377.38 ±13.86 / 388.83 ms │    376.68 / 387.35 ±12.36 / 409.76 ms │    no change │
│ Q9    │     405.95 / 415.62 ±9.36 / 432.33 ms │    409.64 / 427.57 ±11.34 / 438.20 ms │    no change │
│ Q10   │ 1035.75 / 1063.66 ±18.91 / 1093.57 ms │ 1043.77 / 1073.80 ±23.38 / 1108.21 ms │    no change │
│ Q11   │     282.00 / 289.63 ±4.99 / 295.68 ms │     288.75 / 291.37 ±2.85 / 295.04 ms │    no change │
└───────┴───────────────────────────────────────┴───────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary               ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)               │ 3668.43ms │
│ Total Time (batch-normalizer)   │ 3706.58ms │
│ Average Time (HEAD)             │  366.84ms │
│ Average Time (batch-normalizer) │  370.66ms │
│ Queries Faster                  │         0 │
│ Queries Slower                  │         0 │
│ Queries with No Change          │        10 │
│ Queries with Failure            │         1 │
└─────────────────────────────────┴───────────┘

Resource Usage

sort_tpch — base (merge-base)

Metric Value
Wall time 20.0s
Peak memory 2.5 GiB
Avg memory 1.4 GiB
CPU user 63.3s
CPU sys 11.4s
Peak spill 0 B

sort_tpch — branch

Metric Value
Wall time 20.0s
Peak memory 2.5 GiB
Avg memory 1.4 GiB
CPU user 63.5s
CPU sys 11.4s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃               batch-normalizer ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.35 / 40.32 ±1.61 / 42.60 ms │ 40.02 / 41.24 ±0.67 / 42.03 ms │    no change │
│ QQuery 2  │ 19.17 / 19.40 ±0.24 / 19.85 ms │ 20.72 / 21.06 ±0.26 / 21.42 ms │ 1.09x slower │
│ QQuery 3  │ 31.51 / 33.58 ±1.06 / 34.34 ms │ 31.39 / 33.81 ±1.36 / 35.49 ms │    no change │
│ QQuery 4  │ 17.64 / 17.77 ±0.10 / 17.89 ms │ 17.45 / 18.27 ±0.69 / 19.18 ms │    no change │
│ QQuery 5  │ 40.26 / 42.65 ±1.82 / 45.25 ms │ 38.31 / 41.03 ±2.36 / 45.31 ms │    no change │
│ QQuery 6  │ 16.41 / 16.95 ±0.93 / 18.80 ms │ 16.40 / 16.60 ±0.21 / 16.98 ms │    no change │
│ QQuery 7  │ 44.06 / 45.32 ±0.67 / 45.99 ms │ 44.06 / 46.47 ±2.71 / 50.89 ms │    no change │
│ QQuery 8  │ 43.37 / 43.71 ±0.23 / 44.06 ms │ 43.57 / 44.50 ±1.07 / 46.51 ms │    no change │
│ QQuery 9  │ 49.45 / 50.43 ±0.99 / 52.14 ms │ 49.49 / 50.52 ±0.87 / 51.58 ms │    no change │
│ QQuery 10 │ 42.56 / 42.78 ±0.21 / 43.19 ms │ 43.13 / 44.14 ±1.40 / 46.92 ms │    no change │
│ QQuery 11 │ 13.56 / 13.75 ±0.15 / 13.99 ms │ 13.85 / 13.98 ±0.12 / 14.19 ms │    no change │
│ QQuery 12 │ 24.10 / 24.36 ±0.27 / 24.87 ms │ 24.43 / 24.61 ±0.15 / 24.78 ms │    no change │
│ QQuery 13 │ 34.09 / 36.14 ±1.84 / 39.21 ms │ 34.72 / 37.10 ±1.79 / 39.70 ms │    no change │
│ QQuery 14 │ 24.03 / 24.18 ±0.11 / 24.29 ms │ 23.86 / 24.19 ±0.28 / 24.63 ms │    no change │
│ QQuery 15 │ 31.66 / 32.69 ±0.85 / 33.61 ms │ 31.46 / 32.40 ±0.92 / 33.81 ms │    no change │
│ QQuery 16 │ 14.06 / 14.22 ±0.19 / 14.58 ms │ 14.02 / 14.32 ±0.17 / 14.55 ms │    no change │
│ QQuery 17 │ 74.64 / 75.29 ±0.86 / 77.00 ms │ 75.26 / 76.20 ±0.84 / 77.64 ms │    no change │
│ QQuery 18 │ 60.31 / 63.47 ±2.45 / 66.98 ms │ 59.97 / 62.93 ±2.86 / 67.88 ms │    no change │
│ QQuery 19 │ 33.59 / 34.18 ±0.56 / 35.18 ms │ 33.54 / 33.89 ±0.30 / 34.43 ms │    no change │
│ QQuery 20 │ 32.46 / 32.70 ±0.33 / 33.35 ms │ 32.45 / 32.92 ±0.46 / 33.79 ms │    no change │
│ QQuery 21 │ 56.34 / 57.42 ±0.83 / 58.70 ms │ 54.37 / 56.51 ±1.22 / 57.58 ms │    no change │
│ QQuery 22 │ 14.00 / 14.42 ±0.24 / 14.70 ms │ 14.14 / 14.47 ±0.20 / 14.75 ms │    no change │
└───────────┴────────────────────────────────┴────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary               ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)               │ 775.71ms │
│ Total Time (batch-normalizer)   │ 781.17ms │
│ Average Time (HEAD)             │  35.26ms │
│ Average Time (batch-normalizer) │  35.51ms │
│ Queries Faster                  │        0 │
│ Queries Slower                  │        1 │
│ Queries with No Change          │       21 │
│ Queries with Failure            │        0 │
└─────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.0s
Peak memory 1.1 GiB
Avg memory 506.0 MiB
CPU user 22.6s
CPU sys 1.8s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.0 GiB
Avg memory 484.5 MiB
CPU user 22.9s
CPU sys 1.7s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃                      batch-normalizer ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │           5.33 / 5.88 ±0.97 / 7.81 ms │           5.52 / 6.23 ±0.90 / 8.00 ms │  1.06x slower │
│ QQuery 2  │        80.14 / 81.00 ±0.57 / 81.90 ms │        81.44 / 81.72 ±0.20 / 81.96 ms │     no change │
│ QQuery 3  │        29.52 / 29.88 ±0.20 / 30.13 ms │        29.55 / 29.87 ±0.22 / 30.21 ms │     no change │
│ QQuery 4  │     494.97 / 499.30 ±3.27 / 502.96 ms │     496.52 / 499.84 ±2.10 / 502.10 ms │     no change │
│ QQuery 5  │        52.31 / 52.77 ±0.48 / 53.52 ms │        52.30 / 52.86 ±0.74 / 54.32 ms │     no change │
│ QQuery 6  │        37.04 / 37.24 ±0.13 / 37.39 ms │        36.71 / 37.13 ±0.33 / 37.65 ms │     no change │
│ QQuery 7  │        94.32 / 94.93 ±0.67 / 96.04 ms │       94.64 / 96.19 ±2.14 / 100.45 ms │     no change │
│ QQuery 8  │        37.63 / 40.00 ±3.35 / 46.65 ms │        37.36 / 37.72 ±0.36 / 38.40 ms │ +1.06x faster │
│ QQuery 9  │        52.33 / 54.35 ±1.99 / 57.15 ms │        54.43 / 55.60 ±1.58 / 58.72 ms │     no change │
│ QQuery 10 │        63.31 / 63.81 ±0.28 / 64.09 ms │        63.21 / 63.68 ±0.26 / 63.97 ms │     no change │
│ QQuery 11 │     305.21 / 310.70 ±3.56 / 314.18 ms │     304.24 / 310.39 ±4.28 / 316.67 ms │     no change │
│ QQuery 12 │        28.75 / 29.22 ±0.36 / 29.70 ms │        29.01 / 29.29 ±0.23 / 29.67 ms │     no change │
│ QQuery 13 │     119.39 / 120.27 ±1.16 / 122.42 ms │     119.91 / 122.26 ±3.90 / 130.02 ms │     no change │
│ QQuery 14 │     410.97 / 414.67 ±3.64 / 420.25 ms │     412.48 / 423.46 ±6.56 / 431.32 ms │     no change │
│ QQuery 15 │        57.37 / 57.99 ±0.52 / 58.77 ms │        57.72 / 59.22 ±1.09 / 61.00 ms │     no change │
│ QQuery 16 │           6.47 / 6.70 ±0.17 / 7.00 ms │           6.55 / 6.74 ±0.20 / 7.13 ms │     no change │
│ QQuery 17 │        80.34 / 82.10 ±2.27 / 86.54 ms │        81.15 / 81.65 ±0.31 / 82.12 ms │     no change │
│ QQuery 18 │     124.16 / 126.28 ±1.99 / 129.16 ms │     125.39 / 126.43 ±1.45 / 129.30 ms │     no change │
│ QQuery 19 │        41.72 / 41.88 ±0.15 / 42.15 ms │        41.80 / 42.17 ±0.27 / 42.60 ms │     no change │
│ QQuery 20 │        36.04 / 37.24 ±1.61 / 40.43 ms │        35.98 / 37.09 ±0.69 / 38.12 ms │     no change │
│ QQuery 21 │        17.38 / 17.60 ±0.26 / 18.02 ms │        17.75 / 17.99 ±0.21 / 18.35 ms │     no change │
│ QQuery 22 │        63.13 / 64.19 ±1.01 / 66.06 ms │        62.27 / 63.09 ±0.54 / 63.68 ms │     no change │
│ QQuery 23 │    347.19 / 357.86 ±15.18 / 387.68 ms │     346.56 / 351.08 ±3.97 / 358.52 ms │     no change │
│ QQuery 24 │     227.40 / 230.25 ±4.33 / 238.85 ms │     229.43 / 230.52 ±1.45 / 233.39 ms │     no change │
│ QQuery 25 │     110.28 / 112.16 ±1.02 / 113.29 ms │     111.84 / 113.28 ±1.45 / 116.03 ms │     no change │
│ QQuery 26 │        57.89 / 59.60 ±2.14 / 63.81 ms │        58.10 / 59.88 ±1.38 / 61.95 ms │     no change │
│ QQuery 27 │           6.12 / 6.27 ±0.23 / 6.71 ms │           6.23 / 6.32 ±0.13 / 6.58 ms │     no change │
│ QQuery 28 │        61.09 / 61.73 ±0.38 / 62.24 ms │        57.13 / 59.53 ±1.98 / 62.31 ms │     no change │
│ QQuery 29 │      97.73 / 101.53 ±5.91 / 113.23 ms │      98.96 / 101.29 ±1.98 / 104.46 ms │     no change │
│ QQuery 30 │        32.45 / 33.23 ±0.72 / 34.31 ms │        32.36 / 33.56 ±0.98 / 35.14 ms │     no change │
│ QQuery 31 │     112.56 / 113.47 ±0.50 / 114.05 ms │     112.76 / 113.41 ±0.51 / 114.13 ms │     no change │
│ QQuery 32 │        20.53 / 20.83 ±0.38 / 21.52 ms │        20.77 / 20.96 ±0.14 / 21.17 ms │     no change │
│ QQuery 33 │        38.06 / 39.35 ±1.49 / 42.12 ms │        38.56 / 40.06 ±2.19 / 44.40 ms │     no change │
│ QQuery 34 │         9.87 / 10.53 ±0.83 / 12.15 ms │         9.70 / 10.22 ±0.44 / 10.94 ms │     no change │
│ QQuery 35 │        73.14 / 73.45 ±0.33 / 74.07 ms │        72.61 / 73.61 ±1.29 / 76.14 ms │     no change │
│ QQuery 36 │           5.75 / 5.90 ±0.20 / 6.28 ms │           5.79 / 5.93 ±0.19 / 6.29 ms │     no change │
│ QQuery 37 │           6.87 / 6.97 ±0.06 / 7.05 ms │           6.93 / 7.02 ±0.09 / 7.18 ms │     no change │
│ QQuery 38 │        62.19 / 63.17 ±0.61 / 63.88 ms │        62.58 / 63.15 ±0.63 / 64.37 ms │     no change │
│ QQuery 39 │        91.01 / 93.11 ±2.25 / 97.41 ms │        91.83 / 93.26 ±1.72 / 96.60 ms │     no change │
│ QQuery 40 │        23.50 / 24.02 ±0.30 / 24.37 ms │        23.50 / 23.72 ±0.21 / 24.00 ms │     no change │
│ QQuery 41 │        11.58 / 11.70 ±0.13 / 11.95 ms │        11.49 / 11.65 ±0.20 / 12.00 ms │     no change │
│ QQuery 42 │        23.73 / 24.47 ±0.57 / 25.29 ms │        23.99 / 24.36 ±0.19 / 24.48 ms │     no change │
│ QQuery 43 │           4.85 / 4.94 ±0.10 / 5.14 ms │           4.75 / 4.90 ±0.13 / 5.15 ms │     no change │
│ QQuery 44 │           9.20 / 9.32 ±0.07 / 9.42 ms │           9.11 / 9.26 ±0.18 / 9.61 ms │     no change │
│ QQuery 45 │        38.63 / 39.21 ±0.51 / 39.86 ms │        38.68 / 39.28 ±0.57 / 39.99 ms │     no change │
│ QQuery 46 │        11.65 / 12.75 ±1.33 / 15.33 ms │        12.08 / 12.89 ±0.88 / 14.59 ms │     no change │
│ QQuery 47 │     229.22 / 234.34 ±5.19 / 243.07 ms │     228.36 / 233.76 ±5.34 / 243.38 ms │     no change │
│ QQuery 48 │        95.84 / 96.38 ±0.32 / 96.80 ms │        96.94 / 97.46 ±0.42 / 97.90 ms │     no change │
│ QQuery 49 │        76.63 / 78.82 ±3.16 / 85.01 ms │        76.89 / 79.49 ±3.41 / 85.87 ms │     no change │
│ QQuery 50 │        59.30 / 59.93 ±0.46 / 60.69 ms │        59.86 / 60.16 ±0.25 / 60.48 ms │     no change │
│ QQuery 51 │        93.16 / 94.06 ±0.62 / 94.76 ms │        91.21 / 93.38 ±1.75 / 96.39 ms │     no change │
│ QQuery 52 │        24.41 / 24.66 ±0.15 / 24.81 ms │        24.04 / 24.33 ±0.21 / 24.59 ms │     no change │
│ QQuery 53 │        30.82 / 33.00 ±3.45 / 39.85 ms │        30.48 / 32.61 ±2.94 / 38.29 ms │     no change │
│ QQuery 54 │        56.06 / 56.42 ±0.37 / 57.09 ms │        55.94 / 56.95 ±0.85 / 58.42 ms │     no change │
│ QQuery 55 │        23.74 / 24.03 ±0.30 / 24.60 ms │        23.67 / 24.18 ±0.39 / 24.81 ms │     no change │
│ QQuery 56 │        39.15 / 40.12 ±0.67 / 41.11 ms │        39.48 / 39.96 ±0.68 / 41.31 ms │     no change │
│ QQuery 57 │     177.90 / 180.76 ±2.97 / 185.21 ms │     178.42 / 179.99 ±1.39 / 181.74 ms │     no change │
│ QQuery 58 │     116.25 / 118.16 ±2.44 / 122.87 ms │     116.17 / 119.50 ±2.84 / 124.49 ms │     no change │
│ QQuery 59 │     117.70 / 118.36 ±0.55 / 119.17 ms │     117.67 / 118.58 ±0.59 / 119.34 ms │     no change │
│ QQuery 60 │        40.06 / 41.87 ±2.75 / 47.31 ms │        39.86 / 40.15 ±0.17 / 40.33 ms │     no change │
│ QQuery 61 │        11.92 / 12.10 ±0.24 / 12.59 ms │        11.91 / 12.08 ±0.20 / 12.45 ms │     no change │
│ QQuery 62 │        46.50 / 47.35 ±0.52 / 48.09 ms │        46.57 / 46.87 ±0.27 / 47.36 ms │     no change │
│ QQuery 63 │        30.04 / 30.17 ±0.09 / 30.26 ms │        29.77 / 30.10 ±0.23 / 30.46 ms │     no change │
│ QQuery 64 │     408.58 / 411.91 ±2.42 / 414.66 ms │     411.69 / 414.82 ±2.08 / 417.83 ms │     no change │
│ QQuery 65 │     144.62 / 150.01 ±3.70 / 154.46 ms │     145.53 / 149.87 ±3.95 / 157.21 ms │     no change │
│ QQuery 66 │        79.80 / 80.28 ±0.31 / 80.64 ms │        80.44 / 81.22 ±0.50 / 81.81 ms │     no change │
│ QQuery 67 │     242.27 / 247.08 ±4.84 / 254.20 ms │     245.23 / 248.68 ±2.95 / 252.26 ms │     no change │
│ QQuery 68 │        12.12 / 12.23 ±0.11 / 12.39 ms │        11.68 / 11.84 ±0.18 / 12.19 ms │     no change │
│ QQuery 69 │        58.16 / 58.80 ±0.74 / 60.14 ms │        57.68 / 60.50 ±4.21 / 68.83 ms │     no change │
│ QQuery 70 │     105.31 / 107.36 ±1.67 / 109.39 ms │     105.08 / 108.62 ±3.58 / 115.00 ms │     no change │
│ QQuery 71 │        35.40 / 35.93 ±0.37 / 36.55 ms │        36.16 / 39.27 ±4.22 / 47.33 ms │  1.09x slower │
│ QQuery 72 │ 2190.86 / 2209.83 ±15.98 / 2238.69 ms │ 2198.39 / 2264.68 ±47.39 / 2311.83 ms │     no change │
│ QQuery 73 │         9.58 / 10.89 ±1.84 / 14.42 ms │          9.59 / 9.88 ±0.22 / 10.17 ms │ +1.10x faster │
│ QQuery 74 │     171.81 / 173.11 ±0.98 / 174.74 ms │     176.40 / 181.04 ±4.94 / 190.63 ms │     no change │
│ QQuery 75 │     150.93 / 154.21 ±5.88 / 165.96 ms │     150.25 / 151.83 ±1.54 / 154.63 ms │     no change │
│ QQuery 76 │        35.43 / 35.79 ±0.40 / 36.42 ms │        36.00 / 37.47 ±2.10 / 41.61 ms │     no change │
│ QQuery 77 │        62.03 / 64.45 ±2.64 / 69.46 ms │        60.88 / 61.86 ±0.52 / 62.34 ms │     no change │
│ QQuery 78 │     197.08 / 202.11 ±4.97 / 210.40 ms │     199.35 / 202.65 ±2.93 / 207.20 ms │     no change │
│ QQuery 79 │        67.81 / 68.69 ±1.26 / 71.19 ms │        67.41 / 68.25 ±0.64 / 69.14 ms │     no change │
│ QQuery 80 │      99.11 / 100.26 ±1.00 / 101.89 ms │     100.58 / 105.88 ±6.91 / 118.72 ms │  1.06x slower │
│ QQuery 81 │        25.60 / 26.10 ±0.35 / 26.62 ms │        25.86 / 26.15 ±0.19 / 26.35 ms │     no change │
│ QQuery 82 │        16.50 / 17.97 ±2.05 / 22.04 ms │        16.48 / 16.73 ±0.18 / 16.94 ms │ +1.07x faster │
│ QQuery 83 │        39.92 / 41.35 ±1.40 / 43.96 ms │        40.16 / 40.37 ±0.24 / 40.78 ms │     no change │
│ QQuery 84 │        30.45 / 30.72 ±0.28 / 31.26 ms │        30.75 / 30.96 ±0.15 / 31.14 ms │     no change │
│ QQuery 85 │     107.34 / 109.77 ±3.70 / 117.09 ms │     108.55 / 111.95 ±3.58 / 116.65 ms │     no change │
│ QQuery 86 │        25.64 / 26.58 ±1.21 / 28.87 ms │        25.07 / 25.56 ±0.39 / 26.25 ms │     no change │
│ QQuery 87 │        62.50 / 63.55 ±0.95 / 65.15 ms │        62.37 / 63.40 ±0.57 / 64.01 ms │     no change │
│ QQuery 88 │        62.70 / 63.52 ±0.53 / 64.17 ms │        63.68 / 65.07 ±1.49 / 67.34 ms │     no change │
│ QQuery 89 │        36.25 / 38.07 ±2.91 / 43.87 ms │        35.98 / 36.39 ±0.36 / 36.88 ms │     no change │
│ QQuery 90 │        17.03 / 17.86 ±1.14 / 20.09 ms │        16.99 / 17.30 ±0.22 / 17.67 ms │     no change │
│ QQuery 91 │        46.45 / 47.02 ±0.65 / 48.28 ms │        45.45 / 46.21 ±0.46 / 46.75 ms │     no change │
│ QQuery 92 │        29.58 / 29.96 ±0.36 / 30.60 ms │        30.50 / 30.83 ±0.26 / 31.17 ms │     no change │
│ QQuery 93 │        50.83 / 51.52 ±0.46 / 52.05 ms │        51.31 / 52.94 ±1.99 / 56.66 ms │     no change │
│ QQuery 94 │        38.71 / 39.83 ±1.96 / 43.73 ms │        38.92 / 39.75 ±0.53 / 40.60 ms │     no change │
│ QQuery 95 │        82.53 / 83.31 ±0.67 / 84.28 ms │        81.86 / 82.48 ±0.64 / 83.71 ms │     no change │
│ QQuery 96 │        24.33 / 24.55 ±0.19 / 24.84 ms │        24.38 / 24.75 ±0.33 / 25.26 ms │     no change │
│ QQuery 97 │        46.97 / 47.42 ±0.42 / 48.06 ms │        47.65 / 48.87 ±1.46 / 51.38 ms │     no change │
│ QQuery 98 │        43.87 / 44.33 ±0.31 / 44.80 ms │        43.01 / 43.52 ±0.42 / 44.16 ms │     no change │
│ QQuery 99 │        70.55 / 71.24 ±0.75 / 72.66 ms │        70.78 / 71.05 ±0.21 / 71.41 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary               ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)               │ 10071.96ms │
│ Total Time (batch-normalizer)   │ 10151.95ms │
│ Average Time (HEAD)             │   101.74ms │
│ Average Time (batch-normalizer) │   102.54ms │
│ Queries Faster                  │          3 │
│ Queries Slower                  │          3 │
│ Queries with No Change          │         93 │
│ Queries with Failure            │          0 │
└─────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 55.0s
Peak memory 2.0 GiB
Avg memory 1.4 GiB
CPU user 227.5s
CPU sys 6.0s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 55.0s
Peak memory 2.0 GiB
Avg memory 1.4 GiB
CPU user 229.1s
CPU sys 6.1s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c4920567022-931-t69hr 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing batch-normalizer (775c059) to 775c059 diff using: external_aggr
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃                      batch-normalizer ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.22 / 4.04 ±5.51 / 15.07 ms │          1.21 / 4.04 ±5.51 / 15.07 ms │     no change │
│ QQuery 1  │        12.62 / 12.88 ±0.19 / 13.22 ms │        12.58 / 12.97 ±0.20 / 13.13 ms │     no change │
│ QQuery 2  │        35.57 / 35.98 ±0.30 / 36.43 ms │        36.82 / 37.07 ±0.23 / 37.44 ms │     no change │
│ QQuery 3  │        30.62 / 31.16 ±0.65 / 32.35 ms │        31.46 / 31.61 ±0.12 / 31.75 ms │     no change │
│ QQuery 4  │     225.49 / 231.09 ±5.11 / 239.60 ms │    227.50 / 241.91 ±21.36 / 284.45 ms │     no change │
│ QQuery 5  │     269.48 / 272.53 ±1.92 / 275.13 ms │     269.56 / 277.07 ±4.89 / 283.04 ms │     no change │
│ QQuery 6  │           1.26 / 1.41 ±0.23 / 1.87 ms │           1.27 / 1.43 ±0.23 / 1.88 ms │     no change │
│ QQuery 7  │        13.59 / 13.94 ±0.18 / 14.04 ms │        13.96 / 14.10 ±0.11 / 14.28 ms │     no change │
│ QQuery 8  │     323.38 / 325.41 ±2.20 / 328.14 ms │     326.94 / 333.36 ±5.31 / 340.25 ms │     no change │
│ QQuery 9  │    449.76 / 468.64 ±10.69 / 480.52 ms │     468.78 / 476.41 ±5.86 / 485.47 ms │     no change │
│ QQuery 10 │        68.88 / 70.27 ±0.92 / 71.74 ms │        70.13 / 71.66 ±1.65 / 74.83 ms │     no change │
│ QQuery 11 │        80.48 / 83.57 ±4.50 / 92.51 ms │        81.85 / 82.74 ±0.48 / 83.30 ms │     no change │
│ QQuery 12 │     267.40 / 270.64 ±3.22 / 275.35 ms │    271.53 / 283.77 ±14.93 / 312.16 ms │     no change │
│ QQuery 13 │    373.19 / 384.20 ±11.05 / 403.72 ms │    372.15 / 395.15 ±19.12 / 418.90 ms │     no change │
│ QQuery 14 │     285.72 / 289.72 ±4.92 / 299.28 ms │    285.65 / 293.75 ±11.07 / 315.63 ms │     no change │
│ QQuery 15 │     274.52 / 283.44 ±6.61 / 294.49 ms │     276.17 / 281.87 ±4.96 / 289.71 ms │     no change │
│ QQuery 16 │     618.42 / 630.38 ±9.14 / 645.40 ms │     622.15 / 632.92 ±6.92 / 641.97 ms │     no change │
│ QQuery 17 │    628.26 / 638.56 ±10.08 / 651.71 ms │     638.34 / 646.24 ±6.88 / 659.08 ms │     no change │
│ QQuery 18 │  1287.23 / 1301.32 ±9.76 / 1316.40 ms │ 1287.22 / 1306.97 ±21.57 / 1345.33 ms │     no change │
│ QQuery 19 │        28.05 / 28.41 ±0.50 / 29.40 ms │        28.30 / 30.60 ±3.82 / 38.21 ms │  1.08x slower │
│ QQuery 20 │     514.32 / 524.83 ±9.78 / 539.50 ms │    516.18 / 539.36 ±30.65 / 599.17 ms │     no change │
│ QQuery 21 │     517.56 / 521.38 ±5.95 / 533.16 ms │     521.49 / 524.40 ±1.61 / 525.92 ms │     no change │
│ QQuery 22 │ 1016.50 / 1030.91 ±13.52 / 1052.45 ms │  988.82 / 1001.96 ±18.16 / 1037.55 ms │     no change │
│ QQuery 23 │ 3059.99 / 3105.27 ±31.91 / 3145.28 ms │ 3103.60 / 3158.58 ±51.15 / 3224.33 ms │     no change │
│ QQuery 24 │        40.84 / 42.28 ±1.15 / 43.70 ms │        41.68 / 42.52 ±0.85 / 44.08 ms │     no change │
│ QQuery 25 │     111.17 / 111.69 ±0.42 / 112.15 ms │     112.44 / 114.61 ±1.31 / 116.42 ms │     no change │
│ QQuery 26 │        41.95 / 43.13 ±1.85 / 46.81 ms │        42.37 / 49.33 ±9.10 / 66.96 ms │  1.14x slower │
│ QQuery 27 │    670.49 / 681.81 ±11.64 / 702.13 ms │     672.98 / 683.09 ±8.17 / 695.17 ms │     no change │
│ QQuery 28 │ 3015.04 / 3031.67 ±12.86 / 3044.58 ms │ 3023.08 / 3055.09 ±18.53 / 3078.07 ms │     no change │
│ QQuery 29 │        40.73 / 41.09 ±0.22 / 41.40 ms │      41.89 / 57.68 ±26.65 / 110.36 ms │  1.40x slower │
│ QQuery 30 │    300.44 / 308.53 ±10.95 / 329.92 ms │     301.96 / 310.03 ±7.37 / 323.62 ms │     no change │
│ QQuery 31 │    278.67 / 288.57 ±10.17 / 303.88 ms │    283.74 / 313.86 ±31.72 / 360.99 ms │  1.09x slower │
│ QQuery 32 │    922.27 / 934.28 ±11.34 / 954.08 ms │  947.54 / 1019.32 ±56.29 / 1107.64 ms │  1.09x slower │
│ QQuery 33 │ 1460.35 / 1490.04 ±35.33 / 1550.71 ms │ 1443.64 / 1491.27 ±38.95 / 1562.77 ms │     no change │
│ QQuery 34 │ 1470.56 / 1538.25 ±48.64 / 1599.71 ms │ 1463.05 / 1517.91 ±43.41 / 1588.83 ms │     no change │
│ QQuery 35 │    284.34 / 302.55 ±24.52 / 350.99 ms │    291.37 / 304.15 ±15.53 / 333.66 ms │     no change │
│ QQuery 36 │        69.37 / 77.21 ±6.70 / 87.75 ms │        65.79 / 71.19 ±4.66 / 77.08 ms │ +1.08x faster │
│ QQuery 37 │        36.31 / 37.34 ±1.17 / 39.55 ms │        35.62 / 39.14 ±2.46 / 42.83 ms │     no change │
│ QQuery 38 │        40.59 / 43.73 ±2.86 / 48.30 ms │        43.45 / 49.01 ±7.22 / 62.71 ms │  1.12x slower │
│ QQuery 39 │     154.99 / 161.56 ±4.27 / 166.61 ms │     134.87 / 147.78 ±8.89 / 160.21 ms │ +1.09x faster │
│ QQuery 40 │        14.62 / 14.76 ±0.14 / 15.03 ms │        14.69 / 16.09 ±2.17 / 20.40 ms │  1.09x slower │
│ QQuery 41 │        14.15 / 15.18 ±1.90 / 18.98 ms │        13.81 / 16.13 ±4.22 / 24.55 ms │  1.06x slower │
│ QQuery 42 │        13.57 / 13.86 ±0.23 / 14.23 ms │        13.12 / 13.45 ±0.25 / 13.87 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary               ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)               │ 19737.55ms │
│ Total Time (batch-normalizer)   │ 19991.55ms │
│ Average Time (HEAD)             │   459.01ms │
│ Average Time (batch-normalizer) │   464.92ms │
│ Queries Faster                  │          2 │
│ Queries Slower                  │          8 │
│ Queries with No Change          │         33 │
│ Queries with Failure            │          0 │
└─────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 11.6 GiB
Avg memory 4.2 GiB
CPU user 1015.7s
CPU sys 70.5s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 105.0s
Peak memory 11.4 GiB
Avg memory 4.2 GiB
CPU user 1019.0s
CPU sys 73.4s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                   HEAD ┃                       batch-normalizer ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │           1.20 / 3.91 ±5.32 / 14.55 ms │           1.23 / 4.02 ±5.50 / 15.02 ms │     no change │
│ QQuery 1  │         12.42 / 12.80 ±0.20 / 13.01 ms │         12.93 / 13.35 ±0.37 / 14.00 ms │     no change │
│ QQuery 2  │         35.97 / 36.17 ±0.19 / 36.46 ms │         38.43 / 39.22 ±0.63 / 40.03 ms │  1.08x slower │
│ QQuery 3  │         30.66 / 31.63 ±1.18 / 33.72 ms │         32.10 / 32.48 ±0.31 / 33.01 ms │     no change │
│ QQuery 4  │     339.69 / 368.98 ±17.49 / 384.94 ms │      331.83 / 338.50 ±3.95 / 342.98 ms │ +1.09x faster │
│ QQuery 5  │     588.37 / 608.84 ±17.42 / 639.94 ms │     546.19 / 563.78 ±10.04 / 574.94 ms │ +1.08x faster │
│ QQuery 6  │            1.40 / 1.58 ±0.24 / 2.04 ms │            1.27 / 1.43 ±0.22 / 1.87 ms │ +1.10x faster │
│ QQuery 7  │         14.86 / 15.07 ±0.17 / 15.26 ms │         14.39 / 14.52 ±0.13 / 14.75 ms │     no change │
│ QQuery 8  │     777.90 / 816.12 ±38.44 / 881.85 ms │      776.37 / 779.35 ±2.97 / 784.78 ms │     no change │
│ QQuery 9  │      450.53 / 459.22 ±7.49 / 470.50 ms │      450.61 / 460.10 ±5.37 / 465.79 ms │     no change │
│ QQuery 10 │         69.71 / 71.13 ±1.79 / 74.65 ms │         75.19 / 76.25 ±1.27 / 78.65 ms │  1.07x slower │
│ QQuery 11 │         80.92 / 81.35 ±0.35 / 81.94 ms │         91.46 / 94.16 ±1.76 / 96.73 ms │  1.16x slower │
│ QQuery 12 │      531.38 / 538.76 ±7.05 / 551.87 ms │     547.83 / 592.57 ±34.23 / 630.19 ms │  1.10x slower │
│ QQuery 13 │  1092.09 / 1138.74 ±54.04 / 1243.03 ms │  1120.72 / 1150.02 ±23.48 / 1191.55 ms │     no change │
│ QQuery 14 │     630.88 / 641.97 ±11.73 / 658.10 ms │     647.80 / 658.64 ±16.73 / 691.98 ms │     no change │
│ QQuery 15 │      390.01 / 396.79 ±4.72 / 404.24 ms │     402.59 / 415.17 ±15.74 / 445.69 ms │     no change │
│ QQuery 16 │  1197.81 / 1239.83 ±38.22 / 1309.80 ms │  1252.23 / 1315.61 ±36.25 / 1360.73 ms │  1.06x slower │
│ QQuery 17 │      810.13 / 813.12 ±2.28 / 816.41 ms │     819.14 / 836.56 ±13.18 / 859.14 ms │     no change │
│ QQuery 18 │  2396.00 / 2467.01 ±84.92 / 2629.82 ms │  2465.29 / 2508.90 ±35.90 / 2552.72 ms │     no change │
│ QQuery 19 │         28.49 / 36.73 ±7.23 / 47.23 ms │         29.04 / 30.43 ±2.25 / 34.90 ms │ +1.21x faster │
│ QQuery 20 │      511.30 / 520.46 ±8.09 / 532.43 ms │      515.86 / 518.65 ±2.07 / 521.70 ms │     no change │
│ QQuery 21 │      508.15 / 517.85 ±6.03 / 523.75 ms │      517.18 / 522.05 ±5.17 / 531.81 ms │     no change │
│ QQuery 22 │    972.80 / 989.79 ±18.55 / 1024.55 ms │   993.34 / 1007.33 ±19.11 / 1043.68 ms │     no change │
│ QQuery 23 │ 2975.72 / 3096.60 ±106.84 / 3284.51 ms │  3161.47 / 3250.67 ±73.93 / 3349.82 ms │     no change │
│ QQuery 24 │         41.83 / 42.05 ±0.17 / 42.25 ms │         42.27 / 43.42 ±1.35 / 46.01 ms │     no change │
│ QQuery 25 │      112.12 / 115.99 ±6.08 / 128.01 ms │     116.18 / 125.41 ±17.78 / 160.96 ms │  1.08x slower │
│ QQuery 26 │         42.06 / 42.18 ±0.14 / 42.43 ms │         42.43 / 46.19 ±5.75 / 57.59 ms │  1.10x slower │
│ QQuery 27 │     671.45 / 682.54 ±10.15 / 699.53 ms │      671.46 / 675.59 ±5.01 / 684.29 ms │     no change │
│ QQuery 28 │  3315.43 / 3349.99 ±43.07 / 3430.04 ms │  3319.31 / 3408.04 ±77.59 / 3548.96 ms │     no change │
│ QQuery 29 │       40.76 / 57.16 ±30.82 / 118.74 ms │         42.32 / 42.54 ±0.26 / 43.04 ms │ +1.34x faster │
│ QQuery 30 │     294.77 / 308.68 ±12.62 / 326.92 ms │     300.27 / 319.07 ±14.98 / 343.01 ms │     no change │
│ QQuery 31 │      573.10 / 581.74 ±6.41 / 588.80 ms │     582.95 / 603.38 ±20.66 / 628.56 ms │     no change │
│ QQuery 32 │  3288.40 / 3354.38 ±41.68 / 3399.18 ms │  3290.89 / 3316.32 ±25.63 / 3357.25 ms │     no change │
│ QQuery 33 │ 2919.63 / 3072.71 ±138.44 / 3277.91 ms │ 2861.52 / 2943.91 ±118.61 / 3178.92 ms │     no change │
│ QQuery 34 │  2881.04 / 2987.65 ±84.85 / 3095.33 ms │ 2961.19 / 3099.30 ±163.17 / 3407.84 ms │     no change │
│ QQuery 35 │     270.98 / 287.97 ±16.06 / 308.70 ms │      350.97 / 365.98 ±9.37 / 378.08 ms │  1.27x slower │
│ QQuery 36 │         70.56 / 75.21 ±3.49 / 81.00 ms │       72.38 / 91.28 ±29.55 / 150.06 ms │  1.21x slower │
│ QQuery 37 │         35.69 / 36.29 ±0.49 / 37.14 ms │         38.99 / 39.52 ±0.49 / 40.28 ms │  1.09x slower │
│ QQuery 38 │         39.80 / 40.31 ±0.72 / 41.71 ms │         43.17 / 47.63 ±3.39 / 53.16 ms │  1.18x slower │
│ QQuery 39 │      130.78 / 135.38 ±3.32 / 139.07 ms │      129.31 / 138.05 ±8.83 / 151.43 ms │     no change │
│ QQuery 40 │         13.74 / 14.08 ±0.34 / 14.72 ms │         14.40 / 14.87 ±0.35 / 15.39 ms │  1.06x slower │
│ QQuery 41 │         13.38 / 13.66 ±0.14 / 13.77 ms │         13.51 / 14.03 ±0.27 / 14.25 ms │     no change │
│ QQuery 42 │         12.90 / 13.28 ±0.23 / 13.56 ms │         13.53 / 15.01 ±1.26 / 17.31 ms │  1.13x slower │
└───────────┴────────────────────────────────────────┴────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary               ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)               │ 30115.68ms │
│ Total Time (batch-normalizer)   │ 30573.30ms │
│ Average Time (HEAD)             │   700.36ms │
│ Average Time (batch-normalizer) │   711.01ms │
│ Queries Faster                  │          5 │
│ Queries Slower                  │         13 │
│ Queries with No Change          │         25 │
│ Queries with Failure            │          0 │
└─────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 155.0s
Peak memory 8.1 GiB
Avg memory 6.3 GiB
CPU user 1529.4s
CPU sys 157.9s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 155.0s
Peak memory 8.0 GiB
Avg memory 6.1 GiB
CPU user 1545.9s
CPU sys 160.3s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

Comparing HEAD and batch-normalizer
--------------------
Benchmark external_aggr.json
--------------------
┏━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Query        ┃                               HEAD ┃                   batch-normalizer ┃    Change ┃
┡━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Q1(64.0 MB)  │     54.73 / 59.97 ±4.01 / 65.82 ms │     54.96 / 57.51 ±4.00 / 65.44 ms │ no change │
│ Q1(32.0 MB)  │     49.62 / 51.04 ±1.72 / 54.38 ms │     48.94 / 50.83 ±1.18 / 52.66 ms │ no change │
│ Q1(16.0 MB)  │     51.71 / 54.07 ±1.80 / 57.00 ms │     50.75 / 54.73 ±2.26 / 57.49 ms │ no change │
│ Q2(512.0 MB) │ 266.47 / 290.02 ±33.52 / 356.25 ms │ 268.88 / 300.44 ±23.23 / 327.66 ms │ no change │
│ Q2(256.0 MB) │  238.67 / 241.60 ±2.32 / 244.54 ms │  242.59 / 244.12 ±1.22 / 245.58 ms │ no change │
│ Q2(128.0 MB) │  240.34 / 243.91 ±1.98 / 245.77 ms │  241.39 / 243.87 ±1.55 / 246.21 ms │ no change │
│ Q2(64.0 MB)  │  242.90 / 245.31 ±1.78 / 248.17 ms │ 244.32 / 254.43 ±12.31 / 278.65 ms │ no change │
│ Q2(32.0 MB)  │  294.80 / 306.74 ±7.88 / 317.28 ms │  301.10 / 307.35 ±5.41 / 316.84 ms │ no change │
└──────────────┴────────────────────────────────────┴────────────────────────────────────┴───────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary               ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)               │ 1492.67ms │
│ Total Time (batch-normalizer)   │ 1513.28ms │
│ Average Time (HEAD)             │  186.58ms │
│ Average Time (batch-normalizer) │  189.16ms │
│ Queries Faster                  │         0 │
│ Queries Slower                  │         0 │
│ Queries with No Change          │         8 │
│ Queries with Failure            │         0 │
└─────────────────────────────────┴───────────┘

Resource Usage

external_aggr — base (merge-base)

Metric Value
Wall time 505.1s
Peak memory 485.1 MiB
Avg memory 9.2 MiB
CPU user 23.1s
CPU sys 3.1s
Peak spill 0 B

external_aggr — branch

Metric Value
Wall time 510.1s
Peak memory 488.7 MiB
Avg memory 9.5 MiB
CPU user 26.8s
CPU sys 3.6s
Peak spill 0 B

File an issue against this benchmark runner

@adriangb

adriangb commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

Final benchmark picture (head 775c059, adaptive targeting on by default)

Two runs prove the two halves of the design contract:

1. Default run (merge-base vs this branch, no memory limit). With an infinite pool the adaptive path derives no target and the normalizer wrapper is never installed, so this is a same-code-path regression check:

suite main branch detail
tpch 760.3ms 756.8ms 22/22 no change
tpcds 10072ms 10152ms (+0.8%) 3 faster / 3 slower / 93 no change, movers <=1.09x with overlapping error bars
clickbench_partitioned 19738ms 19992ms (+1.3%) 2 faster / 8 slower / 33 no change; flagged queries have near-identical minimums (e.g. Q29 "1.40x" comes from one ±26ms-stddev outlier run, mins 40.7 vs 41.9ms)

2. Same-SHA A/B under DATAFUSION_RUNTIME_MEMORY_LIMIT=2G (baseline = adaptive disabled, changed = default). This is the regime where adaptive activates (derived target ~10.9MiB at 12 partitions):

suite adaptive off adaptive on detail
tpch 775.7ms 781.2ms (+0.7%) 1 slower (Q2, 1.09x) / 21 no change
sort_tpch 3668ms 3707ms (+1.0%) 10/10 comparable queries no change; Q3 (VARCHAR-key sort) fails on BOTH sides — pre-existing 2G capacity limit, unaffected by this PR
clickbench_partitioned 30116ms 30573ms (+1.5%) 5 faster / 13 slower / 25 no change, movers <=1.16x both directions
external_aggr 1492.7ms 1513.3ms 8/8 no change (its per-query small pools fall under the adaptive minimum and keep exact behavior)

Summary: with no memory limit the feature is provably inert; under a memory limit on standard (small-batch) data it costs ~0.7-1.5% total; and for the workloads it exists for (large_values: 100MB-536MB decoded batches), the earlier comments show it turning ResourcesExhausted into completed queries with zero configuration.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm

Arrow's take and interleave copy view-array views but share the
underlying data buffers, so byte-targeted sorted chunks and merged
output batches pinned every source batch they drew from: sorting 1GB
of 16KiB Utf8View values produced 4MB-logical batches retaining 128MB
each (SortExec output_bytes=31.9GB), and downstream reservations
(BatchBuilder, SortPreservingMergeExec) count retained size -- so the
byte target made memory accounting worse, failing ORDER BY <string>
at a 4GB limit where row-only chunking passed.

Run gc_view_arrays on IncrementalSortIterator chunks and BatchBuilder
output when a byte target is set (the GC is heuristic-gated and no-ops
on non-view or non-wasteful batches; row-only mode is untouched).

large_values Q3 (ORDER BY val) at 4G: fails -> completes, and adaptive
is now on par with row-only where both pass; the 64KiB spill sorts at
2G drop from ~2.3s to ~1.1s.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm
@adriangb

adriangb commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

large_values re-run on the final design (head 16a8de0) — plus a bug it caught

Re-running the full matrix surfaced a real bug in the byte-target path, now fixed (commit 16a8de0): arrow's take/interleave copy view-array views but share the data buffers, so byte-targeted sorted chunks and merged batches pinned every source batch they drew from — a 4MB-logical merged batch retained 128MB (SortExec reported output_bytes=31.9GB for 1GB of data), and since BatchBuilder/SortPreservingMergeExec reservations count retained size, ORDER BY <string> failed at a 4GB limit where row-only chunking passed. Fix: gc_view_arrays on IncrementalSortIterator chunks and BatchBuilder output when a byte target is set (heuristic-gated, no-ops for non-view/non-wasteful batches; row-only mode untouched). Two red-first regression tests added.

Final matrix (16KiB values = 1GiB dataset unless noted; off = adaptive_target_batch_size=false, auto = default; interleaved runs, quiet machine, AC power):

scenario off auto (default)
unlimited, all 5 queries x2 rounds baseline identical within ~1% (provably same code path)
2G n=4 Q2/Q3 FAIL all 5 pass (Q2 488ms, Q3 506ms); passing queries +3-6%
2G n=12 Q2/Q3 FAIL all 5 pass (Q2 367ms, Q3 500ms — the former Q3 flake is gone post-fix)
4G n=12 all pass all pass; +10-39% on this worst-case dataset (adaptive still splits 128MB batches while off fits comfortably — the insurance premium when a finite limit is set; adaptive_target_batch_size=false opts out)
64KiB values (2GiB dataset), 2G, n=4 / n=12 Q2 FAIL Q2 passes both (~1.1s, down from ~2.3s before the view-GC fix)

🤖 Generated with Claude Code

https://claude.ai/code/session_01UcPTREZVLXsSZDRCae33gm

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

Labels

auto detected api change Auto detected API change common Related to common crate core Core DataFusion crate datasource Changes to the datasource crate documentation Improvements or additions to documentation physical-plan Changes to the physical-plan crate sqllogictest SQL Logic Tests (.slt)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants