Skip to content

perf: BlockedVec storage for aggregations - #24815

Draft
Dandandan wants to merge 3 commits into
apache:mainfrom
Dandandan:perf/aggregate-state-growth
Draft

perf: BlockedVec storage for aggregations#24815
Dandandan wants to merge 3 commits into
apache:mainfrom
Dandandan:perf/aggregate-state-growth

Conversation

@Dandandan

@Dandandan Dandandan commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

  • None; noticed while profiling ClickBench aggregation.

Rationale for this change

Growing one allocation copies everything in it, so a grouping with millions of groups spends much of its time reallocating the state it keeps per group.

What changes are included in this PR?

  • BlockedVec in datafusion-common: per-group state in one Vec up to THRESHOLD_LEN groups, fixed-size blocks above it, so growth appends a block instead of copying.
  • The threshold is exactly one block, so the flat allocation becomes block zero as it stands rather than being split and copied.
  • A block is 2 MB for an eight byte state and a whole number of output batches, so it can later be handed to Arrow as its own buffer.
  • Callers resolve the representation once per batch (storage/storage_mut) instead of per group, so the flat path stays identical to a plain Vec.
  • Used by count, sum (PrimitiveGroupsAccumulator), avg, and by PrimitiveGroupValueBuilder for the group keys.

Are these changes tested?

  • Yes: unit tests for growth across the switch, take_first leaving more than a block, and capacity accounting; the aggregate and group-values test suites and the sqllogictest aggregate files pass.

Are there any user-facing changes?

  • No; size() now reports block capacity, which is the same quantity measured differently.

Benchmarks

  • ClickBench q32 (100M groups, count/sum/avg over two primitive keys): 0.73-0.85 across runs.
  • q18, q33, q34, q16, q30: neutral within run-to-run noise..
  • Emit still concatenates blocks, so part of the saving is paid back; per-block emit is the follow-up this enables.
  • Cost of the extra load, with the check hoisted out of the loop: 1.02x below the threshold, 1.49x above it.

Not covered yet

  • Bytes/bytes-view group columns, NullState bitmaps, and the other accumulators still use flat storage.

Growing one allocation copies everything already in it, so a grouping with
millions of groups spends much of its time reallocating its per-group state.
`BlockedVec` keeps that state in one `Vec` up to a threshold and in fixed-size
blocks above it, so growing appends a block instead of copying.

Blocks cost a second load per group update, so the threshold keeps small and
medium groupings on exactly the path they use today. Accumulators resolve the
representation once per batch via `storage_mut` rather than per group, which
keeps the flat path indistinguishable from a plain `Vec`.

Wired into count, sum (`PrimitiveGroupsAccumulator`) and avg.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117yCevpWYN82FH6PLrM8qu
@github-actions github-actions Bot added the functions Changes to functions implementation label Aug 31, 2026
@codecov-commenter

codecov-commenter commented Aug 31, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.81208% with 126 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.51%. Comparing base (9c44fc0) to head (fe0a008).
⚠️ Report is 3 commits behind head on main.

Files with missing lines Patch % Lines
datafusion/common/src/utils/blocked_vec.rs 79.04% 41 Missing and 3 partials ⚠️
datafusion/functions-aggregate/src/average.rs 57.95% 37 Missing ⚠️
datafusion/functions-aggregate/src/count.rs 58.13% 18 Missing ⚠️
...ggregates/group_values/multi_group_by/primitive.rs 76.81% 15 Missing and 1 partial ⚠️
...common/src/aggregate/groups_accumulator/prim_op.rs 65.62% 11 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #24815      +/-   ##
==========================================
- Coverage   81.52%   81.51%   -0.02%     
==========================================
  Files        1123     1125       +2     
  Lines      406194   406628     +434     
  Branches   406194   406628     +434     
==========================================
+ Hits       331163   331476     +313     
- Misses      55664    55781     +117     
- Partials    19367    19371       +4     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

The threshold was eight blocks, so the state was chopped into eight pieces when
it switched, copying all of it. Setting the threshold to one block means the
flat allocation *is* block zero and is handed over as it stands.

A block is now 2MB for an eight byte state, a whole number of output batches,
and the flat state starts at one batch rather than growing into one from
nothing.

`take_first` can still leave more than a block behind, so the splitting path
stays for that case, covered by the existing test.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117yCevpWYN82FH6PLrM8qu
@Dandandan Dandandan changed the title perf: hold per-group accumulator state in blocks once it is large perf: BlockedVec storage for aggregations Aug 31, 2026
@Dandandan

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5475546313-2052-cww97 6.12.85+ #1 SMP Sat Jun 27 09:31:30 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 perf/aggregate-state-growth (e3fe1da) to 9c44fc0 (merge-base) diff

Run configuration
run benchmark clickbench

Results will be posted here when complete


File an issue against this benchmark runner

The group keys are the other half of what a grouping stores per group, and they
grew the same way: q32 keeps 12 bytes of key next to 32 bytes of aggregate
state, all of it in allocations that were copied on every growth.

`BlockedVec` moves to `datafusion-common` so `physical-plan` can use it, and
`PrimitiveGroupValueBuilder` stores its values in it. Both comparison loops
resolve the representation once and are compiled per representation, so the
flat path is unchanged.

The flat state no longer starts at a batch: reserving one up front costs 64KB
per state vector, which `ordered_aggregate_spill.slt` showed exhausting a
600KB pool.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0117yCevpWYN82FH6PLrM8qu
@adriangbot

Copy link
Copy Markdown

Benchmark for this request failed before finishing (Kubernetes reason: BackoffLimitExceeded).

Benchmarks requested: clickbench

Kubernetes message
Job has reached the specified backoff limit

File an issue against this benchmark runner

@Dandandan

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_partitioned

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5477482214-2053-hcp5f 6.12.85+ #1 SMP Sat Jun 27 09:31:30 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 perf/aggregate-state-growth (fe0a008) to 9c44fc0 (merge-base) diff

Run configuration
run benchmark 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)

Comparing perf/aggregate-state-growth (fe0a008) to 9c44fc0 (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
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 perf_aggregate-state-growth
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ perf_aggregate-state-growth ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 0  │    1.19 ms │                     1.23 ms │    no change │
│ QQuery 1  │   11.82 ms │                    11.64 ms │    no change │
│ QQuery 2  │   36.24 ms │                    35.94 ms │    no change │
│ QQuery 3  │   30.97 ms │                    30.65 ms │    no change │
│ QQuery 4  │  222.89 ms │                   222.76 ms │    no change │
│ QQuery 5  │  271.81 ms │                   273.37 ms │    no change │
│ QQuery 6  │    1.26 ms │                     1.26 ms │    no change │
│ QQuery 7  │   13.37 ms │                    13.18 ms │    no change │
│ QQuery 8  │  325.80 ms │                   337.71 ms │    no change │
│ QQuery 9  │  449.91 ms │                   455.13 ms │    no change │
│ QQuery 10 │   68.77 ms │                    69.58 ms │    no change │
│ QQuery 11 │   80.60 ms │                    80.97 ms │    no change │
│ QQuery 12 │  266.29 ms │                   266.82 ms │    no change │
│ QQuery 13 │  366.35 ms │                   368.29 ms │    no change │
│ QQuery 14 │  280.83 ms │                   283.62 ms │    no change │
│ QQuery 15 │  269.58 ms │                   277.29 ms │    no change │
│ QQuery 16 │  608.40 ms │                   630.90 ms │    no change │
│ QQuery 17 │  615.00 ms │                   630.43 ms │    no change │
│ QQuery 18 │ 1262.26 ms │                  1305.58 ms │    no change │
│ QQuery 19 │   27.64 ms │                    27.60 ms │    no change │
│ QQuery 20 │  512.56 ms │                   521.03 ms │    no change │
│ QQuery 21 │  516.36 ms │                   520.32 ms │    no change │
│ QQuery 22 │  980.65 ms │                   990.39 ms │    no change │
│ QQuery 23 │ 3045.54 ms │                  3070.70 ms │    no change │
│ QQuery 24 │   41.09 ms │                    41.59 ms │    no change │
│ QQuery 25 │  111.37 ms │                   110.39 ms │    no change │
│ QQuery 26 │   41.24 ms │                    41.26 ms │    no change │
│ QQuery 27 │  508.22 ms │                   514.84 ms │    no change │
│ QQuery 28 │ 2900.77 ms │                  2946.52 ms │    no change │
│ QQuery 29 │   41.20 ms │                    40.57 ms │    no change │
│ QQuery 30 │  295.98 ms │                   316.82 ms │ 1.07x slower │
│ QQuery 31 │  277.33 ms │                   282.21 ms │    no change │
│ QQuery 32 │  924.35 ms │                   997.09 ms │ 1.08x slower │
│ QQuery 33 │ 1437.43 ms │                  1447.05 ms │    no change │
│ QQuery 34 │ 1420.95 ms │                  1563.93 ms │ 1.10x slower │
│ QQuery 35 │  276.24 ms │                   303.27 ms │ 1.10x slower │
│ QQuery 36 │   66.37 ms │                    68.89 ms │    no change │
│ QQuery 37 │   35.44 ms │                    36.09 ms │    no change │
│ QQuery 38 │   39.85 ms │                    41.45 ms │    no change │
│ QQuery 39 │  145.03 ms │                   139.97 ms │    no change │
│ QQuery 40 │   13.86 ms │                    14.42 ms │    no change │
│ QQuery 41 │   13.35 ms │                    14.30 ms │ 1.07x slower │
│ QQuery 42 │   13.12 ms │                    13.89 ms │ 1.06x slower │
└───────────┴────────────┴─────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 18869.26ms │
│ Total Time (perf_aggregate-state-growth)   │ 19360.94ms │
│ Average Time (HEAD)                        │   438.82ms │
│ Average Time (perf_aggregate-state-growth) │   450.25ms │
│ Queries Faster                             │          0 │
│ Queries Slower                             │          6 │
│ Queries with No Change                     │         37 │
│ Queries with Failure                       │          0 │
└────────────────────────────────────────────┴────────────┘

Distribution per query (min / mean ±stddev / max):

Comparing HEAD and perf_aggregate-state-growth
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃           perf_aggregate-state-growth ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.19 / 3.92 ±5.38 / 14.68 ms │          1.23 / 3.94 ±5.37 / 14.69 ms │     no change │
│ QQuery 1  │        11.82 / 12.06 ±0.18 / 12.37 ms │        11.64 / 11.85 ±0.12 / 11.96 ms │     no change │
│ QQuery 2  │        36.24 / 36.56 ±0.33 / 37.08 ms │        35.94 / 36.27 ±0.32 / 36.85 ms │     no change │
│ QQuery 3  │        30.97 / 31.83 ±0.83 / 33.21 ms │        30.65 / 31.67 ±1.23 / 33.90 ms │     no change │
│ QQuery 4  │     222.89 / 227.30 ±3.05 / 230.50 ms │     222.76 / 225.37 ±3.11 / 231.20 ms │     no change │
│ QQuery 5  │     271.81 / 273.64 ±1.35 / 275.33 ms │     273.37 / 275.09 ±1.53 / 277.13 ms │     no change │
│ QQuery 6  │           1.26 / 1.40 ±0.23 / 1.85 ms │           1.26 / 1.40 ±0.22 / 1.82 ms │     no change │
│ QQuery 7  │        13.37 / 13.50 ±0.10 / 13.67 ms │        13.18 / 13.50 ±0.28 / 14.01 ms │     no change │
│ QQuery 8  │     325.80 / 328.90 ±1.84 / 331.30 ms │     337.71 / 341.47 ±2.86 / 344.72 ms │     no change │
│ QQuery 9  │     449.91 / 456.80 ±4.05 / 460.86 ms │     455.13 / 463.50 ±6.87 / 474.38 ms │     no change │
│ QQuery 10 │        68.77 / 71.26 ±2.86 / 76.64 ms │        69.58 / 70.94 ±1.45 / 73.62 ms │     no change │
│ QQuery 11 │        80.60 / 81.15 ±0.55 / 81.97 ms │        80.97 / 81.49 ±0.81 / 83.09 ms │     no change │
│ QQuery 12 │     266.29 / 270.70 ±4.18 / 275.79 ms │     266.82 / 273.31 ±6.15 / 284.08 ms │     no change │
│ QQuery 13 │    366.35 / 382.92 ±11.66 / 395.54 ms │    368.29 / 379.17 ±18.26 / 415.50 ms │     no change │
│ QQuery 14 │     280.83 / 285.77 ±4.95 / 294.14 ms │     283.62 / 291.12 ±5.90 / 299.32 ms │     no change │
│ QQuery 15 │     269.58 / 273.51 ±2.87 / 278.49 ms │    277.29 / 289.34 ±16.20 / 321.35 ms │  1.06x slower │
│ QQuery 16 │    608.40 / 620.03 ±11.18 / 639.59 ms │     630.90 / 633.01 ±1.82 / 635.68 ms │     no change │
│ QQuery 17 │     615.00 / 622.68 ±5.43 / 631.40 ms │     630.43 / 637.18 ±3.77 / 641.26 ms │     no change │
│ QQuery 18 │  1262.26 / 1271.97 ±7.79 / 1283.73 ms │ 1305.58 / 1350.38 ±53.64 / 1452.64 ms │  1.06x slower │
│ QQuery 19 │        27.64 / 30.57 ±4.42 / 39.17 ms │       27.60 / 46.69 ±23.56 / 82.27 ms │  1.53x slower │
│ QQuery 20 │    512.56 / 523.33 ±12.58 / 546.69 ms │     521.03 / 524.96 ±3.92 / 530.28 ms │     no change │
│ QQuery 21 │     516.36 / 522.16 ±5.05 / 530.30 ms │     520.32 / 524.95 ±4.15 / 532.68 ms │     no change │
│ QQuery 22 │   980.65 / 992.44 ±10.51 / 1008.70 ms │     990.39 / 992.91 ±1.91 / 994.88 ms │     no change │
│ QQuery 23 │ 3045.54 / 3068.32 ±24.15 / 3102.18 ms │ 3070.70 / 3088.65 ±12.02 / 3108.52 ms │     no change │
│ QQuery 24 │        41.09 / 51.38 ±9.81 / 63.26 ms │        41.59 / 41.87 ±0.23 / 42.19 ms │ +1.23x faster │
│ QQuery 25 │     111.37 / 112.53 ±0.94 / 113.90 ms │     110.39 / 114.94 ±6.67 / 128.13 ms │     no change │
│ QQuery 26 │        41.24 / 42.42 ±1.66 / 45.71 ms │        41.26 / 42.20 ±0.66 / 43.20 ms │     no change │
│ QQuery 27 │     508.22 / 518.50 ±6.55 / 525.16 ms │     514.84 / 523.89 ±8.38 / 535.71 ms │     no change │
│ QQuery 28 │ 2900.77 / 2926.24 ±28.08 / 2978.95 ms │  2946.52 / 2954.19 ±9.35 / 2972.30 ms │     no change │
│ QQuery 29 │       41.20 / 49.16 ±10.09 / 66.79 ms │        40.57 / 42.50 ±2.67 / 47.65 ms │ +1.16x faster │
│ QQuery 30 │     295.98 / 304.43 ±5.66 / 311.41 ms │     316.82 / 322.90 ±6.49 / 332.27 ms │  1.06x slower │
│ QQuery 31 │    277.33 / 301.62 ±15.37 / 322.78 ms │     282.21 / 292.11 ±8.64 / 305.22 ms │     no change │
│ QQuery 32 │    924.35 / 949.86 ±14.34 / 968.38 ms │  997.09 / 1016.78 ±13.85 / 1035.71 ms │  1.07x slower │
│ QQuery 33 │ 1437.43 / 1477.40 ±23.47 / 1502.55 ms │ 1447.05 / 1498.54 ±30.46 / 1530.62 ms │     no change │
│ QQuery 34 │ 1420.95 / 1476.07 ±36.46 / 1514.41 ms │ 1563.93 / 1577.87 ±14.71 / 1602.83 ms │  1.07x slower │
│ QQuery 35 │    276.24 / 301.35 ±36.86 / 374.42 ms │    303.27 / 318.90 ±18.25 / 348.70 ms │  1.06x slower │
│ QQuery 36 │       66.37 / 75.63 ±10.97 / 96.25 ms │        68.89 / 73.87 ±5.05 / 83.52 ms │     no change │
│ QQuery 37 │        35.44 / 37.10 ±3.02 / 43.13 ms │        36.09 / 40.27 ±3.74 / 45.71 ms │  1.09x slower │
│ QQuery 38 │        39.85 / 42.01 ±2.13 / 45.70 ms │        41.45 / 46.81 ±3.67 / 52.32 ms │  1.11x slower │
│ QQuery 39 │     145.03 / 149.48 ±5.33 / 156.17 ms │     139.97 / 151.53 ±8.93 / 163.32 ms │     no change │
│ QQuery 40 │        13.86 / 17.04 ±6.09 / 29.21 ms │        14.42 / 17.21 ±3.15 / 23.04 ms │     no change │
│ QQuery 41 │        13.35 / 13.60 ±0.18 / 13.92 ms │        14.30 / 15.60 ±2.04 / 19.65 ms │  1.15x slower │
│ QQuery 42 │        13.12 / 14.62 ±2.80 / 20.22 ms │        13.89 / 18.97 ±6.19 / 26.74 ms │  1.30x slower │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 19263.16ms │
│ Total Time (perf_aggregate-state-growth)   │ 19699.11ms │
│ Average Time (HEAD)                        │   447.98ms │
│ Average Time (perf_aggregate-state-growth) │   458.12ms │
│ Queries Faster                             │          2 │
│ Queries Slower                             │         11 │
│ Queries with No Change                     │         30 │
│ Queries with Failure                       │          0 │
└────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 11.7 GiB
Avg memory 4.5 GiB
CPU user 989.5s
CPU sys 69.0s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 100.0s
Peak memory 11.7 GiB
Avg memory 4.1 GiB
CPU user 999.7s
CPU sys 73.2s
Peak spill 0 B

File an issue against this benchmark runner

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

Labels

functions Changes to functions implementation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants