Skip to content

perf: stop dictionary work growing with the group count - #26703

Merged
jayzhan211 merged 11 commits into
apache:mainfrom
jayzhan211:perf/dictionary-work-bounded-by-rows
Nov 7, 2026
Merged

jayzhan211 merged 11 commits into
apache:mainfrom
jayzhan211:perf/dictionary-work-bounded-by-rows

Conversation

@jayzhan211

@jayzhan211 jayzhan211 commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

Queries that group on a high-cardinality dictionary column slow down as the group count grows. On ClickBench hits_partitioned with enable_rle_to_dictionary = true, this PR takes the suite from 78.8 s to 42.8 s, with Q33 and Q34 about 3.5x faster and peak memory slightly lower (bot run).

A hash aggregate builds its output once and emits it in batch_size slices, and slicing a DictionaryArray keeps every value. Every slice therefore carries every group's value, so hashing, functions such as lower, the repartition coalescer and the final aggregate do work per slice that grows with the group count.

What changes are included in this PR?

Start reading at next_batch in aggregates/aggregate_hash_table/common.rs.

  • Aggregate output, the main gain. A slice with more values than rows now holds only the values its rows reference. No threshold is needed: each group is emitted once, so the cost is fixed per group.
  • A bound for other batches. Filters and scans also keep whole dictionaries, so hash_dictionary and the new map_dictionary_values handle at most MAX_DICTIONARY_VALUES_PER_ROW (64) values per row and compact past that. Too high only gives up an improvement, while too low makes cheap work slower: lower and upper break even at about 40 values per row with keys in random order. The filter and scan queries I measured showed no visible difference, so this is a guard, not a measured speedup.
  • compact_dictionary does both, taking each referenced value once. take(values, keys) copies per row, and multi-column group keys repeat dictionary keys, so it can overflow i32 offsets, need more rows than the key type holds, and copy a long value thousands of times.
  • map_dictionary_values replaces dictionary.with_values(f(values)) in the string functions, Spark hex, array_agg, regexp_replace and substr, and clippy.toml disallows calling with_values directly. If f fails, it retries on only the referenced values, because f can see values no row references. This replaces substr's own fallback.

Each aggregate slice now has its own values Arc, so the hash cache proposed in #26816 would miss on these slices. The two haven't been measured together.

Benchmarks

ClickBench partitioned main this PR
Total 78.8 s 42.8 s
Q33 14.9 s 4.4 s
Q34 14.8 s 4.1 s
Q18 7.6 s 2.3 s
Peak memory 13.1 GiB 12.7 GiB

Q35, Q32 and Q40 read 1.05x to 1.10x slower by minimum. None groups on a dictionary column, so this PR only adds a type check per output batch for them, and the bot's noise is about 5-7% per query.

Local runs on a busy 12-core laptop: `lower`, memory limits, filter queries

Results were identical on every query. Treat small differences as noise.

lower over a dictionary GROUP BY, which ClickBench doesn't cover:

SELECT lower(s), c FROM (
  SELECT "SearchPhrase" s, COUNT(*) c FROM hits WHERE "SearchPhrase" <> '' GROUP BY s
) ORDER BY c DESC, 1 LIMIT 10;
partitions 12 24 32 48 64
ratio to main 0.08x 0.14x 0.16x 0.24x 0.22x

Q33 under --memory-limit, one run each:

limit main this PR
12g fails: TopK resources exhausted 6.3 s
8g 23.6 s 16.4 s
6g 31.2 s 19.4 s
4g 20.2 s 14.3 s

Filter and scan queries using reverse, initcap, LIKE and hashing after a filter, with the bound at 40: 0.94x to 1.05x of main.

What is the testing strategy for this PR?

  • dictionary.slt compares each function on aggregate output and on filter output with the same function on the decoded value. The comparison is projected, because a filter on the group key is pushed below the aggregate.
  • Unit tests cover next_batch, map_dictionary_values and hashing: repeated keys, NULL groups, more rows than the key type holds, and a value too long to copy per row.
  • The dictionary_sliced case in datafusion/common/benches/with_hashes.rs covers 8 and 128 values per row.

Are there any user-facing changes?

No behavior changes. datafusion_common::utils gains compact_dictionary, map_dictionary_values and MAX_DICTIONARY_VALUES_PER_ROW.

@github-actions github-actions Bot added sqllogictest SQL Logic Tests (.slt) common Related to common crate functions Changes to functions implementation spark Changes to datafusion-spark crate labels Oct 24, 2026
@apache apache deleted a comment from adriangbot Oct 24, 2026
@jayzhan211

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_partitioned
baseline:
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"

@jayzhan211

Copy link
Copy Markdown
Contributor Author

run benchmark with_hashes

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c6382310703-3816-s65nq 6.12.105+ #1 SMP Sat Sep 5 07:54:11 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/dictionary-work-bounded-by-rows (bc3d609) to 039c0b9 (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
baseline:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"

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-c6382311015-3817-n986l 6.12.105+ #1 SMP Sat Sep 5 07:54:11 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/dictionary-work-bounded-by-rows (bc3d609) to 039c0b9 (merge-base) diff

Run configuration
run benchmark with_hashes

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/dictionary-work-bounded-by-rows (bc3d609) to 039c0b9 (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
baseline:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
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_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     1.15 ms │                              1.14 ms │     no change │
│ QQuery 1  │    11.49 ms │                             11.34 ms │     no change │
│ QQuery 2  │    35.56 ms │                             35.55 ms │     no change │
│ QQuery 3  │    30.78 ms │                             30.91 ms │     no change │
│ QQuery 4  │   234.56 ms │                            236.66 ms │     no change │
│ QQuery 5  │  1482.61 ms │                           1049.17 ms │ +1.41x faster │
│ QQuery 6  │     1.18 ms │                              1.18 ms │     no change │
│ QQuery 7  │    12.53 ms │                             12.19 ms │     no change │
│ QQuery 8  │   333.81 ms │                            334.15 ms │     no change │
│ QQuery 9  │   467.37 ms │                            472.98 ms │     no change │
│ QQuery 10 │   197.43 ms │                            197.33 ms │     no change │
│ QQuery 11 │   207.59 ms │                            208.24 ms │     no change │
│ QQuery 12 │  1446.45 ms │                           1103.76 ms │ +1.31x faster │
│ QQuery 13 │  2067.76 ms │                           1458.48 ms │ +1.42x faster │
│ QQuery 14 │  1599.21 ms │                           1153.63 ms │ +1.39x faster │
│ QQuery 15 │   289.33 ms │                            289.20 ms │     no change │
│ QQuery 16 │  3551.15 ms │                           2158.61 ms │ +1.65x faster │
│ QQuery 17 │  3624.78 ms │                           2252.81 ms │ +1.61x faster │
│ QQuery 18 │  6741.55 ms │                           3475.06 ms │ +1.94x faster │
│ QQuery 19 │    27.35 ms │                             27.23 ms │     no change │
│ QQuery 20 │  1052.25 ms │                           1040.96 ms │     no change │
│ QQuery 21 │  1359.53 ms │                           1357.17 ms │     no change │
│ QQuery 22 │  3205.28 ms │                           3224.01 ms │     no change │
│ QQuery 23 │  9096.93 ms │                           9210.26 ms │     no change │
│ QQuery 24 │    94.31 ms │                             95.08 ms │     no change │
│ QQuery 25 │   352.08 ms │                            351.54 ms │     no change │
│ QQuery 26 │    96.29 ms │                             96.38 ms │     no change │
│ QQuery 27 │  1133.21 ms │                           1139.24 ms │     no change │
│ QQuery 28 │  3532.15 ms │                           3539.22 ms │     no change │
│ QQuery 29 │    38.35 ms │                             38.69 ms │     no change │
│ QQuery 30 │   541.36 ms │                            543.52 ms │     no change │
│ QQuery 31 │   537.23 ms │                            530.30 ms │     no change │
│ QQuery 32 │  1010.52 ms │                           1012.60 ms │     no change │
│ QQuery 33 │ 13929.17 ms │                           7370.91 ms │ +1.89x faster │
│ QQuery 34 │ 13384.03 ms │                           7356.96 ms │ +1.82x faster │
│ QQuery 35 │   291.63 ms │                            299.83 ms │     no change │
│ QQuery 36 │   171.08 ms │                            132.96 ms │ +1.29x faster │
│ QQuery 37 │    95.52 ms │                             97.18 ms │     no change │
│ QQuery 38 │    79.59 ms │                             83.74 ms │  1.05x slower │
│ QQuery 39 │   392.24 ms │                            287.21 ms │ +1.37x faster │
│ QQuery 40 │    13.90 ms │                             14.98 ms │  1.08x slower │
│ QQuery 41 │    13.04 ms │                             13.63 ms │     no change │
│ QQuery 42 │    12.63 ms │                             12.96 ms │     no change │
└───────────┴─────────────┴──────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 72795.97ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 52358.97ms │
│ Average Time (HEAD)                                 │  1692.93ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │  1217.65ms │
│ Queries Faster                                      │         11 │
│ Queries Slower                                      │          2 │
│ Queries with No Change                              │         30 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and perf_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                       HEAD ┃   perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │               1.15 / 4.19 ±5.97 / 16.12 ms │           1.14 / 4.28 ±6.14 / 16.56 ms │     no change │
│ QQuery 1  │             11.49 / 11.63 ±0.08 / 11.73 ms │         11.34 / 11.40 ±0.04 / 11.46 ms │     no change │
│ QQuery 2  │             35.56 / 36.10 ±0.30 / 36.45 ms │         35.55 / 35.90 ±0.28 / 36.24 ms │     no change │
│ QQuery 3  │             30.78 / 31.56 ±0.55 / 32.48 ms │         30.91 / 31.47 ±0.48 / 32.14 ms │     no change │
│ QQuery 4  │          234.56 / 239.63 ±3.25 / 242.86 ms │      236.66 / 241.07 ±2.79 / 245.21 ms │     no change │
│ QQuery 5  │      1482.61 / 1500.59 ±17.20 / 1529.29 ms │  1049.17 / 1069.70 ±18.45 / 1093.43 ms │ +1.40x faster │
│ QQuery 6  │                1.18 / 1.34 ±0.25 / 1.84 ms │            1.18 / 1.34 ±0.24 / 1.82 ms │     no change │
│ QQuery 7  │             12.53 / 13.70 ±2.12 / 17.93 ms │         12.19 / 12.51 ±0.21 / 12.83 ms │ +1.09x faster │
│ QQuery 8  │          333.81 / 341.15 ±5.77 / 350.35 ms │     334.15 / 348.48 ±12.64 / 368.59 ms │     no change │
│ QQuery 9  │         467.37 / 480.84 ±11.13 / 498.08 ms │     472.98 / 492.81 ±15.82 / 513.41 ms │     no change │
│ QQuery 10 │          197.43 / 198.62 ±0.97 / 199.92 ms │      197.33 / 198.47 ±1.20 / 200.73 ms │     no change │
│ QQuery 11 │          207.59 / 208.48 ±0.50 / 209.01 ms │      208.24 / 209.58 ±1.13 / 211.44 ms │     no change │
│ QQuery 12 │      1446.45 / 1502.18 ±34.10 / 1547.81 ms │  1103.76 / 1123.47 ±10.75 / 1134.56 ms │ +1.34x faster │
│ QQuery 13 │     2067.76 / 2507.61 ±330.39 / 2927.23 ms │  1458.48 / 1554.76 ±70.77 / 1654.94 ms │ +1.61x faster │
│ QQuery 14 │      1599.21 / 1662.80 ±53.57 / 1752.74 ms │  1153.63 / 1203.12 ±30.99 / 1243.44 ms │ +1.38x faster │
│ QQuery 15 │          289.33 / 298.59 ±9.04 / 314.17 ms │     289.20 / 301.13 ±12.14 / 320.67 ms │     no change │
│ QQuery 16 │     3551.15 / 3675.05 ±145.47 / 3958.93 ms │  2158.61 / 2203.55 ±29.90 / 2251.23 ms │ +1.67x faster │
│ QQuery 17 │      3624.78 / 3728.02 ±86.08 / 3886.03 ms │  2252.81 / 2293.76 ±28.71 / 2334.23 ms │ +1.63x faster │
│ QQuery 18 │     6741.55 / 6845.24 ±117.31 / 7003.43 ms │ 3475.06 / 3736.43 ±175.48 / 3988.60 ms │ +1.83x faster │
│ QQuery 19 │             27.35 / 30.86 ±6.69 / 44.24 ms │        27.23 / 41.32 ±24.89 / 90.97 ms │  1.34x slower │
│ QQuery 20 │       1052.25 / 1056.90 ±3.38 / 1061.33 ms │   1040.96 / 1051.84 ±7.11 / 1062.69 ms │     no change │
│ QQuery 21 │       1359.53 / 1368.79 ±7.17 / 1380.11 ms │   1357.17 / 1365.56 ±4.32 / 1369.60 ms │     no change │
│ QQuery 22 │      3205.28 / 3271.69 ±48.23 / 3346.15 ms │  3224.01 / 3245.74 ±15.59 / 3260.81 ms │     no change │
│ QQuery 23 │     9096.93 / 9418.41 ±223.59 / 9652.59 ms │ 9210.26 / 9405.84 ±156.47 / 9652.43 ms │     no change │
│ QQuery 24 │          94.31 / 106.53 ±22.51 / 151.53 ms │       95.08 / 101.65 ±7.45 / 114.39 ms │     no change │
│ QQuery 25 │          352.08 / 355.22 ±4.46 / 363.93 ms │      351.54 / 354.21 ±2.10 / 357.83 ms │     no change │
│ QQuery 26 │            96.29 / 98.60 ±1.54 / 101.15 ms │        96.38 / 98.00 ±1.57 / 100.68 ms │     no change │
│ QQuery 27 │      1133.21 / 1148.36 ±13.67 / 1169.86 ms │  1139.24 / 1151.80 ±10.44 / 1163.88 ms │     no change │
│ QQuery 28 │      3532.15 / 3562.37 ±29.63 / 3598.71 ms │  3539.22 / 3571.51 ±29.82 / 3618.38 ms │     no change │
│ QQuery 29 │             38.35 / 38.63 ±0.23 / 38.94 ms │        38.69 / 49.05 ±19.73 / 88.50 ms │  1.27x slower │
│ QQuery 30 │          541.36 / 552.33 ±8.61 / 563.61 ms │      543.52 / 549.55 ±4.53 / 557.24 ms │     no change │
│ QQuery 31 │         537.23 / 550.76 ±14.41 / 577.33 ms │      530.30 / 539.78 ±8.53 / 554.16 ms │     no change │
│ QQuery 32 │      1010.52 / 1057.88 ±32.63 / 1092.42 ms │  1012.60 / 1104.91 ±85.83 / 1237.69 ms │     no change │
│ QQuery 33 │  13929.17 / 14376.62 ±517.86 / 15328.74 ms │ 7370.91 / 7512.55 ±142.65 / 7759.59 ms │ +1.91x faster │
│ QQuery 34 │ 13384.03 / 14220.53 ±1084.57 / 16333.16 ms │ 7356.96 / 7607.59 ±176.50 / 7798.57 ms │ +1.87x faster │
│ QQuery 35 │        291.63 / 358.90 ±117.76 / 594.13 ms │     299.83 / 325.80 ±34.02 / 389.95 ms │ +1.10x faster │
│ QQuery 36 │         171.08 / 194.82 ±31.32 / 256.59 ms │      132.96 / 145.01 ±7.54 / 154.59 ms │ +1.34x faster │
│ QQuery 37 │           95.52 / 101.57 ±6.54 / 114.02 ms │        97.18 / 99.77 ±3.29 / 106.10 ms │     no change │
│ QQuery 38 │             79.59 / 81.79 ±1.17 / 83.01 ms │         83.74 / 88.85 ±4.97 / 98.27 ms │  1.09x slower │
│ QQuery 39 │          392.24 / 401.75 ±5.40 / 407.54 ms │      287.21 / 288.94 ±2.69 / 294.31 ms │ +1.39x faster │
│ QQuery 40 │             13.90 / 14.46 ±0.35 / 14.93 ms │         14.98 / 17.10 ±2.63 / 22.14 ms │  1.18x slower │
│ QQuery 41 │             13.04 / 13.27 ±0.15 / 13.46 ms │         13.63 / 17.44 ±4.77 / 25.81 ms │  1.31x slower │
│ QQuery 42 │             12.63 / 15.32 ±5.02 / 25.36 ms │         12.96 / 13.15 ±0.14 / 13.37 ms │ +1.16x faster │
└───────────┴────────────────────────────────────────────┴────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 75683.71ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 53820.17ms │
│ Average Time (HEAD)                                 │  1760.09ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │  1251.63ms │
│ Queries Faster                                      │         14 │
│ Queries Slower                                      │          5 │
│ Queries with No Change                              │         24 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 380.1s
Peak memory 13.3 GiB
Avg memory 6.2 GiB
CPU user 3330.8s
CPU sys 199.1s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 270.1s
Peak memory 15.4 GiB
Avg memory 6.3 GiB
CPU user 2147.6s
CPU sys 179.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)

Comparing perf/dictionary-work-bounded-by-rows (bc3d609) to 039c0b9 (merge-base) diff

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

group                                         HEAD                                   perf_dictionary-work-bounded-by-rows
-----                                         ----                                   ------------------------------------
dense_union: multiple, no nulls               1.00     41.6±0.05µs        ? ?/sec    1.00     41.7±0.04µs        ? ?/sec
dense_union: single, no nulls                 1.00     14.2±0.03µs        ? ?/sec    1.01     14.2±0.15µs        ? ?/sec
dense_union_sliced: 1/10 of 81920 rows        1.00     21.8±0.02µs        ? ?/sec    1.00     21.8±0.02µs        ? ?/sec
dense_union_sliced: 1/2 of 16384 rows         1.00     21.7±0.02µs        ? ?/sec    1.00     21.8±0.02µs        ? ?/sec
dense_union_sliced: 1/5 of 40960 rows         1.00     21.7±0.03µs        ? ?/sec    1.01     21.9±0.02µs        ? ?/sec
dictionary_sliced: 1/10 of 81920 values                                              1.00     53.0±0.04µs        ? ?/sec
dictionary_sliced: 1/2 of 16384 values                                               1.00     32.8±0.02µs        ? ?/sec
dictionary_sliced: 1/5 of 40960 values                                               1.00     78.9±0.17µs        ? ?/sec
dictionary_utf8_int32: multiple, no nulls     1.00     10.8±0.01µs        ? ?/sec    1.00     10.8±0.01µs        ? ?/sec
dictionary_utf8_int32: multiple, nulls        1.03     26.4±0.11µs        ? ?/sec    1.00     25.8±0.02µs        ? ?/sec
dictionary_utf8_int32: single, no nulls       1.00      3.2±0.00µs        ? ?/sec    1.01      3.3±0.00µs        ? ?/sec
dictionary_utf8_int32: single, nulls          1.00      8.2±0.02µs        ? ?/sec    1.00      8.2±0.01µs        ? ?/sec
fixed_size_list_array: multiple, no nulls     1.01    106.0±3.75µs        ? ?/sec    1.00    104.6±0.21µs        ? ?/sec
fixed_size_list_array: multiple, nulls        1.00    110.7±0.06µs        ? ?/sec    1.00    110.3±0.25µs        ? ?/sec
fixed_size_list_array: single, no nulls       1.05     34.9±0.28µs        ? ?/sec    1.00     33.4±0.08µs        ? ?/sec
fixed_size_list_array: single, nulls          1.00     37.2±0.06µs        ? ?/sec    1.00     37.2±0.05µs        ? ?/sec
int64: multiple, no nulls                     1.00     11.7±0.01µs        ? ?/sec    1.00     11.7±0.02µs        ? ?/sec
int64: multiple, nulls                        1.00     26.7±0.01µs        ? ?/sec    1.01     26.9±0.05µs        ? ?/sec
int64: single, no nulls                       1.00      3.8±0.01µs        ? ?/sec    1.00      3.8±0.01µs        ? ?/sec
int64: single, nulls                          1.00      8.8±0.01µs        ? ?/sec    1.00      8.7±0.02µs        ? ?/sec
large_utf8: multiple, no nulls                1.06    128.1±0.72µs        ? ?/sec    1.00    121.4±1.16µs        ? ?/sec
large_utf8: multiple, nulls                   1.00    129.7±0.58µs        ? ?/sec    1.03    133.8±0.54µs        ? ?/sec
large_utf8: single, no nulls                  1.00     28.7±0.70µs        ? ?/sec    1.38     39.6±0.10µs        ? ?/sec
large_utf8: single, nulls                     1.00     34.3±0.14µs        ? ?/sec    1.26     43.0±0.59µs        ? ?/sec
list_array: multiple, no nulls                1.03    133.7±3.43µs        ? ?/sec    1.00    130.0±0.19µs        ? ?/sec
list_array: multiple, nulls                   1.00    157.0±0.13µs        ? ?/sec    1.01    158.5±0.18µs        ? ?/sec
list_array: single, no nulls                  1.00     43.2±0.04µs        ? ?/sec    1.01     43.7±0.52µs        ? ?/sec
list_array: single, nulls                     1.00     52.6±0.04µs        ? ?/sec    1.01     53.1±0.05µs        ? ?/sec
list_array_sliced: 1/10 of 81920 rows         1.00     43.2±0.09µs        ? ?/sec    1.00     43.3±0.04µs        ? ?/sec
list_array_sliced: 1/2 of 16384 rows          1.00     43.4±0.09µs        ? ?/sec    1.01     43.7±0.04µs        ? ?/sec
list_array_sliced: 1/5 of 40960 rows          1.04     45.5±1.31µs        ? ?/sec    1.00     43.6±0.16µs        ? ?/sec
list_view_array: multiple, no nulls           1.01    126.5±0.29µs        ? ?/sec    1.00    125.1±0.14µs        ? ?/sec
list_view_array: multiple, nulls              1.00    131.3±0.08µs        ? ?/sec    1.01    132.0±0.30µs        ? ?/sec
list_view_array: single, no nulls             1.00     41.1±0.04µs        ? ?/sec    1.01     41.6±0.43µs        ? ?/sec
list_view_array: single, nulls                1.00     44.0±0.03µs        ? ?/sec    1.01     44.4±0.04µs        ? ?/sec
map_array: multiple, no nulls                 1.00    195.3±0.48µs        ? ?/sec    1.01    196.6±0.32µs        ? ?/sec
map_array: multiple, nulls                    1.00    203.1±0.12µs        ? ?/sec    1.00    204.1±2.23µs        ? ?/sec
map_array: single, no nulls                   1.00     65.2±0.32µs        ? ?/sec    1.01     65.7±0.04µs        ? ?/sec
map_array: single, nulls                      1.00     67.9±0.06µs        ? ?/sec    1.01     68.5±0.20µs        ? ?/sec
map_array_sliced: 1/10 of 81920 rows          1.00     65.2±0.06µs        ? ?/sec    1.01     66.0±0.98µs        ? ?/sec
map_array_sliced: 1/2 of 16384 rows           1.00     65.2±0.05µs        ? ?/sec    1.01     65.7±0.05µs        ? ?/sec
map_array_sliced: 1/5 of 40960 rows           1.01     65.9±0.07µs        ? ?/sec    1.00     65.5±0.09µs        ? ?/sec
mixed: 3 columns (int64, utf8, utf8_view)     1.08     87.7±0.16µs        ? ?/sec    1.00     81.5±0.36µs        ? ?/sec
null: multiple, no nulls                      1.00      2.5±0.03µs        ? ?/sec    1.00      2.5±0.01µs        ? ?/sec
null: single, no nulls                        1.00   1110.9±2.85ns        ? ?/sec    1.00   1109.1±2.76ns        ? ?/sec
run_array_int32: multiple, no nulls           1.00      4.9±0.01µs        ? ?/sec    1.00      4.9±0.01µs        ? ?/sec
run_array_int32: multiple, nulls              1.00      6.7±0.01µs        ? ?/sec    1.00      6.7±0.01µs        ? ?/sec
run_array_int32: single, no nulls             1.00   1805.6±4.79ns        ? ?/sec    1.00   1805.4±3.01ns        ? ?/sec
run_array_int32: single, nulls                1.00      2.3±0.01µs        ? ?/sec    1.00      2.3±0.00µs        ? ?/sec
sparse_union (2 types): multiple, no nulls    1.00     98.2±0.39µs        ? ?/sec    1.00     98.0±0.58µs        ? ?/sec
sparse_union (2 types): single, no nulls      1.03     34.5±1.08µs        ? ?/sec    1.00     33.6±0.43µs        ? ?/sec
sparse_union (utf8): multiple, no nulls       1.01    237.3±1.10µs        ? ?/sec    1.00    234.5±0.95µs        ? ?/sec
sparse_union (utf8): single, no nulls         1.00     79.6±0.32µs        ? ?/sec    1.00     79.3±0.25µs        ? ?/sec
sparse_union: multiple, no nulls              1.02    97.0±11.87µs        ? ?/sec    1.00     94.7±0.42µs        ? ?/sec
sparse_union: single, no nulls                1.00     31.6±0.25µs        ? ?/sec    1.01     32.0±0.52µs        ? ?/sec
sparse_union_sliced: 1/10 of 81920 rows       1.00     31.9±0.70µs        ? ?/sec    1.00     31.8±0.15µs        ? ?/sec
sparse_union_sliced: 1/2 of 16384 rows        1.00     31.5±0.14µs        ? ?/sec    1.00     31.3±0.15µs        ? ?/sec
sparse_union_sliced: 1/5 of 40960 rows        1.00     31.7±0.31µs        ? ?/sec    1.01     31.9±0.29µs        ? ?/sec
struct_array: multiple, no nulls              1.19    178.9±0.52µs        ? ?/sec    1.00    150.5±0.82µs        ? ?/sec
struct_array: multiple, nulls                 1.18    196.1±0.84µs        ? ?/sec    1.00    166.5±0.52µs        ? ?/sec
struct_array: single, no nulls                1.17     60.3±0.16µs        ? ?/sec    1.00     51.7±7.61µs        ? ?/sec
struct_array: single, nulls                   1.17     65.6±0.21µs        ? ?/sec    1.00     56.0±0.29µs        ? ?/sec
utf8: multiple, no nulls                      1.24    142.6±0.46µs        ? ?/sec    1.00    114.9±0.46µs        ? ?/sec
utf8: multiple, nulls                         1.18    161.1±0.98µs        ? ?/sec    1.00    136.0±0.69µs        ? ?/sec
utf8: single, no nulls                        1.40     40.6±0.20µs        ? ?/sec    1.00     29.1±0.18µs        ? ?/sec
utf8: single, nulls                           1.00     44.1±0.20µs        ? ?/sec    1.02     44.8±0.91µs        ? ?/sec
utf8_view (small): multiple, no nulls         1.00     19.1±0.01µs        ? ?/sec    1.00     19.1±0.03µs        ? ?/sec
utf8_view (small): multiple, nulls            1.02     29.8±0.07µs        ? ?/sec    1.00     29.3±0.02µs        ? ?/sec
utf8_view (small): single, no nulls           1.00      5.0±0.00µs        ? ?/sec    1.00      5.1±0.00µs        ? ?/sec
utf8_view (small): single, nulls              1.00      9.7±0.02µs        ? ?/sec    1.00      9.7±0.01µs        ? ?/sec
utf8_view: multiple, no nulls                 1.00    102.3±0.28µs        ? ?/sec    1.00    101.9±0.35µs        ? ?/sec
utf8_view: multiple, nulls                    1.00    124.2±0.42µs        ? ?/sec    1.00    124.0±0.29µs        ? ?/sec
utf8_view: single, no nulls                   1.00     35.2±0.09µs        ? ?/sec    1.00     35.3±0.10µs        ? ?/sec
utf8_view: single, nulls                      1.02     36.8±0.11µs        ? ?/sec    1.00     36.3±0.29µs        ? ?/sec

Resource Usage

with_hashes — base (merge-base)

Metric Value
Wall time 770.2s
Peak memory 40.8 MiB
Avg memory 34.2 MiB
CPU user 880.9s
CPU sys 0.8s
Peak spill 0 B

with_hashes — branch

Metric Value
Wall time 790.2s
Peak memory 42.7 MiB
Avg memory 35.1 MiB
CPU user 918.5s
CPU sys 0.9s
Peak spill 0 B

File an issue against this benchmark runner

@jayzhan211
jayzhan211 marked this pull request as ready for review October 24, 2026 10:28
@jayzhan211
jayzhan211 marked this pull request as draft October 24, 2026 12:30
@jayzhan211

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_partitioned
baseline:
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"

@jayzhan211

Copy link
Copy Markdown
Contributor Author

run benchmark with_hashes

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c6384244706-3828-5pqrr 6.12.105+ #1 SMP Sat Sep 5 07:54:11 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/dictionary-work-bounded-by-rows (c459aba) to 039c0b9 (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
baseline:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"

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-c6384245088-3829-9tbzc 6.12.105+ #1 SMP Sat Sep 5 07:54:11 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/dictionary-work-bounded-by-rows (c459aba) to 039c0b9 (merge-base) diff

Run configuration
run benchmark with_hashes

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/dictionary-work-bounded-by-rows (c459aba) to 039c0b9 (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
baseline:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
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_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     1.17 ms │                              1.15 ms │     no change │
│ QQuery 1  │    11.27 ms │                             11.32 ms │     no change │
│ QQuery 2  │    35.24 ms │                             35.62 ms │     no change │
│ QQuery 3  │    31.22 ms │                             31.40 ms │     no change │
│ QQuery 4  │   235.39 ms │                            236.81 ms │     no change │
│ QQuery 5  │  1515.65 ms │                           1094.18 ms │ +1.39x faster │
│ QQuery 6  │     1.17 ms │                              1.18 ms │     no change │
│ QQuery 7  │    12.31 ms │                             12.32 ms │     no change │
│ QQuery 8  │   333.39 ms │                            337.15 ms │     no change │
│ QQuery 9  │   479.08 ms │                            472.68 ms │     no change │
│ QQuery 10 │   199.35 ms │                            200.11 ms │     no change │
│ QQuery 11 │   209.02 ms │                            210.18 ms │     no change │
│ QQuery 12 │  1498.52 ms │                           1112.52 ms │ +1.35x faster │
│ QQuery 13 │  2048.95 ms │                           1526.42 ms │ +1.34x faster │
│ QQuery 14 │  1662.42 ms │                           1205.47 ms │ +1.38x faster │
│ QQuery 15 │   294.08 ms │                            298.70 ms │     no change │
│ QQuery 16 │  3609.72 ms │                           2263.87 ms │ +1.59x faster │
│ QQuery 17 │  3747.63 ms │                           2217.05 ms │ +1.69x faster │
│ QQuery 18 │  6892.81 ms │                           3736.22 ms │ +1.84x faster │
│ QQuery 19 │    27.10 ms │                             27.19 ms │     no change │
│ QQuery 20 │  1050.54 ms │                           1038.77 ms │     no change │
│ QQuery 21 │  1358.81 ms │                           1364.57 ms │     no change │
│ QQuery 22 │  3223.32 ms │                           3219.57 ms │     no change │
│ QQuery 23 │  9263.41 ms │                           9316.74 ms │     no change │
│ QQuery 24 │    95.94 ms │                             94.98 ms │     no change │
│ QQuery 25 │   352.73 ms │                            350.43 ms │     no change │
│ QQuery 26 │    95.88 ms │                             96.92 ms │     no change │
│ QQuery 27 │  1134.83 ms │                           1133.92 ms │     no change │
│ QQuery 28 │  3522.69 ms │                           3504.72 ms │     no change │
│ QQuery 29 │    38.75 ms │                             38.56 ms │     no change │
│ QQuery 30 │   545.35 ms │                            547.09 ms │     no change │
│ QQuery 31 │   541.69 ms │                            524.26 ms │     no change │
│ QQuery 32 │  1065.13 ms │                           1005.78 ms │ +1.06x faster │
│ QQuery 33 │ 13687.03 ms │                           7451.46 ms │ +1.84x faster │
│ QQuery 34 │ 14076.45 ms │                           7387.38 ms │ +1.91x faster │
│ QQuery 35 │   295.85 ms │                            300.27 ms │     no change │
│ QQuery 36 │   171.29 ms │                            135.68 ms │ +1.26x faster │
│ QQuery 37 │    96.34 ms │                             95.96 ms │     no change │
│ QQuery 38 │    80.57 ms │                             84.27 ms │     no change │
│ QQuery 39 │   395.22 ms │                            282.80 ms │ +1.40x faster │
│ QQuery 40 │    14.17 ms │                             13.77 ms │     no change │
│ QQuery 41 │    13.82 ms │                             13.66 ms │     no change │
│ QQuery 42 │    13.26 ms │                             12.80 ms │     no change │
└───────────┴─────────────┴──────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 73978.57ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 53045.92ms │
│ Average Time (HEAD)                                 │  1720.43ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │  1233.63ms │
│ Queries Faster                                      │         12 │
│ Queries Slower                                      │          0 │
│ Queries with No Change                              │         31 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and perf_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃   perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │              1.17 / 4.28 ±6.07 / 16.41 ms │           1.15 / 4.24 ±6.04 / 16.32 ms │     no change │
│ QQuery 1  │            11.27 / 11.44 ±0.18 / 11.77 ms │         11.32 / 11.46 ±0.12 / 11.69 ms │     no change │
│ QQuery 2  │            35.24 / 35.89 ±0.66 / 37.15 ms │         35.62 / 35.90 ±0.21 / 36.22 ms │     no change │
│ QQuery 3  │            31.22 / 32.15 ±1.36 / 34.80 ms │         31.40 / 31.71 ±0.19 / 31.99 ms │     no change │
│ QQuery 4  │         235.39 / 240.93 ±2.94 / 243.52 ms │      236.81 / 241.77 ±3.26 / 245.73 ms │     no change │
│ QQuery 5  │     1515.65 / 1540.32 ±25.16 / 1586.48 ms │  1094.18 / 1110.10 ±13.17 / 1128.44 ms │ +1.39x faster │
│ QQuery 6  │               1.17 / 1.34 ±0.23 / 1.78 ms │            1.18 / 1.34 ±0.24 / 1.81 ms │     no change │
│ QQuery 7  │            12.31 / 12.48 ±0.11 / 12.60 ms │         12.32 / 12.56 ±0.18 / 12.87 ms │     no change │
│ QQuery 8  │         333.39 / 342.43 ±7.88 / 356.90 ms │      337.15 / 340.02 ±2.52 / 343.31 ms │     no change │
│ QQuery 9  │         479.08 / 487.55 ±5.13 / 493.13 ms │     472.68 / 482.44 ±10.12 / 499.64 ms │     no change │
│ QQuery 10 │         199.35 / 202.67 ±5.29 / 213.21 ms │      200.11 / 200.86 ±0.67 / 201.91 ms │     no change │
│ QQuery 11 │         209.02 / 210.23 ±0.73 / 210.97 ms │      210.18 / 210.72 ±0.52 / 211.41 ms │     no change │
│ QQuery 12 │     1498.52 / 1533.20 ±34.09 / 1596.00 ms │  1112.52 / 1142.68 ±28.52 / 1186.19 ms │ +1.34x faster │
│ QQuery 13 │    2048.95 / 2488.82 ±393.43 / 3113.35 ms │  1526.42 / 1584.03 ±35.79 / 1635.46 ms │ +1.57x faster │
│ QQuery 14 │     1662.42 / 1719.91 ±40.81 / 1777.37 ms │  1205.47 / 1242.39 ±35.66 / 1309.34 ms │ +1.38x faster │
│ QQuery 15 │         294.08 / 298.89 ±3.24 / 303.05 ms │      298.70 / 307.43 ±9.69 / 325.99 ms │     no change │
│ QQuery 16 │    3609.72 / 3867.65 ±137.51 / 4009.66 ms │  2263.87 / 2297.81 ±31.25 / 2334.71 ms │ +1.68x faster │
│ QQuery 17 │     3747.63 / 3843.11 ±74.04 / 3942.25 ms │  2217.05 / 2302.45 ±44.28 / 2345.33 ms │ +1.67x faster │
│ QQuery 18 │    6892.81 / 7065.45 ±160.82 / 7292.69 ms │  3736.22 / 3805.22 ±55.69 / 3892.04 ms │ +1.86x faster │
│ QQuery 19 │           27.10 / 35.24 ±15.40 / 66.02 ms │         27.19 / 27.33 ±0.14 / 27.58 ms │ +1.29x faster │
│ QQuery 20 │      1050.54 / 1063.16 ±9.10 / 1073.89 ms │  1038.77 / 1064.25 ±17.63 / 1086.22 ms │     no change │
│ QQuery 21 │      1358.81 / 1366.90 ±6.48 / 1378.16 ms │   1364.57 / 1375.31 ±7.42 / 1384.36 ms │     no change │
│ QQuery 22 │     3223.32 / 3277.39 ±56.74 / 3379.84 ms │  3219.57 / 3300.36 ±99.21 / 3487.52 ms │     no change │
│ QQuery 23 │    9263.41 / 9399.17 ±166.02 / 9718.72 ms │ 9316.74 / 9404.48 ±116.93 / 9632.05 ms │     no change │
│ QQuery 24 │        95.94 / 156.91 ±116.11 / 389.07 ms │     94.98 / 148.98 ±104.80 / 358.55 ms │ +1.05x faster │
│ QQuery 25 │         352.73 / 354.94 ±2.13 / 358.02 ms │      350.43 / 355.22 ±3.84 / 361.58 ms │     no change │
│ QQuery 26 │           95.88 / 98.76 ±3.17 / 104.65 ms │         96.92 / 97.71 ±0.75 / 99.07 ms │     no change │
│ QQuery 27 │      1134.83 / 1142.27 ±4.49 / 1148.55 ms │  1133.92 / 1153.86 ±13.63 / 1170.73 ms │     no change │
│ QQuery 28 │     3522.69 / 3551.04 ±24.51 / 3585.57 ms │  3504.72 / 3543.84 ±33.68 / 3590.91 ms │     no change │
│ QQuery 29 │            38.75 / 46.96 ±9.88 / 60.77 ms │         38.56 / 39.02 ±0.27 / 39.41 ms │ +1.20x faster │
│ QQuery 30 │         545.35 / 548.78 ±3.47 / 555.01 ms │      547.09 / 555.82 ±6.94 / 566.08 ms │     no change │
│ QQuery 31 │        541.69 / 556.83 ±16.94 / 589.79 ms │     524.26 / 557.03 ±26.06 / 583.66 ms │     no change │
│ QQuery 32 │    1065.13 / 1256.06 ±232.56 / 1705.26 ms │  1005.78 / 1067.35 ±44.34 / 1127.33 ms │ +1.18x faster │
│ QQuery 33 │ 13687.03 / 14496.46 ±676.07 / 15320.67 ms │ 7451.46 / 7751.55 ±240.88 / 8101.21 ms │ +1.87x faster │
│ QQuery 34 │ 14076.45 / 15055.05 ±856.04 / 16530.37 ms │ 7387.38 / 7577.98 ±194.05 / 7919.90 ms │ +1.99x faster │
│ QQuery 35 │        295.85 / 323.91 ±33.52 / 387.18 ms │     300.27 / 336.51 ±33.94 / 395.51 ms │     no change │
│ QQuery 36 │        171.29 / 194.41 ±22.42 / 236.04 ms │     135.68 / 150.20 ±10.10 / 163.97 ms │ +1.29x faster │
│ QQuery 37 │            96.34 / 97.78 ±1.15 / 99.58 ms │       95.96 / 100.56 ±3.49 / 106.69 ms │     no change │
│ QQuery 38 │            80.57 / 85.23 ±4.21 / 93.13 ms │         84.27 / 86.72 ±1.67 / 89.52 ms │     no change │
│ QQuery 39 │        395.22 / 407.55 ±13.83 / 433.75 ms │      282.80 / 287.43 ±3.41 / 292.15 ms │ +1.42x faster │
│ QQuery 40 │            14.17 / 14.65 ±0.46 / 15.43 ms │         13.77 / 16.86 ±4.03 / 24.83 ms │  1.15x slower │
│ QQuery 41 │            13.82 / 14.01 ±0.21 / 14.39 ms │         13.66 / 16.48 ±4.77 / 26.00 ms │  1.18x slower │
│ QQuery 42 │            13.26 / 13.39 ±0.08 / 13.50 ms │         12.80 / 12.89 ±0.08 / 13.03 ms │     no change │
└───────────┴───────────────────────────────────────────┴────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 77495.59ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 54392.88ms │
│ Average Time (HEAD)                                 │  1802.22ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │  1264.95ms │
│ Queries Faster                                      │         15 │
│ Queries Slower                                      │          2 │
│ Queries with No Change                              │         26 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 390.1s
Peak memory 13.5 GiB
Avg memory 6.1 GiB
CPU user 3364.5s
CPU sys 209.3s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 275.1s
Peak memory 15.7 GiB
Avg memory 6.3 GiB
CPU user 2159.7s
CPU sys 178.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)

Comparing perf/dictionary-work-bounded-by-rows (c459aba) to 039c0b9 (merge-base) diff

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

group                                         HEAD                                   perf_dictionary-work-bounded-by-rows
-----                                         ----                                   ------------------------------------
dense_union: multiple, no nulls               1.00     41.7±0.05µs        ? ?/sec    1.00     41.5±0.14µs        ? ?/sec
dense_union: single, no nulls                 1.00     14.1±0.01µs        ? ?/sec    1.00     14.1±0.02µs        ? ?/sec
dense_union_sliced: 1/10 of 81920 rows        1.00     21.7±0.02µs        ? ?/sec    1.00     21.8±0.03µs        ? ?/sec
dense_union_sliced: 1/2 of 16384 rows         1.00     21.7±0.05µs        ? ?/sec    1.00     21.8±0.03µs        ? ?/sec
dense_union_sliced: 1/5 of 40960 rows         1.00     21.6±0.02µs        ? ?/sec    1.00     21.7±0.02µs        ? ?/sec
dictionary_sliced: 1/32 of 262144 values                                             1.00     53.2±0.04µs        ? ?/sec
dictionary_sliced: 1/8 of 65536 values                                               1.00    122.5±0.41µs        ? ?/sec
dictionary_utf8_int32: multiple, no nulls     1.00     10.8±0.03µs        ? ?/sec    1.00     10.8±0.01µs        ? ?/sec
dictionary_utf8_int32: multiple, nulls        1.01     26.3±0.07µs        ? ?/sec    1.00     26.0±0.05µs        ? ?/sec
dictionary_utf8_int32: single, no nulls       1.00      3.3±0.00µs        ? ?/sec    1.00      3.3±0.00µs        ? ?/sec
dictionary_utf8_int32: single, nulls          1.00      8.1±0.02µs        ? ?/sec    1.02      8.2±0.01µs        ? ?/sec
fixed_size_list_array: multiple, no nulls     1.05    107.8±0.50µs        ? ?/sec    1.00    102.7±2.39µs        ? ?/sec
fixed_size_list_array: multiple, nulls        1.02    110.7±0.15µs        ? ?/sec    1.00    109.0±0.35µs        ? ?/sec
fixed_size_list_array: single, no nulls       1.01     33.7±0.11µs        ? ?/sec    1.00     33.5±0.05µs        ? ?/sec
fixed_size_list_array: single, nulls          1.01     37.2±0.06µs        ? ?/sec    1.00     36.7±0.10µs        ? ?/sec
int64: multiple, no nulls                     1.00     11.7±0.01µs        ? ?/sec    1.00     11.7±0.02µs        ? ?/sec
int64: multiple, nulls                        1.00     26.7±0.02µs        ? ?/sec    1.01     26.9±0.02µs        ? ?/sec
int64: single, no nulls                       1.00      3.8±0.01µs        ? ?/sec    1.00      3.8±0.01µs        ? ?/sec
int64: single, nulls                          1.00      8.8±0.01µs        ? ?/sec    1.00      8.7±0.01µs        ? ?/sec
large_utf8: multiple, no nulls                1.04    128.3±0.72µs        ? ?/sec    1.00    123.2±0.68µs        ? ?/sec
large_utf8: multiple, nulls                   1.00    129.4±0.48µs        ? ?/sec    1.12    144.6±0.86µs        ? ?/sec
large_utf8: single, no nulls                  1.00     29.8±0.29µs        ? ?/sec    1.35     40.2±0.10µs        ? ?/sec
large_utf8: single, nulls                     1.01     34.6±0.28µs        ? ?/sec    1.00     34.3±0.23µs        ? ?/sec
list_array: multiple, no nulls                1.00    128.9±0.10µs        ? ?/sec    1.00    129.0±0.09µs        ? ?/sec
list_array: multiple, nulls                   1.00    157.0±0.09µs        ? ?/sec    1.01    157.8±0.14µs        ? ?/sec
list_array: single, no nulls                  1.07     46.3±0.20µs        ? ?/sec    1.00     43.3±0.06µs        ? ?/sec
list_array: single, nulls                     1.00     52.6±0.04µs        ? ?/sec    1.00     52.8±0.04µs        ? ?/sec
list_array_sliced: 1/10 of 81920 rows         1.00     43.2±0.03µs        ? ?/sec    1.01     43.5±0.03µs        ? ?/sec
list_array_sliced: 1/2 of 16384 rows          1.00     43.6±0.13µs        ? ?/sec    1.00     43.4±0.03µs        ? ?/sec
list_array_sliced: 1/5 of 40960 rows          1.07     46.1±0.39µs        ? ?/sec    1.00     43.0±0.20µs        ? ?/sec
list_view_array: multiple, no nulls           1.00    125.1±0.21µs        ? ?/sec    1.04    129.6±0.73µs        ? ?/sec
list_view_array: multiple, nulls              1.00    132.6±0.15µs        ? ?/sec    1.00    132.5±0.17µs        ? ?/sec
list_view_array: single, no nulls             1.02     42.2±1.49µs        ? ?/sec    1.00     41.6±0.07µs        ? ?/sec
list_view_array: single, nulls                1.01     44.7±0.05µs        ? ?/sec    1.00     44.4±0.05µs        ? ?/sec
map_array: multiple, no nulls                 1.00    193.5±0.23µs        ? ?/sec    1.01    195.1±0.34µs        ? ?/sec
map_array: multiple, nulls                    1.00    202.5±0.19µs        ? ?/sec    1.00    203.0±0.19µs        ? ?/sec
map_array: single, no nulls                   1.00     64.7±0.05µs        ? ?/sec    1.01     65.6±0.25µs        ? ?/sec
map_array: single, nulls                      1.00     67.7±0.09µs        ? ?/sec    1.00     67.9±0.04µs        ? ?/sec
map_array_sliced: 1/10 of 81920 rows          1.00     64.8±0.06µs        ? ?/sec    1.02     66.0±0.16µs        ? ?/sec
map_array_sliced: 1/2 of 16384 rows           1.00     65.0±0.16µs        ? ?/sec    1.01     65.6±0.07µs        ? ?/sec
map_array_sliced: 1/5 of 40960 rows           1.01     65.7±0.22µs        ? ?/sec    1.00     65.4±0.04µs        ? ?/sec
mixed: 3 columns (int64, utf8, utf8_view)     1.09     87.7±0.29µs        ? ?/sec    1.00     80.4±0.66µs        ? ?/sec
null: multiple, no nulls                      1.01      2.5±0.00µs        ? ?/sec    1.00      2.5±0.01µs        ? ?/sec
null: single, no nulls                        1.00   1110.3±2.67ns        ? ?/sec    1.00   1111.1±2.90ns        ? ?/sec
run_array_int32: multiple, no nulls           1.00      4.9±0.01µs        ? ?/sec    1.00      4.9±0.01µs        ? ?/sec
run_array_int32: multiple, nulls              1.00      6.6±0.01µs        ? ?/sec    1.03      6.8±0.02µs        ? ?/sec
run_array_int32: single, no nulls             1.00   1804.9±4.09ns        ? ?/sec    1.00   1811.5±4.00ns        ? ?/sec
run_array_int32: single, nulls                1.00      2.3±0.00µs        ? ?/sec    1.07      2.4±0.00µs        ? ?/sec
sparse_union (2 types): multiple, no nulls    1.00     96.9±0.34µs        ? ?/sec    1.00     97.2±0.48µs        ? ?/sec
sparse_union (2 types): single, no nulls      1.00     32.6±0.12µs        ? ?/sec    1.03     33.6±1.39µs        ? ?/sec
sparse_union (utf8): multiple, no nulls       1.00    235.2±1.24µs        ? ?/sec    1.00    235.9±0.86µs        ? ?/sec
sparse_union (utf8): single, no nulls         1.00     78.4±0.39µs        ? ?/sec    1.01     79.0±0.31µs        ? ?/sec
sparse_union: multiple, no nulls              1.00     93.6±0.63µs        ? ?/sec    1.01     94.9±0.58µs        ? ?/sec
sparse_union: single, no nulls                1.00     31.5±0.20µs        ? ?/sec    1.01     31.9±0.20µs        ? ?/sec
sparse_union_sliced: 1/10 of 81920 rows       1.00     31.8±0.19µs        ? ?/sec    1.00     31.9±0.31µs        ? ?/sec
sparse_union_sliced: 1/2 of 16384 rows        1.01     31.8±0.22µs        ? ?/sec    1.00     31.6±0.27µs        ? ?/sec
sparse_union_sliced: 1/5 of 40960 rows        1.00     31.6±0.24µs        ? ?/sec    1.00     31.7±0.23µs        ? ?/sec
struct_array: multiple, no nulls              1.17    173.8±0.92µs        ? ?/sec    1.00    148.9±0.65µs        ? ?/sec
struct_array: multiple, nulls                 1.18    195.8±2.83µs        ? ?/sec    1.00    166.2±1.10µs        ? ?/sec
struct_array: single, no nulls                1.17     59.4±0.72µs        ? ?/sec    1.00     50.5±0.50µs        ? ?/sec
struct_array: single, nulls                   1.15     63.9±0.41µs        ? ?/sec    1.00     55.6±0.47µs        ? ?/sec
utf8: multiple, no nulls                      1.24    142.6±0.45µs        ? ?/sec    1.00    115.3±0.49µs        ? ?/sec
utf8: multiple, nulls                         1.00    161.4±0.99µs        ? ?/sec    1.00    161.1±0.79µs        ? ?/sec
utf8: single, no nulls                        1.40     41.0±0.12µs        ? ?/sec    1.00     29.2±0.14µs        ? ?/sec
utf8: single, nulls                           1.00     45.3±1.09µs        ? ?/sec    1.01     45.9±2.00µs        ? ?/sec
utf8_view (small): multiple, no nulls         1.00     19.0±0.01µs        ? ?/sec    1.00     19.0±0.01µs        ? ?/sec
utf8_view (small): multiple, nulls            1.01     29.8±0.07µs        ? ?/sec    1.00     29.4±0.02µs        ? ?/sec
utf8_view (small): single, no nulls           1.00      5.0±0.00µs        ? ?/sec    1.00      5.1±0.00µs        ? ?/sec
utf8_view (small): single, nulls              1.00      9.7±0.01µs        ? ?/sec    1.00      9.7±0.01µs        ? ?/sec
utf8_view: multiple, no nulls                 1.05    102.2±0.14µs        ? ?/sec    1.00     97.5±0.16µs        ? ?/sec
utf8_view: multiple, nulls                    1.00    124.2±0.25µs        ? ?/sec    1.00    124.0±0.40µs        ? ?/sec
utf8_view: single, no nulls                   1.14     34.7±0.12µs        ? ?/sec    1.00     30.5±0.05µs        ? ?/sec
utf8_view: single, nulls                      1.00     36.5±0.12µs        ? ?/sec    1.00     36.5±0.07µs        ? ?/sec

Resource Usage

with_hashes — base (merge-base)

Metric Value
Wall time 745.2s
Peak memory 40.5 MiB
Avg memory 35.0 MiB
CPU user 884.3s
CPU sys 0.8s
Peak spill 0 B

with_hashes — branch

Metric Value
Wall time 780.2s
Peak memory 46.2 MiB
Avg memory 38.2 MiB
CPU user 903.5s
CPU sys 0.8s
Peak spill 0 B

File an issue against this benchmark runner

@Jefffrey Jefffrey left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

makes sense to me

@jayzhan211
jayzhan211 force-pushed the perf/dictionary-work-bounded-by-rows branch from eab0efb to cd7235f Compare November 7, 2026 06:28
@github-actions github-actions Bot added the physical-plan Changes to the physical-plan crate label Nov 7, 2026
@jayzhan211

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_partitioned
baseline:
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c6703380077-4582-x5dsm 6.12.105+ #1 SMP Sat Sep 19 07:55:25 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/dictionary-work-bounded-by-rows (cd7235f) to 4bf32cb (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
baseline:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"

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/dictionary-work-bounded-by-rows (cd7235f) to 4bf32cb (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
baseline:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
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_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     1.23 ms │                              1.16 ms │ +1.07x faster │
│ QQuery 1  │    11.78 ms │                             11.41 ms │     no change │
│ QQuery 2  │    35.29 ms │                             35.03 ms │     no change │
│ QQuery 3  │    31.91 ms │                             31.17 ms │     no change │
│ QQuery 4  │   275.40 ms │                            258.39 ms │ +1.07x faster │
│ QQuery 5  │  1705.11 ms │                            876.52 ms │ +1.95x faster │
│ QQuery 6  │     1.21 ms │                              1.20 ms │     no change │
│ QQuery 7  │    13.53 ms │                             12.99 ms │     no change │
│ QQuery 8  │   373.83 ms │                            363.93 ms │     no change │
│ QQuery 9  │   541.92 ms │                            521.05 ms │     no change │
│ QQuery 10 │   204.97 ms │                            205.94 ms │     no change │
│ QQuery 11 │   215.45 ms │                            218.51 ms │     no change │
│ QQuery 12 │  1660.20 ms │                            899.76 ms │ +1.85x faster │
│ QQuery 13 │  2351.67 ms │                           1216.94 ms │ +1.93x faster │
│ QQuery 14 │  1813.81 ms │                            930.99 ms │ +1.95x faster │
│ QQuery 15 │   331.71 ms │                            313.50 ms │ +1.06x faster │
│ QQuery 16 │  4094.89 ms │                           1381.32 ms │ +2.96x faster │
│ QQuery 17 │  4151.53 ms │                           1380.76 ms │ +3.01x faster │
│ QQuery 18 │  7640.70 ms │                           2282.92 ms │ +3.35x faster │
│ QQuery 19 │    28.58 ms │                             28.71 ms │     no change │
│ QQuery 20 │  1100.83 ms │                           1098.24 ms │     no change │
│ QQuery 21 │  1431.47 ms │                           1431.87 ms │     no change │
│ QQuery 22 │  3336.06 ms │                           3327.88 ms │     no change │
│ QQuery 23 │  9629.08 ms │                           9489.32 ms │     no change │
│ QQuery 24 │    98.98 ms │                             98.29 ms │     no change │
│ QQuery 25 │   358.64 ms │                            361.62 ms │     no change │
│ QQuery 26 │    97.93 ms │                            101.36 ms │     no change │
│ QQuery 27 │  1200.01 ms │                           1215.83 ms │     no change │
│ QQuery 28 │  2971.68 ms │                           2711.11 ms │ +1.10x faster │
│ QQuery 29 │    38.65 ms │                             39.19 ms │     no change │
│ QQuery 30 │   569.63 ms │                            575.24 ms │     no change │
│ QQuery 31 │   579.90 ms │                            571.64 ms │     no change │
│ QQuery 32 │  1105.18 ms │                           1202.66 ms │  1.09x slower │
│ QQuery 33 │ 14896.85 ms │                           4407.29 ms │ +3.38x faster │
│ QQuery 34 │ 14755.30 ms │                           4131.38 ms │ +3.57x faster │
│ QQuery 35 │   327.14 ms │                            359.13 ms │  1.10x slower │
│ QQuery 36 │   182.58 ms │                            164.18 ms │ +1.11x faster │
│ QQuery 37 │    98.97 ms │                            103.69 ms │     no change │
│ QQuery 38 │    85.97 ms │                             85.91 ms │     no change │
│ QQuery 39 │   412.48 ms │                            333.17 ms │ +1.24x faster │
│ QQuery 40 │    14.75 ms │                             15.50 ms │  1.05x slower │
│ QQuery 41 │    14.31 ms │                             14.64 ms │     no change │
│ QQuery 42 │    13.92 ms │                             14.43 ms │     no change │
└───────────┴─────────────┴──────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 78805.04ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 42825.76ms │
│ Average Time (HEAD)                                 │  1832.68ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │   995.95ms │
│ Queries Faster                                      │         15 │
│ Queries Slower                                      │          3 │
│ Queries with No Change                              │         25 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and perf_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                       HEAD ┃    perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │                1.23 / 1.96 ±1.23 / 4.42 ms │             1.16 / 1.82 ±1.16 / 4.13 ms │ +1.08x faster │
│ QQuery 1  │             11.78 / 12.33 ±0.49 / 13.17 ms │          11.41 / 11.65 ±0.15 / 11.84 ms │ +1.06x faster │
│ QQuery 2  │             35.29 / 35.95 ±0.53 / 36.92 ms │          35.03 / 35.30 ±0.22 / 35.68 ms │     no change │
│ QQuery 3  │             31.91 / 32.96 ±1.20 / 35.23 ms │          31.17 / 31.82 ±0.45 / 32.47 ms │     no change │
│ QQuery 4  │          275.40 / 280.78 ±4.21 / 286.78 ms │       258.39 / 261.42 ±2.88 / 266.74 ms │ +1.07x faster │
│ QQuery 5  │      1705.11 / 1730.30 ±19.45 / 1761.68 ms │      876.52 / 891.30 ±12.04 / 909.69 ms │ +1.94x faster │
│ QQuery 6  │                1.21 / 1.38 ±0.23 / 1.83 ms │             1.20 / 1.35 ±0.24 / 1.82 ms │     no change │
│ QQuery 7  │             13.53 / 13.63 ±0.10 / 13.82 ms │          12.99 / 13.51 ±0.52 / 14.50 ms │     no change │
│ QQuery 8  │          373.83 / 381.85 ±4.62 / 386.37 ms │       363.93 / 370.95 ±4.98 / 379.50 ms │     no change │
│ QQuery 9  │          541.92 / 548.00 ±4.77 / 553.09 ms │      521.05 / 545.65 ±21.24 / 583.00 ms │     no change │
│ QQuery 10 │          204.97 / 206.36 ±1.14 / 208.03 ms │      205.94 / 212.85 ±12.42 / 237.68 ms │     no change │
│ QQuery 11 │          215.45 / 217.51 ±1.59 / 220.09 ms │       218.51 / 219.42 ±0.70 / 220.33 ms │     no change │
│ QQuery 12 │      1660.20 / 1718.67 ±40.31 / 1767.35 ms │      899.76 / 917.89 ±11.80 / 929.25 ms │ +1.87x faster │
│ QQuery 13 │     2351.67 / 2739.95 ±398.75 / 3365.65 ms │   1216.94 / 1258.50 ±37.08 / 1309.68 ms │ +2.18x faster │
│ QQuery 14 │      1813.81 / 1882.96 ±38.48 / 1923.71 ms │      930.99 / 943.51 ±10.25 / 958.68 ms │ +2.00x faster │
│ QQuery 15 │          331.71 / 340.09 ±8.05 / 354.04 ms │      313.50 / 335.10 ±14.61 / 349.09 ms │     no change │
│ QQuery 16 │      4094.89 / 4162.63 ±64.26 / 4275.51 ms │   1381.32 / 1433.70 ±30.13 / 1460.59 ms │ +2.90x faster │
│ QQuery 17 │      4151.53 / 4251.08 ±70.27 / 4337.02 ms │   1380.76 / 1421.80 ±21.37 / 1438.82 ms │ +2.99x faster │
│ QQuery 18 │     7640.70 / 7856.91 ±112.82 / 7954.62 ms │   2282.92 / 2289.21 ±10.04 / 2308.96 ms │ +3.43x faster │
│ QQuery 19 │           28.58 / 64.84 ±35.34 / 108.20 ms │          28.71 / 29.20 ±0.42 / 29.80 ms │ +2.22x faster │
│ QQuery 20 │       1100.83 / 1105.01 ±4.60 / 1112.81 ms │    1098.24 / 1111.89 ±9.84 / 1120.46 ms │     no change │
│ QQuery 21 │      1431.47 / 1445.40 ±13.16 / 1461.63 ms │    1431.87 / 1440.61 ±9.94 / 1459.23 ms │     no change │
│ QQuery 22 │      3336.06 / 3410.73 ±51.78 / 3498.13 ms │   3327.88 / 3381.44 ±40.59 / 3451.53 ms │     no change │
│ QQuery 23 │     9629.08 / 9748.17 ±125.17 / 9938.64 ms │ 9489.32 / 9708.59 ±210.88 / 10087.60 ms │     no change │
│ QQuery 24 │          98.98 / 108.99 ±14.27 / 136.78 ms │       98.29 / 138.08 ±77.96 / 293.99 ms │  1.27x slower │
│ QQuery 25 │          358.64 / 363.54 ±5.70 / 374.23 ms │       361.62 / 362.83 ±1.43 / 365.60 ms │     no change │
│ QQuery 26 │            97.93 / 99.74 ±1.43 / 102.11 ms │       101.36 / 103.49 ±2.57 / 108.42 ms │     no change │
│ QQuery 27 │       1200.01 / 1207.86 ±6.97 / 1218.84 ms │    1215.83 / 1230.88 ±9.32 / 1245.19 ms │     no change │
│ QQuery 28 │      2971.68 / 3018.59 ±37.39 / 3079.99 ms │   2711.11 / 2737.19 ±22.75 / 2765.66 ms │ +1.10x faster │
│ QQuery 29 │             38.65 / 39.27 ±0.65 / 40.47 ms │         39.19 / 49.00 ±19.29 / 87.58 ms │  1.25x slower │
│ QQuery 30 │         569.63 / 587.95 ±11.82 / 602.53 ms │      575.24 / 588.93 ±11.77 / 609.96 ms │     no change │
│ QQuery 31 │          579.90 / 586.38 ±3.78 / 591.19 ms │       571.64 / 581.14 ±9.31 / 592.75 ms │     no change │
│ QQuery 32 │      1105.18 / 1182.26 ±83.20 / 1343.71 ms │   1202.66 / 1242.79 ±28.84 / 1274.25 ms │  1.05x slower │
│ QQuery 33 │ 14896.85 / 16368.51 ±1097.74 / 17851.98 ms │  4407.29 / 4494.16 ±100.09 / 4689.27 ms │ +3.64x faster │
│ QQuery 34 │  14755.30 / 15705.78 ±667.09 / 16724.26 ms │   4131.38 / 4216.54 ±85.25 / 4374.74 ms │ +3.72x faster │
│ QQuery 35 │        327.14 / 398.39 ±107.27 / 611.86 ms │      359.13 / 375.07 ±10.56 / 388.74 ms │ +1.06x faster │
│ QQuery 36 │         182.58 / 201.32 ±14.70 / 226.98 ms │       164.18 / 170.57 ±5.01 / 176.58 ms │ +1.18x faster │
│ QQuery 37 │           98.97 / 103.85 ±5.34 / 114.05 ms │       103.69 / 107.44 ±4.11 / 114.93 ms │     no change │
│ QQuery 38 │             85.97 / 87.39 ±1.20 / 89.49 ms │         85.91 / 92.84 ±6.65 / 101.74 ms │  1.06x slower │
│ QQuery 39 │         412.48 / 433.44 ±13.18 / 446.13 ms │      333.17 / 348.00 ±12.51 / 366.39 ms │ +1.25x faster │
│ QQuery 40 │             14.75 / 17.80 ±5.17 / 28.13 ms │          15.50 / 16.17 ±0.39 / 16.59 ms │ +1.10x faster │
│ QQuery 41 │             14.31 / 16.19 ±2.80 / 21.75 ms │          14.64 / 20.84 ±6.85 / 33.36 ms │  1.29x slower │
│ QQuery 42 │             13.92 / 14.06 ±0.11 / 14.19 ms │          14.43 / 14.79 ±0.31 / 15.32 ms │  1.05x slower │
└───────────┴────────────────────────────────────────────┴─────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 82730.80ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 43759.25ms │
│ Average Time (HEAD)                                 │  1923.97ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │  1017.66ms │
│ Queries Faster                                      │         18 │
│ Queries Slower                                      │          6 │
│ Queries with No Change                              │         19 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 415.1s
Peak memory 13.1 GiB
Avg memory 6.1 GiB
CPU user 3567.0s
CPU sys 223.2s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 220.1s
Peak memory 12.7 GiB
Avg memory 5.7 GiB
CPU user 2104.3s
CPU sys 149.5s
Peak spill 0 B

File an issue against this benchmark runner

@jayzhan211

Copy link
Copy Markdown
Contributor Author

run benchmark with_hashes

@jayzhan211

Copy link
Copy Markdown
Contributor Author

run benchmark clickbench_partitioned
env:
DATAFUSION_EXECUTION_TARGET_PARTITIONS: "32"
baseline:
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
env:
DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"

@jayzhan211

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-c6703628936-4586-4kwhn 6.12.105+ #1 SMP Sat Sep 19 07:55:25 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/dictionary-work-bounded-by-rows (cd7235f) to 4bf32cb (merge-base) diff

Run configuration
run benchmark with_hashes

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-c6703629370-4587-gh6sm 6.12.105+ #1 SMP Sat Sep 19 07:55:25 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/dictionary-work-bounded-by-rows (cd7235f) to 4bf32cb (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 running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c6703629174-4585-jd62s 6.12.105+ #1 SMP Sat Sep 19 07:55:25 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/dictionary-work-bounded-by-rows (cd7235f) to 4bf32cb (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
env:
  DATAFUSION_EXECUTION_TARGET_PARTITIONS: "32"
baseline:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"

Results will be posted here when complete


File an issue against this benchmark runner

@jayzhan211

Copy link
Copy Markdown
Contributor Author

@Jefffrey thanks for the review. This PR changed substantially after your approval, so here is what's new. Your 8 reviewed commits are unchanged apart from a rebase, and the last 3 commits are new. I plan to merge it; if you'd like to look, next_batch in aggregate_hash_table/common.rs is the part you haven't seen, and I'll follow up in a new PR on anything you find.

  • Aggregate output: next_batch now gives a slice with more values than rows only the values its rows reference. This fixes Hash aggregate output slices keep the whole dictionary, so downstream work grows with the group count #26696 at its source, so it also helps the repartition coalescer and the final aggregate. ClickBench partitioned with dictionaries goes from 78.8 s to 42.8 s, and peak memory from 13.1 to 12.7 GiB (bot run).
  • Compaction: the new compact_dictionary takes each referenced value once. Copying a value per row, as the approved version did, gave wrong hashes and function results when a dictionary had more rows than its key type holds, could fail with an offset overflow, and was over 100x slower than main for a repeated 64 KB value.
  • Threshold: MAX_DICTIONARY_VALUES_PER_ROW goes from 16 to 64, because compacting just above 16 made cheap functions such as lower slower. It is now only a guard for filters and scans, where I measured no gain.
  • Tests: the dictionary.slt comparison never reached oversized dictionaries, because a filter on the group key is pushed below the aggregate. It is now projected, with a new block for filter output, and the bugs above have unit tests.

compact_dictionary is new public API, next to map_dictionary_values and MAX_DICTIONARY_VALUES_PER_ROW.

@jayzhan211 jayzhan211 changed the title perf: bound work over dictionary values by the batch's row count perf: stop dictionary work growing with the group count Nov 7, 2026
@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing perf/dictionary-work-bounded-by-rows (cd7235f) to 4bf32cb (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_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │    1.52 ms │                              1.19 ms │ +1.28x faster │
│ QQuery 1  │   12.20 ms │                             11.29 ms │ +1.08x faster │
│ QQuery 2  │   35.88 ms │                             34.57 ms │     no change │
│ QQuery 3  │   32.86 ms │                             30.41 ms │ +1.08x faster │
│ QQuery 4  │  282.50 ms │                            230.71 ms │ +1.22x faster │
│ QQuery 5  │  312.22 ms │                            275.44 ms │ +1.13x faster │
│ QQuery 6  │    1.48 ms │                              1.35 ms │ +1.10x faster │
│ QQuery 7  │   14.07 ms │                             13.82 ms │     no change │
│ QQuery 8  │  330.39 ms │                            330.86 ms │     no change │
│ QQuery 9  │  473.45 ms │                            457.77 ms │     no change │
│ QQuery 10 │   64.46 ms │                             64.36 ms │     no change │
│ QQuery 11 │   74.09 ms │                             74.86 ms │     no change │
│ QQuery 12 │  259.09 ms │                            257.78 ms │     no change │
│ QQuery 13 │  359.24 ms │                            361.43 ms │     no change │
│ QQuery 14 │  277.28 ms │                            274.89 ms │     no change │
│ QQuery 15 │  281.34 ms │                            275.80 ms │     no change │
│ QQuery 16 │  616.82 ms │                            623.89 ms │     no change │
│ QQuery 17 │  622.26 ms │                            707.01 ms │  1.14x slower │
│ QQuery 18 │ 1198.49 ms │                           1260.26 ms │  1.05x slower │
│ QQuery 19 │   27.42 ms │                             27.52 ms │     no change │
│ QQuery 20 │  520.24 ms │                            517.92 ms │     no change │
│ QQuery 21 │  509.04 ms │                            515.27 ms │     no change │
│ QQuery 22 │  977.47 ms │                            974.27 ms │     no change │
│ QQuery 23 │ 3046.51 ms │                           3051.93 ms │     no change │
│ QQuery 24 │   40.50 ms │                             40.84 ms │     no change │
│ QQuery 25 │  105.13 ms │                            104.81 ms │     no change │
│ QQuery 26 │   40.49 ms │                             40.92 ms │     no change │
│ QQuery 27 │  515.85 ms │                            505.58 ms │     no change │
│ QQuery 28 │ 2856.22 ms │                           2871.32 ms │     no change │
│ QQuery 29 │   39.92 ms │                             37.46 ms │ +1.07x faster │
│ QQuery 30 │  315.97 ms │                            307.38 ms │     no change │
│ QQuery 31 │  275.09 ms │                            271.01 ms │     no change │
│ QQuery 32 │  945.02 ms │                           1085.29 ms │  1.15x slower │
│ QQuery 33 │ 1425.23 ms │                           1433.14 ms │     no change │
│ QQuery 34 │ 1430.36 ms │                           1472.26 ms │     no change │
│ QQuery 35 │  286.38 ms │                            299.79 ms │     no change │
│ QQuery 36 │   68.14 ms │                             68.62 ms │     no change │
│ QQuery 37 │   34.87 ms │                             34.35 ms │     no change │
│ QQuery 38 │   39.11 ms │                             39.00 ms │     no change │
│ QQuery 39 │  141.64 ms │                            137.40 ms │     no change │
│ QQuery 40 │   13.72 ms │                             13.68 ms │     no change │
│ QQuery 41 │   13.30 ms │                             13.06 ms │     no change │
│ QQuery 42 │   12.74 ms │                             12.67 ms │     no change │
└───────────┴────────────┴──────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 18930.00ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 19163.14ms │
│ Average Time (HEAD)                                 │   440.23ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │   445.65ms │
│ Queries Faster                                      │          7 │
│ Queries Slower                                      │          3 │
│ Queries with No Change                              │         33 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and perf_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                   HEAD ┃   perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │            1.52 / 2.14 ±1.14 / 4.42 ms │            1.19 / 1.79 ±1.09 / 3.97 ms │ +1.19x faster │
│ QQuery 1  │         12.20 / 12.35 ±0.13 / 12.52 ms │         11.29 / 11.45 ±0.10 / 11.55 ms │ +1.08x faster │
│ QQuery 2  │         35.88 / 36.56 ±0.52 / 37.41 ms │         34.57 / 34.74 ±0.09 / 34.80 ms │     no change │
│ QQuery 3  │         32.86 / 33.93 ±0.94 / 35.37 ms │         30.41 / 30.83 ±0.31 / 31.33 ms │ +1.10x faster │
│ QQuery 4  │      282.50 / 288.35 ±5.39 / 297.76 ms │      230.71 / 236.72 ±4.55 / 242.94 ms │ +1.22x faster │
│ QQuery 5  │      312.22 / 317.79 ±5.42 / 327.43 ms │     275.44 / 303.13 ±14.97 / 316.85 ms │     no change │
│ QQuery 6  │            1.48 / 1.67 ±0.22 / 2.07 ms │            1.35 / 1.52 ±0.23 / 1.98 ms │ +1.10x faster │
│ QQuery 7  │         14.07 / 14.45 ±0.22 / 14.65 ms │         13.82 / 18.52 ±9.25 / 37.02 ms │  1.28x slower │
│ QQuery 8  │     330.39 / 349.31 ±23.50 / 391.52 ms │     330.86 / 343.79 ±15.85 / 370.39 ms │     no change │
│ QQuery 9  │      473.45 / 480.15 ±5.24 / 487.19 ms │      457.77 / 463.97 ±3.89 / 469.13 ms │     no change │
│ QQuery 10 │         64.46 / 64.73 ±0.25 / 65.13 ms │       64.36 / 72.51 ±14.87 / 102.21 ms │  1.12x slower │
│ QQuery 11 │         74.09 / 74.76 ±0.63 / 75.94 ms │         74.86 / 75.34 ±0.52 / 76.27 ms │     no change │
│ QQuery 12 │      259.09 / 265.70 ±5.24 / 274.06 ms │      257.78 / 268.86 ±6.62 / 278.27 ms │     no change │
│ QQuery 13 │     359.24 / 385.80 ±22.36 / 411.35 ms │      361.43 / 370.21 ±9.88 / 388.89 ms │     no change │
│ QQuery 14 │     277.28 / 302.06 ±20.27 / 327.64 ms │     274.89 / 292.51 ±14.10 / 314.83 ms │     no change │
│ QQuery 15 │     281.34 / 299.45 ±16.79 / 323.74 ms │      275.80 / 287.35 ±8.53 / 299.51 ms │     no change │
│ QQuery 16 │      616.82 / 619.59 ±2.74 / 624.21 ms │     623.89 / 665.37 ±45.59 / 727.16 ms │  1.07x slower │
│ QQuery 17 │      622.26 / 627.84 ±4.36 / 635.06 ms │      707.01 / 718.28 ±8.83 / 733.75 ms │  1.14x slower │
│ QQuery 18 │  1198.49 / 1275.53 ±59.86 / 1383.09 ms │  1260.26 / 1346.38 ±79.86 / 1477.63 ms │  1.06x slower │
│ QQuery 19 │         27.42 / 30.23 ±4.66 / 39.50 ms │         27.52 / 29.49 ±2.86 / 35.02 ms │     no change │
│ QQuery 20 │      520.24 / 527.72 ±6.57 / 535.82 ms │      517.92 / 525.90 ±9.42 / 542.62 ms │     no change │
│ QQuery 21 │      509.04 / 514.86 ±4.33 / 522.22 ms │     515.27 / 538.28 ±15.01 / 558.58 ms │     no change │
│ QQuery 22 │     977.47 / 989.48 ±9.46 / 1006.08 ms │    974.27 / 988.73 ±13.79 / 1014.25 ms │     no change │
│ QQuery 23 │  3046.51 / 3107.30 ±58.37 / 3198.26 ms │  3051.93 / 3110.07 ±54.48 / 3192.61 ms │     no change │
│ QQuery 24 │         40.50 / 44.34 ±4.66 / 50.46 ms │         40.84 / 47.04 ±7.28 / 59.41 ms │  1.06x slower │
│ QQuery 25 │      105.13 / 109.01 ±6.75 / 122.47 ms │      104.81 / 107.41 ±3.82 / 114.71 ms │     no change │
│ QQuery 26 │         40.49 / 40.89 ±0.50 / 41.87 ms │         40.92 / 42.40 ±1.79 / 45.70 ms │     no change │
│ QQuery 27 │      515.85 / 521.65 ±7.23 / 535.79 ms │     505.58 / 521.40 ±13.55 / 546.23 ms │     no change │
│ QQuery 28 │ 2856.22 / 3000.51 ±101.59 / 3142.21 ms │  2871.32 / 2901.09 ±30.52 / 2955.55 ms │     no change │
│ QQuery 29 │         39.92 / 43.31 ±5.99 / 55.29 ms │        37.46 / 42.96 ±10.13 / 63.21 ms │     no change │
│ QQuery 30 │     315.97 / 353.04 ±24.99 / 394.38 ms │      307.38 / 311.54 ±3.77 / 317.79 ms │ +1.13x faster │
│ QQuery 31 │     275.09 / 294.32 ±12.80 / 308.63 ms │      271.01 / 285.52 ±9.91 / 299.56 ms │     no change │
│ QQuery 32 │    945.02 / 972.91 ±19.71 / 1005.41 ms │  1085.29 / 1110.61 ±24.74 / 1148.64 ms │  1.14x slower │
│ QQuery 33 │  1425.23 / 1495.24 ±81.43 / 1652.07 ms │ 1433.14 / 1579.71 ±147.72 / 1790.31 ms │  1.06x slower │
│ QQuery 34 │  1430.36 / 1462.99 ±30.89 / 1504.05 ms │ 1472.26 / 1559.99 ±105.44 / 1758.71 ms │  1.07x slower │
│ QQuery 35 │     286.38 / 320.89 ±64.15 / 449.12 ms │     299.79 / 310.99 ±11.57 / 326.69 ms │     no change │
│ QQuery 36 │       68.14 / 78.29 ±13.43 / 103.91 ms │         68.62 / 72.90 ±4.28 / 80.36 ms │ +1.07x faster │
│ QQuery 37 │         34.87 / 35.24 ±0.37 / 35.89 ms │         34.35 / 36.18 ±2.90 / 41.94 ms │     no change │
│ QQuery 38 │         39.11 / 41.87 ±1.73 / 44.27 ms │         39.00 / 42.07 ±2.51 / 45.19 ms │     no change │
│ QQuery 39 │      141.64 / 153.28 ±9.32 / 170.19 ms │      137.40 / 147.95 ±9.16 / 163.84 ms │     no change │
│ QQuery 40 │         13.72 / 14.67 ±1.53 / 17.70 ms │         13.68 / 13.97 ±0.30 / 14.51 ms │     no change │
│ QQuery 41 │         13.30 / 14.47 ±2.12 / 18.71 ms │         13.06 / 14.63 ±2.13 / 18.76 ms │     no change │
│ QQuery 42 │         12.74 / 12.94 ±0.17 / 13.22 ms │         12.67 / 12.86 ±0.16 / 13.14 ms │     no change │
└───────────┴────────────────────────────────────────┴────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 19631.63ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 19896.98ms │
│ Average Time (HEAD)                                 │   456.55ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │   462.72ms │
│ Queries Faster                                      │          7 │
│ Queries Slower                                      │          9 │
│ Queries with No Change                              │         27 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 11.0 GiB
Avg memory 4.7 GiB
CPU user 1005.8s
CPU sys 73.7s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 100.0s
Peak memory 11.2 GiB
Avg memory 4.3 GiB
CPU user 1014.1s
CPU sys 77.1s
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)

Comparing perf/dictionary-work-bounded-by-rows (cd7235f) to 4bf32cb (merge-base) diff

Run configuration
run benchmark clickbench_partitioned
env:
  DATAFUSION_EXECUTION_TARGET_PARTITIONS: "32"
baseline:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
changed:
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"
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_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     1.22 ms │                              1.20 ms │     no change │
│ QQuery 1  │    11.21 ms │                             11.21 ms │     no change │
│ QQuery 2  │    33.69 ms │                             33.91 ms │     no change │
│ QQuery 3  │    28.06 ms │                             27.59 ms │     no change │
│ QQuery 4  │   218.55 ms │                            215.33 ms │     no change │
│ QQuery 5  │  1397.26 ms │                            835.29 ms │ +1.67x faster │
│ QQuery 6  │     1.24 ms │                              1.21 ms │     no change │
│ QQuery 7  │    13.57 ms │                             13.51 ms │     no change │
│ QQuery 8  │   315.62 ms │                            312.60 ms │     no change │
│ QQuery 9  │   395.84 ms │                            390.54 ms │     no change │
│ QQuery 10 │   196.69 ms │                            195.99 ms │     no change │
│ QQuery 11 │   206.70 ms │                            206.16 ms │     no change │
│ QQuery 12 │  1422.01 ms │                            815.67 ms │ +1.74x faster │
│ QQuery 13 │  2034.97 ms │                           1306.69 ms │ +1.56x faster │
│ QQuery 14 │  1395.83 ms │                            852.77 ms │ +1.64x faster │
│ QQuery 15 │   266.73 ms │                            267.63 ms │     no change │
│ QQuery 16 │  2970.21 ms │                           1270.90 ms │ +2.34x faster │
│ QQuery 17 │  2934.88 ms │                           1219.72 ms │ +2.41x faster │
│ QQuery 18 │  5408.21 ms │                           1935.80 ms │ +2.79x faster │
│ QQuery 19 │    25.67 ms │                             25.66 ms │     no change │
│ QQuery 20 │  1027.12 ms │                            984.54 ms │     no change │
│ QQuery 21 │  1363.75 ms │                           1347.18 ms │     no change │
│ QQuery 22 │  3146.60 ms │                           3152.58 ms │     no change │
│ QQuery 23 │  8120.86 ms │                           8364.02 ms │     no change │
│ QQuery 24 │    96.08 ms │                            106.13 ms │  1.10x slower │
│ QQuery 25 │   344.39 ms │                            339.56 ms │     no change │
│ QQuery 26 │   101.07 ms │                             98.06 ms │     no change │
│ QQuery 27 │  1128.15 ms │                           1097.49 ms │     no change │
│ QQuery 28 │  2651.10 ms │                           2498.12 ms │ +1.06x faster │
│ QQuery 29 │    37.43 ms │                             36.78 ms │     no change │
│ QQuery 30 │   518.67 ms │                            524.85 ms │     no change │
│ QQuery 31 │   542.93 ms │                            542.37 ms │     no change │
│ QQuery 32 │   990.34 ms │                            944.13 ms │     no change │
│ QQuery 33 │ 10206.15 ms │                           3600.67 ms │ +2.83x faster │
│ QQuery 34 │  9970.78 ms │                           3619.34 ms │ +2.75x faster │
│ QQuery 35 │   266.32 ms │                            262.69 ms │     no change │
│ QQuery 36 │   222.89 ms │                            156.44 ms │ +1.42x faster │
│ QQuery 37 │    99.84 ms │                             97.62 ms │     no change │
│ QQuery 38 │    84.63 ms │                             81.71 ms │     no change │
│ QQuery 39 │   444.18 ms │                            333.65 ms │ +1.33x faster │
│ QQuery 40 │    16.06 ms │                             16.59 ms │     no change │
│ QQuery 41 │    15.44 ms │                             15.67 ms │     no change │
│ QQuery 42 │    15.68 ms │                             15.65 ms │     no change │
└───────────┴─────────────┴──────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 60688.58ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 38175.23ms │
│ Average Time (HEAD)                                 │  1411.36ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │   887.80ms │
│ Queries Faster                                      │         12 │
│ Queries Slower                                      │          1 │
│ Queries with No Change                              │         30 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and perf_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                      HEAD ┃   perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │               1.22 / 1.84 ±1.10 / 4.03 ms │            1.20 / 1.79 ±1.11 / 4.00 ms │     no change │
│ QQuery 1  │            11.21 / 11.58 ±0.20 / 11.84 ms │         11.21 / 11.47 ±0.15 / 11.67 ms │     no change │
│ QQuery 2  │            33.69 / 34.08 ±0.41 / 34.72 ms │         33.91 / 34.15 ±0.25 / 34.58 ms │     no change │
│ QQuery 3  │            28.06 / 29.17 ±0.94 / 30.68 ms │         27.59 / 28.20 ±0.60 / 29.21 ms │     no change │
│ QQuery 4  │         218.55 / 220.49 ±1.65 / 222.35 ms │      215.33 / 217.54 ±2.22 / 221.45 ms │     no change │
│ QQuery 5  │     1397.26 / 1419.16 ±24.31 / 1463.77 ms │     835.29 / 853.12 ±13.50 / 868.23 ms │ +1.66x faster │
│ QQuery 6  │               1.24 / 1.42 ±0.27 / 1.95 ms │            1.21 / 1.37 ±0.25 / 1.85 ms │     no change │
│ QQuery 7  │            13.57 / 13.75 ±0.10 / 13.84 ms │         13.51 / 13.76 ±0.14 / 13.93 ms │     no change │
│ QQuery 8  │         315.62 / 319.73 ±2.31 / 322.64 ms │      312.60 / 317.14 ±5.42 / 326.76 ms │     no change │
│ QQuery 9  │        395.84 / 414.99 ±15.37 / 434.36 ms │     390.54 / 403.38 ±13.27 / 428.22 ms │     no change │
│ QQuery 10 │         196.69 / 202.75 ±8.19 / 218.96 ms │      195.99 / 197.99 ±2.56 / 203.02 ms │     no change │
│ QQuery 11 │         206.70 / 209.66 ±4.64 / 218.89 ms │      206.16 / 207.41 ±1.21 / 209.48 ms │     no change │
│ QQuery 12 │     1422.01 / 1497.08 ±40.76 / 1535.28 ms │     815.67 / 841.26 ±13.89 / 853.66 ms │ +1.78x faster │
│ QQuery 13 │     2034.97 / 2100.22 ±57.35 / 2176.58 ms │  1306.69 / 1335.37 ±18.58 / 1356.27 ms │ +1.57x faster │
│ QQuery 14 │     1395.83 / 1464.12 ±70.68 / 1567.33 ms │     852.77 / 878.67 ±24.04 / 912.14 ms │ +1.67x faster │
│ QQuery 15 │        266.73 / 286.37 ±27.38 / 340.46 ms │      267.63 / 273.77 ±6.60 / 286.52 ms │     no change │
│ QQuery 16 │    2970.21 / 3230.42 ±404.69 / 4028.42 ms │  1270.90 / 1302.63 ±24.17 / 1332.51 ms │ +2.48x faster │
│ QQuery 17 │    2934.88 / 3325.01 ±336.74 / 3947.87 ms │  1219.72 / 1238.97 ±18.82 / 1271.81 ms │ +2.68x faster │
│ QQuery 18 │    5408.21 / 5820.59 ±323.67 / 6225.61 ms │  1935.80 / 1974.98 ±31.21 / 2012.33 ms │ +2.95x faster │
│ QQuery 19 │            25.67 / 26.20 ±0.52 / 26.85 ms │         25.66 / 26.14 ±0.52 / 26.97 ms │     no change │
│ QQuery 20 │     1027.12 / 1041.36 ±13.48 / 1064.36 ms │   984.54 / 1006.77 ±22.26 / 1045.24 ms │     no change │
│ QQuery 21 │     1363.75 / 1398.14 ±34.09 / 1459.16 ms │  1347.18 / 1367.37 ±15.28 / 1389.79 ms │     no change │
│ QQuery 22 │     3146.60 / 3215.30 ±57.82 / 3317.98 ms │  3152.58 / 3178.14 ±33.21 / 3243.31 ms │     no change │
│ QQuery 23 │    8120.86 / 8546.61 ±230.84 / 8815.21 ms │ 8364.02 / 8461.77 ±108.13 / 8616.74 ms │     no change │
│ QQuery 24 │         96.08 / 107.46 ±11.40 / 127.75 ms │     106.13 / 123.83 ±23.92 / 170.51 ms │  1.15x slower │
│ QQuery 25 │         344.39 / 348.53 ±3.14 / 353.80 ms │      339.56 / 350.66 ±5.78 / 355.73 ms │     no change │
│ QQuery 26 │         101.07 / 108.89 ±7.65 / 122.67 ms │        98.06 / 99.92 ±0.97 / 100.85 ms │ +1.09x faster │
│ QQuery 27 │      1128.15 / 1137.03 ±5.21 / 1142.40 ms │  1097.49 / 1116.63 ±16.73 / 1144.68 ms │     no change │
│ QQuery 28 │     2651.10 / 2674.28 ±13.47 / 2686.61 ms │  2498.12 / 2516.08 ±17.78 / 2548.42 ms │ +1.06x faster │
│ QQuery 29 │           37.43 / 52.57 ±18.27 / 85.55 ms │         36.78 / 37.29 ±0.51 / 38.18 ms │ +1.41x faster │
│ QQuery 30 │         518.67 / 522.83 ±4.93 / 531.55 ms │     524.85 / 561.95 ±23.10 / 592.04 ms │  1.07x slower │
│ QQuery 31 │        542.93 / 565.68 ±18.43 / 595.62 ms │     542.37 / 569.59 ±29.65 / 623.62 ms │     no change │
│ QQuery 32 │      990.34 / 1031.83 ±47.96 / 1107.60 ms │   944.13 / 1004.98 ±54.74 / 1107.59 ms │     no change │
│ QQuery 33 │ 10206.15 / 10815.42 ±520.80 / 11580.40 ms │  3600.67 / 3741.22 ±96.66 / 3867.77 ms │ +2.89x faster │
│ QQuery 34 │  9970.78 / 10950.65 ±531.49 / 11479.40 ms │  3619.34 / 3726.70 ±74.62 / 3832.22 ms │ +2.94x faster │
│ QQuery 35 │        266.32 / 308.54 ±46.81 / 394.56 ms │     262.69 / 280.32 ±16.01 / 306.41 ms │ +1.10x faster │
│ QQuery 36 │         222.89 / 230.75 ±6.09 / 241.56 ms │     156.44 / 175.82 ±22.03 / 218.26 ms │ +1.31x faster │
│ QQuery 37 │          99.84 / 102.98 ±2.04 / 105.74 ms │       97.62 / 101.22 ±2.22 / 104.25 ms │     no change │
│ QQuery 38 │            84.63 / 87.72 ±2.11 / 90.72 ms │         81.71 / 89.31 ±6.80 / 99.18 ms │     no change │
│ QQuery 39 │        444.18 / 463.45 ±16.19 / 487.12 ms │     333.65 / 357.31 ±15.88 / 378.85 ms │ +1.30x faster │
│ QQuery 40 │            16.06 / 20.83 ±7.92 / 36.63 ms │         16.59 / 16.89 ±0.20 / 17.18 ms │ +1.23x faster │
│ QQuery 41 │            15.44 / 19.43 ±7.57 / 34.56 ms │         15.67 / 20.02 ±7.91 / 35.82 ms │     no change │
│ QQuery 42 │            15.68 / 18.59 ±4.38 / 27.24 ms │         15.65 / 15.91 ±0.23 / 16.19 ms │ +1.17x faster │
└───────────┴───────────────────────────────────────────┴────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 64397.48ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 39078.79ms │
│ Average Time (HEAD)                                 │  1497.62ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │   908.81ms │
│ Queries Faster                                      │         17 │
│ Queries Slower                                      │          2 │
│ Queries with No Change                              │         24 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 325.1s
Peak memory 13.3 GiB
Avg memory 6.3 GiB
CPU user 2592.1s
CPU sys 187.9s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 200.0s
Peak memory 12.9 GiB
Avg memory 5.7 GiB
CPU user 1895.4s
CPU sys 127.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)

Comparing perf/dictionary-work-bounded-by-rows (cd7235f) to 4bf32cb (merge-base) diff

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

group                                         HEAD                                   perf_dictionary-work-bounded-by-rows
-----                                         ----                                   ------------------------------------
dense_union: multiple, no nulls               1.00     41.7±0.05µs        ? ?/sec    1.00     41.7±0.08µs        ? ?/sec
dense_union: single, no nulls                 1.00     14.2±0.03µs        ? ?/sec    1.00     14.2±0.02µs        ? ?/sec
dense_union_sliced: 1/10 of 81920 rows        1.00     21.7±0.02µs        ? ?/sec    1.00     21.7±0.02µs        ? ?/sec
dense_union_sliced: 1/2 of 16384 rows         1.00     21.6±0.02µs        ? ?/sec    1.00     21.6±0.02µs        ? ?/sec
dense_union_sliced: 1/5 of 40960 rows         1.00     21.7±0.02µs        ? ?/sec    1.00     21.8±0.02µs        ? ?/sec
dictionary_sliced: 1/128 of 1048576 values                                           1.00    117.7±2.10µs        ? ?/sec
dictionary_sliced: 1/8 of 65536 values                                               1.00    122.2±0.08µs        ? ?/sec
dictionary_utf8_int32: multiple, no nulls     1.00     10.8±0.01µs        ? ?/sec    1.01     10.9±0.01µs        ? ?/sec
dictionary_utf8_int32: multiple, nulls        1.01     26.0±0.01µs        ? ?/sec    1.00     25.7±0.02µs        ? ?/sec
dictionary_utf8_int32: single, no nulls       1.00      3.3±0.00µs        ? ?/sec    1.00      3.3±0.00µs        ? ?/sec
dictionary_utf8_int32: single, nulls          1.00      8.2±0.01µs        ? ?/sec    1.00      8.2±0.00µs        ? ?/sec
fixed_size_list_array: multiple, no nulls     1.01    100.2±0.23µs        ? ?/sec    1.00     99.6±0.16µs        ? ?/sec
fixed_size_list_array: multiple, nulls        1.00    109.2±0.07µs        ? ?/sec    1.01    110.2±0.10µs        ? ?/sec
fixed_size_list_array: single, no nulls       1.00     33.8±0.05µs        ? ?/sec    1.04     35.0±0.72µs        ? ?/sec
fixed_size_list_array: single, nulls          1.00     36.9±0.23µs        ? ?/sec    1.00     36.9±0.08µs        ? ?/sec
int64: multiple, no nulls                     1.00     11.7±0.01µs        ? ?/sec    1.00     11.7±0.02µs        ? ?/sec
int64: multiple, nulls                        1.00     26.8±0.01µs        ? ?/sec    1.00     26.8±0.06µs        ? ?/sec
int64: single, no nulls                       1.00      3.8±0.01µs        ? ?/sec    1.01      3.8±0.01µs        ? ?/sec
int64: single, nulls                          1.00      8.8±0.01µs        ? ?/sec    1.01      8.9±0.01µs        ? ?/sec
large_utf8: multiple, no nulls                1.03    122.6±0.65µs        ? ?/sec    1.00    118.8±1.58µs        ? ?/sec
large_utf8: multiple, nulls                   1.01    135.8±1.55µs        ? ?/sec    1.00    134.1±0.64µs        ? ?/sec
large_utf8: single, no nulls                  1.01     39.7±0.13µs        ? ?/sec    1.00     39.1±0.23µs        ? ?/sec
large_utf8: single, nulls                     1.03     44.6±1.35µs        ? ?/sec    1.00     43.3±0.30µs        ? ?/sec
list_array: multiple, no nulls                1.00    129.4±0.16µs        ? ?/sec    1.00    129.5±0.19µs        ? ?/sec
list_array: multiple, nulls                   1.00    158.3±0.20µs        ? ?/sec    1.00    157.6±0.17µs        ? ?/sec
list_array: single, no nulls                  1.04     45.9±0.18µs        ? ?/sec    1.00     44.1±1.09µs        ? ?/sec
list_array: single, nulls                     1.00     53.1±0.13µs        ? ?/sec    1.00     52.9±0.12µs        ? ?/sec
list_array_sliced: 1/10 of 81920 rows         1.00     43.4±0.05µs        ? ?/sec    1.00     43.4±1.05µs        ? ?/sec
list_array_sliced: 1/2 of 16384 rows          1.00     44.6±1.15µs        ? ?/sec    1.02     45.7±0.08µs        ? ?/sec
list_array_sliced: 1/5 of 40960 rows          1.00     43.4±0.04µs        ? ?/sec    1.06     45.8±0.36µs        ? ?/sec
list_view_array: multiple, no nulls           1.01    124.6±0.17µs        ? ?/sec    1.00    123.7±0.18µs        ? ?/sec
list_view_array: multiple, nulls              1.00    132.8±0.06µs        ? ?/sec    1.00    132.4±0.07µs        ? ?/sec
list_view_array: single, no nulls             1.02     42.3±0.11µs        ? ?/sec    1.00     41.6±0.16µs        ? ?/sec
list_view_array: single, nulls                1.00     44.5±0.08µs        ? ?/sec    1.00     44.5±0.07µs        ? ?/sec
map_array: multiple, no nulls                 1.00    194.9±0.18µs        ? ?/sec    1.00    194.1±0.20µs        ? ?/sec
map_array: multiple, nulls                    1.00    204.0±0.40µs        ? ?/sec    1.00    203.5±0.23µs        ? ?/sec
map_array: single, no nulls                   1.01     65.4±0.06µs        ? ?/sec    1.00     65.0±0.06µs        ? ?/sec
map_array: single, nulls                      1.00     68.2±0.04µs        ? ?/sec    1.00     68.1±0.07µs        ? ?/sec
map_array_sliced: 1/10 of 81920 rows          1.00     65.3±0.14µs        ? ?/sec    1.01     65.7±0.05µs        ? ?/sec
map_array_sliced: 1/2 of 16384 rows           1.00     65.5±0.03µs        ? ?/sec    1.00     65.6±0.11µs        ? ?/sec
map_array_sliced: 1/5 of 40960 rows           1.00     65.4±0.15µs        ? ?/sec    1.00     65.3±0.08µs        ? ?/sec
mixed: 3 columns (int64, utf8, utf8_view)     1.04     83.4±0.20µs        ? ?/sec    1.00     80.3±1.23µs        ? ?/sec
null: multiple, no nulls                      1.00      2.5±0.01µs        ? ?/sec    1.00      2.5±0.00µs        ? ?/sec
null: single, no nulls                        1.00   1111.9±3.82ns        ? ?/sec    1.00   1107.5±2.52ns        ? ?/sec
run_array_int32: multiple, no nulls           1.00      4.9±0.01µs        ? ?/sec    1.00      4.9±0.01µs        ? ?/sec
run_array_int32: multiple, nulls              1.02      6.9±0.01µs        ? ?/sec    1.00      6.8±0.01µs        ? ?/sec
run_array_int32: single, no nulls             1.01   1829.3±4.16ns        ? ?/sec    1.00   1809.0±5.13ns        ? ?/sec
run_array_int32: single, nulls                1.06      2.5±0.00µs        ? ?/sec    1.00      2.4±0.00µs        ? ?/sec
sparse_union (2 types): multiple, no nulls    1.02     98.9±0.43µs        ? ?/sec    1.00     97.3±0.60µs        ? ?/sec
sparse_union (2 types): single, no nulls      1.07     34.9±2.06µs        ? ?/sec    1.00     32.8±0.18µs        ? ?/sec
sparse_union (utf8): multiple, no nulls       1.01    212.8±1.11µs        ? ?/sec    1.00    209.9±1.03µs        ? ?/sec
sparse_union (utf8): single, no nulls         1.00     71.0±0.38µs        ? ?/sec    1.00     70.7±0.48µs        ? ?/sec
sparse_union: multiple, no nulls              1.00     94.3±0.82µs        ? ?/sec    1.01     94.9±0.67µs        ? ?/sec
sparse_union: single, no nulls                1.00     31.7±0.20µs        ? ?/sec    1.00     31.9±0.18µs        ? ?/sec
sparse_union_sliced: 1/10 of 81920 rows       1.00     31.5±0.19µs        ? ?/sec    1.03     32.4±0.19µs        ? ?/sec
sparse_union_sliced: 1/2 of 16384 rows        1.01     32.1±0.42µs        ? ?/sec    1.00     31.9±0.21µs        ? ?/sec
sparse_union_sliced: 1/5 of 40960 rows        1.00     31.8±0.23µs        ? ?/sec    1.00     31.9±0.30µs        ? ?/sec
struct_array: multiple, no nulls              1.01    152.3±0.33µs        ? ?/sec    1.00    151.0±0.71µs        ? ?/sec
struct_array: multiple, nulls                 1.00    166.8±0.23µs        ? ?/sec    1.01    167.9±0.35µs        ? ?/sec
struct_array: single, no nulls                1.00     50.9±0.13µs        ? ?/sec    1.00     50.8±0.42µs        ? ?/sec
struct_array: single, nulls                   1.00     56.3±0.14µs        ? ?/sec    1.00     56.3±0.21µs        ? ?/sec
utf8: multiple, no nulls                      1.01    116.0±0.65µs        ? ?/sec    1.00    114.7±0.47µs        ? ?/sec
utf8: multiple, nulls                         1.00    133.7±0.84µs        ? ?/sec    1.00    134.0±0.66µs        ? ?/sec
utf8: single, no nulls                        1.03     30.5±0.73µs        ? ?/sec    1.00     29.6±0.32µs        ? ?/sec
utf8: single, nulls                           1.00     35.4±0.46µs        ? ?/sec    1.00     35.5±0.18µs        ? ?/sec
utf8_view (small): multiple, no nulls         1.00     19.0±0.04µs        ? ?/sec    1.00     19.0±0.01µs        ? ?/sec
utf8_view (small): multiple, nulls            1.00     29.2±0.02µs        ? ?/sec    1.01     29.4±0.02µs        ? ?/sec
utf8_view (small): single, no nulls           1.00      5.0±0.00µs        ? ?/sec    1.01      5.1±0.00µs        ? ?/sec
utf8_view (small): single, nulls              1.00      9.7±0.01µs        ? ?/sec    1.01      9.8±0.01µs        ? ?/sec
utf8_view: multiple, no nulls                 1.05    103.2±0.30µs        ? ?/sec    1.00     98.2±0.27µs        ? ?/sec
utf8_view: multiple, nulls                    1.00    107.6±0.16µs        ? ?/sec    1.06    113.7±0.42µs        ? ?/sec
utf8_view: single, no nulls                   1.12     35.3±0.08µs        ? ?/sec    1.00     31.4±0.12µs        ? ?/sec
utf8_view: single, nulls                      1.00     32.7±0.04µs        ? ?/sec    1.00     32.8±0.10µs        ? ?/sec

Resource Usage

with_hashes — base (merge-base)

Metric Value
Wall time 755.2s
Peak memory 41.3 MiB
Avg memory 34.6 MiB
CPU user 875.6s
CPU sys 0.8s
Peak spill 0 B

with_hashes — branch

Metric Value
Wall time 775.2s
Peak memory 60.0 MiB
Avg memory 35.4 MiB
CPU user 902.9s
CPU sys 0.8s
Peak spill 0 B

File an issue against this benchmark runner

@jayzhan211

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-c6703932330-4589-nkhmd 6.12.105+ #1 SMP Sat Sep 19 07:55:25 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/dictionary-work-bounded-by-rows (cd7235f) to 4bf32cb (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/dictionary-work-bounded-by-rows (cd7235f) to 4bf32cb (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_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │    1.21 ms │                              1.19 ms │     no change │
│ QQuery 1  │   11.36 ms │                             11.47 ms │     no change │
│ QQuery 2  │   34.78 ms │                             34.60 ms │     no change │
│ QQuery 3  │   30.74 ms │                             30.64 ms │     no change │
│ QQuery 4  │  238.29 ms │                            235.45 ms │     no change │
│ QQuery 5  │  274.50 ms │                            271.14 ms │     no change │
│ QQuery 6  │    1.19 ms │                              1.21 ms │     no change │
│ QQuery 7  │   12.63 ms │                             12.54 ms │     no change │
│ QQuery 8  │  324.86 ms │                            322.66 ms │     no change │
│ QQuery 9  │  456.65 ms │                            463.13 ms │     no change │
│ QQuery 10 │   63.88 ms │                             63.44 ms │     no change │
│ QQuery 11 │   75.52 ms │                             75.27 ms │     no change │
│ QQuery 12 │  259.24 ms │                            264.07 ms │     no change │
│ QQuery 13 │  356.12 ms │                            365.16 ms │     no change │
│ QQuery 14 │  277.01 ms │                            277.44 ms │     no change │
│ QQuery 15 │  281.84 ms │                            283.37 ms │     no change │
│ QQuery 16 │  614.14 ms │                            614.44 ms │     no change │
│ QQuery 17 │  621.03 ms │                            616.89 ms │     no change │
│ QQuery 18 │ 1207.51 ms │                           1203.24 ms │     no change │
│ QQuery 19 │   27.95 ms │                             27.81 ms │     no change │
│ QQuery 20 │  521.98 ms │                            516.27 ms │     no change │
│ QQuery 21 │  512.91 ms │                            511.93 ms │     no change │
│ QQuery 22 │  982.66 ms │                            982.35 ms │     no change │
│ QQuery 23 │ 3057.07 ms │                           3083.44 ms │     no change │
│ QQuery 24 │   40.70 ms │                             41.99 ms │     no change │
│ QQuery 25 │  104.81 ms │                            105.52 ms │     no change │
│ QQuery 26 │   40.75 ms │                             41.12 ms │     no change │
│ QQuery 27 │  509.88 ms │                            510.50 ms │     no change │
│ QQuery 28 │ 2879.94 ms │                           2859.02 ms │     no change │
│ QQuery 29 │   37.86 ms │                             38.17 ms │     no change │
│ QQuery 30 │  304.46 ms │                            302.49 ms │     no change │
│ QQuery 31 │  284.25 ms │                            287.86 ms │     no change │
│ QQuery 32 │  928.64 ms │                            959.72 ms │     no change │
│ QQuery 33 │ 1427.32 ms │                           1430.66 ms │     no change │
│ QQuery 34 │ 1459.37 ms │                           1460.97 ms │     no change │
│ QQuery 35 │  291.81 ms │                            293.81 ms │     no change │
│ QQuery 36 │   68.64 ms │                             65.13 ms │ +1.05x faster │
│ QQuery 37 │   34.60 ms │                             34.55 ms │     no change │
│ QQuery 38 │   40.04 ms │                             39.79 ms │     no change │
│ QQuery 39 │  131.87 ms │                            145.78 ms │  1.11x slower │
│ QQuery 40 │   13.89 ms │                             13.97 ms │     no change │
│ QQuery 41 │   13.28 ms │                             13.13 ms │     no change │
│ QQuery 42 │   12.74 ms │                             12.97 ms │     no change │
└───────────┴────────────┴──────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 18869.93ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 18926.29ms │
│ Average Time (HEAD)                                 │   438.84ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │   440.15ms │
│ Queries Faster                                      │          1 │
│ Queries Slower                                      │          1 │
│ Queries with No Change                              │         41 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and perf_dictionary-work-bounded-by-rows
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃  perf_dictionary-work-bounded-by-rows ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │           1.21 / 1.80 ±1.09 / 3.98 ms │           1.19 / 1.81 ±1.11 / 4.02 ms │     no change │
│ QQuery 1  │        11.36 / 11.59 ±0.15 / 11.80 ms │        11.47 / 11.61 ±0.10 / 11.71 ms │     no change │
│ QQuery 2  │        34.78 / 35.08 ±0.27 / 35.59 ms │        34.60 / 35.02 ±0.51 / 36.02 ms │     no change │
│ QQuery 3  │        30.74 / 32.08 ±1.20 / 34.32 ms │        30.64 / 31.48 ±0.82 / 32.90 ms │     no change │
│ QQuery 4  │     238.29 / 240.82 ±1.94 / 244.22 ms │     235.45 / 238.65 ±2.65 / 243.46 ms │     no change │
│ QQuery 5  │     274.50 / 278.44 ±5.84 / 289.97 ms │     271.14 / 275.52 ±7.74 / 290.98 ms │     no change │
│ QQuery 6  │           1.19 / 1.35 ±0.25 / 1.83 ms │           1.21 / 1.35 ±0.24 / 1.83 ms │     no change │
│ QQuery 7  │        12.63 / 12.78 ±0.12 / 12.93 ms │        12.54 / 12.64 ±0.13 / 12.88 ms │     no change │
│ QQuery 8  │     324.86 / 329.86 ±3.21 / 334.31 ms │     322.66 / 329.91 ±4.83 / 336.46 ms │     no change │
│ QQuery 9  │     456.65 / 463.96 ±6.08 / 473.38 ms │     463.13 / 468.18 ±2.88 / 471.09 ms │     no change │
│ QQuery 10 │        63.88 / 64.77 ±0.65 / 65.83 ms │        63.44 / 66.57 ±3.17 / 72.60 ms │     no change │
│ QQuery 11 │        75.52 / 76.16 ±0.58 / 77.05 ms │        75.27 / 77.74 ±3.03 / 83.67 ms │     no change │
│ QQuery 12 │     259.24 / 263.64 ±3.84 / 270.44 ms │     264.07 / 266.11 ±1.86 / 268.38 ms │     no change │
│ QQuery 13 │     356.12 / 371.46 ±9.70 / 384.00 ms │     365.16 / 370.13 ±4.45 / 375.64 ms │     no change │
│ QQuery 14 │     277.01 / 281.33 ±7.05 / 295.35 ms │     277.44 / 280.95 ±3.09 / 286.43 ms │     no change │
│ QQuery 15 │     281.84 / 291.09 ±8.67 / 306.66 ms │    283.37 / 298.24 ±11.76 / 319.31 ms │     no change │
│ QQuery 16 │    614.14 / 628.91 ±13.17 / 653.44 ms │     614.44 / 625.42 ±9.94 / 637.84 ms │     no change │
│ QQuery 17 │     621.03 / 626.45 ±4.07 / 630.37 ms │     616.89 / 631.14 ±8.90 / 643.32 ms │     no change │
│ QQuery 18 │ 1207.51 / 1232.01 ±20.29 / 1261.99 ms │ 1203.24 / 1234.23 ±17.06 / 1255.46 ms │     no change │
│ QQuery 19 │        27.95 / 34.71 ±8.36 / 48.15 ms │        27.81 / 28.28 ±0.64 / 29.50 ms │ +1.23x faster │
│ QQuery 20 │     521.98 / 530.65 ±9.54 / 548.91 ms │     516.27 / 520.76 ±3.38 / 525.58 ms │     no change │
│ QQuery 21 │     512.91 / 521.57 ±6.52 / 532.04 ms │     511.93 / 515.90 ±2.26 / 518.73 ms │     no change │
│ QQuery 22 │    982.66 / 995.78 ±8.95 / 1010.07 ms │   982.35 / 996.81 ±12.98 / 1012.54 ms │     no change │
│ QQuery 23 │ 3057.07 / 3088.17 ±18.69 / 3107.93 ms │ 3083.44 / 3121.58 ±31.75 / 3160.30 ms │     no change │
│ QQuery 24 │        40.70 / 43.29 ±3.18 / 49.25 ms │        41.99 / 48.11 ±6.62 / 60.15 ms │  1.11x slower │
│ QQuery 25 │     104.81 / 106.90 ±1.86 / 110.04 ms │     105.52 / 106.74 ±1.33 / 108.88 ms │     no change │
│ QQuery 26 │        40.75 / 41.20 ±0.26 / 41.51 ms │        41.12 / 42.64 ±2.40 / 47.42 ms │     no change │
│ QQuery 27 │     509.88 / 516.15 ±5.35 / 524.06 ms │     510.50 / 518.88 ±7.87 / 532.84 ms │     no change │
│ QQuery 28 │ 2879.94 / 2891.89 ±12.54 / 2909.94 ms │ 2859.02 / 2881.39 ±14.01 / 2900.82 ms │     no change │
│ QQuery 29 │        37.86 / 46.41 ±6.97 / 53.87 ms │       38.17 / 59.23 ±22.70 / 96.08 ms │  1.28x slower │
│ QQuery 30 │     304.46 / 310.71 ±6.34 / 321.58 ms │     302.49 / 310.18 ±6.00 / 318.03 ms │     no change │
│ QQuery 31 │     284.25 / 286.28 ±1.46 / 288.03 ms │     287.86 / 291.31 ±2.51 / 294.10 ms │     no change │
│ QQuery 32 │    928.64 / 955.32 ±15.64 / 974.67 ms │   959.72 / 998.00 ±25.05 / 1037.95 ms │     no change │
│ QQuery 33 │ 1427.32 / 1470.20 ±28.65 / 1514.53 ms │ 1430.66 / 1470.89 ±31.55 / 1517.81 ms │     no change │
│ QQuery 34 │ 1459.37 / 1497.89 ±25.93 / 1529.62 ms │ 1460.97 / 1484.51 ±18.68 / 1509.87 ms │     no change │
│ QQuery 35 │    291.81 / 323.75 ±21.69 / 347.83 ms │    293.81 / 304.06 ±10.61 / 324.26 ms │ +1.06x faster │
│ QQuery 36 │        68.64 / 72.41 ±2.44 / 75.25 ms │        65.13 / 71.96 ±6.56 / 79.99 ms │     no change │
│ QQuery 37 │        34.60 / 34.92 ±0.32 / 35.52 ms │        34.55 / 35.73 ±1.25 / 37.92 ms │     no change │
│ QQuery 38 │        40.04 / 44.52 ±5.90 / 56.11 ms │        39.79 / 41.20 ±1.19 / 42.72 ms │ +1.08x faster │
│ QQuery 39 │     131.87 / 145.75 ±8.18 / 155.92 ms │     145.78 / 156.68 ±8.47 / 169.56 ms │  1.07x slower │
│ QQuery 40 │        13.89 / 14.16 ±0.18 / 14.41 ms │        13.97 / 15.29 ±0.97 / 16.77 ms │  1.08x slower │
│ QQuery 41 │        13.28 / 13.45 ±0.10 / 13.60 ms │        13.13 / 13.37 ±0.22 / 13.65 ms │     no change │
│ QQuery 42 │        12.74 / 14.09 ±2.12 / 18.30 ms │        12.97 / 14.05 ±1.26 / 16.06 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                   ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                   │ 19243.72ms │
│ Total Time (perf_dictionary-work-bounded-by-rows)   │ 19304.27ms │
│ Average Time (HEAD)                                 │   447.53ms │
│ Average Time (perf_dictionary-work-bounded-by-rows) │   448.94ms │
│ Queries Faster                                      │          3 │
│ Queries Slower                                      │          4 │
│ Queries with No Change                              │         36 │
│ Queries with Failure                                │          0 │
└─────────────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 11.8 GiB
Avg memory 4.5 GiB
CPU user 985.6s
CPU sys 71.1s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 100.0s
Peak memory 11.2 GiB
Avg memory 4.6 GiB
CPU user 984.1s
CPU sys 72.2s
Peak spill 0 B

File an issue against this benchmark runner

@jayzhan211
jayzhan211 added this pull request to the merge queue Nov 7, 2026
Merged via the queue into apache:main with commit bc1be2c Nov 7, 2026
46 checks passed
@jayzhan211
jayzhan211 deleted the perf/dictionary-work-bounded-by-rows branch November 7, 2026 07:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

common Related to common crate functions Changes to functions implementation physical-plan Changes to the physical-plan crate spark Changes to datafusion-spark crate sqllogictest SQL Logic Tests (.slt) v57.0.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Hash aggregate output slices keep the whole dictionary, so downstream work grows with the group count

3 participants