Skip to content

introduce optional rle reads from parquet - #24227

Open
Rich-T-kid wants to merge 9 commits into
apache:mainfrom
Rich-T-kid:rich-T-kid/introduce-rle-parquet-flag
Open

Rich-T-kid wants to merge 9 commits into
apache:mainfrom
Rich-T-kid:rich-T-kid/introduce-rle-parquet-flag

Conversation

@Rich-T-kid

@Rich-T-kid Rich-T-kid commented Aug 10, 2026 •

Copy link
Copy Markdown
Contributor

a large portion of this PR is test!

Which issue does this PR close?

Rationale for this change

When DataFusion reads a parquet file with dictionary-encoded string or binary columns, it currently decodes the dictionary and returns plain Utf8/Binary arrays, discarding the encoding. For low-cardinality columns (status, country, category, etc.) this doesn't take full advantage of the compacted format parquet gives the engine Preserving the dictionary encoding reduces memory usage and can improve aggregation performance on these columns.

What changes are included in this PR?

Adds datafusion.execution.parquet.enable_rle_to_dictionary with a default of false.

When enabled for inferred-schema Parquet tables, DataFusion inspects Parquet footer metadata and promotes top-level string/binary columns with dictionary pages to Arrow dictionary types. Mixed dictionary/plain files are normalized before schema merge when the value types are compatible. At scan time, the parquet opener passes the promoted schema to arrow-rs so those columns can be read as dictionary arrays directly.

Tables with a user-supplied schema are not promoted because DataFusion does not use footer metadata to infer their schema.

Are these changes tested?

yes.

  • datafusion/sqllogictest/test_files/parquet_rle_to_dictionary.slt

  • datafusion/datasource-parquet/src/schema_coercion.rs

    • uniform_dict_schemas_respects_value_type_families checks that mixed file schemas are normalized only across compatible string/binary families.
    • rle_schema_coercion_respects_dictionary_value_type checks scan-time coercion into dictionary types, including incompatible cases and the flag-off path.
  • datafusion/datasource-parquet/src/opener/mod.rs

    • test_rle_binary_column_promotion verifies the opener passes a promoted Dictionary(Int32, Binary) schema to arrow-rs so binary columns can be read as dictionary arrays directly.

Are there any user-facing changes?

New session config option: SET datafusion.execution.parquet.enable_rle_to_dictionary = true. Default is false so existing behavior is unchanged.

@github-actions github-actions Bot added sqllogictest SQL Logic Tests (.slt) common Related to common crate datasource Changes to the datasource crate labels Aug 10, 2026
Comment thread datafusion/datasource-parquet/src/opener/mod.rs Outdated
Comment thread datafusion/common/src/config.rs Outdated
@github-actions github-actions Bot added the auto detected api change Auto detected API change label Aug 10, 2026
@Rich-T-kid
Rich-T-kid marked this pull request as ready for review August 10, 2026 15:45
@github-actions github-actions Bot added proto Related to proto crate documentation Improvements or additions to documentation labels Aug 10, 2026
@codecov-commenter

codecov-commenter commented Aug 10, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 95.33011% with 29 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.94%. Comparing base (cee7bae) to head (cb3a578).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
datafusion/proto-common/src/generated/pbjson.rs 0.00% 14 Missing ⚠️
...tafusion/datasource-parquet/src/schema_coercion.rs 97.19% 6 Missing and 7 partials ⚠️
datafusion/datasource-parquet/src/metadata.rs 96.29% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #24227      +/-   ##
==========================================
+ Coverage   81.92%   81.94%   +0.01%     
==========================================
  Files        1134     1134              
  Lines      425990   426599     +609     
  Branches   425990   426599     +609     
==========================================
+ Hits       348987   349558     +571     
- Misses      56304    56332      +28     
- Partials    20699    20709      +10     

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

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

@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

@adriangb pinging you since you seem interested in parquet related speed ups 👍

@adriangb

Copy link
Copy Markdown
Contributor

If I understand correctly the goal is to evaluate filters during filter pushdown against dictionary / RLE encoded columns? We can't propagate these dynamic type changes to the rest of the query plan / scan. Is that right?

@Rich-T-kid

Rich-T-kid commented Aug 13, 2026 •

Copy link
Copy Markdown
Contributor Author

@adriangb

If I understand correctly the goal is to evaluate filters during filter pushdown against dictionary / RLE encoded columns?

no not exactly. The goal of this PR is to keep RLE parquet columns in their compacted form by materializing them as dictionary arrays instead of regular strings.

We can't propagate these dynamic type changes to the rest of the query plan / scan. Is that right?

exactly! This is why it needs to be done as early in the plan as possible. we inspect DFParquetMetadata::fetch_schema to see if any RLE columns exist, if so change the plan type from utf8/binary to dict<_,utf8/binary>. Thanks to some plumbing in arrow-rs it will handle the conversions correctly returning a dictionary array, this can cause a 60x perf boost

@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/introduce-rle-parquet-flag branch from 0479f9c to 6e1cbc1 Compare August 13, 2026 15:10
@adriangb

Copy link
Copy Markdown
Contributor

no not exactly. The goal of this PR is to keep RLE parquet columns in their compacted form by materializing them as dictionary arrays instead of regular strings.

Why only RLE and not dictionaries as well? How does this compare to / relate to the schema_force_view_types option?

It also looks like this goes through infer_schema right? A lot of code paths never touch that (CREATE EXTERNAL TABLE (a VARCHAR), any custom table providers, etc.).

I'd be more interested in seeing something at the parquet scan level that was able to e.g. optimize how row filters are applied by applying them to the dictionary instead of expanding into Utf8View. That would be applicable to all DataFusion users.

@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/introduce-rle-parquet-flag branch from 6a4e89d to d1273bf Compare August 13, 2026 15:48
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

Why only RLE and not dictionaries as well? How does this compare to / relate to the schema_force_view_types option?

my bad when I say RLE i'm referring to RLE_DICTIONARY

It also looks like this goes through infer_schema right? A lot of code paths never touch that (CREATE EXTERNAL TABLE (a VARCHAR), any custom table providers, etc.).

I'd be more interested in seeing something at the parquet scan level that was able to e.g. optimize how row filters are applied by applying them to the dictionary instead of expanding into Utf8View. That would be applicable to all DataFusion users.

I agree, ill update the PR to target all parquet scans.

@github-actions github-actions Bot added the core Core DataFusion crate label Aug 13, 2026
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

ideally we surface columns that are physically RLE_DICTIONARY-encoded in the parquet file as Arrow Dictionary(Int32, Utf8) arrays rather than decoding them back to plain Utf8.

To know whether a specific column is RLE_DICTIONARY-encoded you need to read the parquet file footer. For the infer_schema path this happens at table registration, but for explicit schemas (CREATE EXTERNAL TABLE (col VARCHAR)) and direct ParquetSource construction no footer is ever read during planning, so per-column encoding information isn't available for all paths.

Downstream physical operators (FilterExec, AggregateExec) are compiled against the scan's declared output schema during physical planning, before any files are opened. If the scan declares Utf8 but produces Dictionary(Int32, Utf8) at execution time that's a type mismatch.

So when the flag is enabled we promote all string/binary columns to dict at planning time, not just the ones that are actually RLE-encoded, because that's the only way to guarantee schema consistency across all parquet scan paths without introducing file I/O into the planning stage.

I feel like i'm missing something here. if we could take a peak at the parquets metadata before physical planning and change the schema for all operators from the point forward that would be perfect. Im not sure this is currently possible

@Rich-T-kid
Rich-T-kid marked this pull request as draft August 13, 2026 19:53
@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/introduce-rle-parquet-flag branch from 717d31a to fc360e8 Compare August 14, 2026 17:27
@Rich-T-kid

Rich-T-kid commented Aug 14, 2026 •

Copy link
Copy Markdown
Contributor Author

@adriangb When the flag is on, DataFusion promotes string and binary columns that are physically RLE_DICTIONARY encoded in the parquet file to Dictionary(Int32, Utf8) or Dictionary(Int32, Binary) at schema inference time. This applies to all parquet scans regardless of how the table was registered.

the PR is ready for review

@Rich-T-kid
Rich-T-kid marked this pull request as ready for review August 14, 2026 17:36
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

How does this compare to / relate to the schema_force_view_types option?

utf8 columns become dict<_,utf8 so the default string type for parquet columns utf8View is replaced.

@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/introduce-rle-parquet-flag branch 6 times, most recently from bc5011f to 6899579 Compare August 15, 2026 18:45
…w in SLT

- common_dictionary_key_type: add Int64 arm before catch-all so UInt64+Int64
  selects UInt64 (wider) rather than silently narrowing to Int64
- update test expectation from Int64 to UInt64 for that case
- SLT high-cardinality test: write rle.parquet via arrow_cast to
  Dictionary(Int8, Utf8) so the file embeds an Int8-keyed Arrow schema;
  add a standalone check confirming the round-trip; this exercises the
  actual Dict(Int8)+plain-130-values overflow path that the previous
  plain-Utf8 write never triggered
@Rich-T-kid
Rich-T-kid force-pushed the rich-T-kid/introduce-rle-parquet-flag branch from 7c9114c to cb3a578 Compare September 15, 2026 05:12
@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

Hi @Rich-T-kid This looks good to me at the moment. Let's resolve the conflicts and re-run the benchmarks.

@kumarUjjawal just fixed the merge conflicts. Im not sure which benchmark exactly to run 🤔

@kumarUjjawal

Copy link
Copy Markdown
Contributor

run benchmark tpch tpcds clickbench_partitioned wide_schema

env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "false"
changed:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"

@kumarUjjawal

Copy link
Copy Markdown
Contributor

Im not sure which benchmark exactly to run

Started benchmakr. Let's see if it works 🤞

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5675290885-2364-nvq2j 6.12.94+ #1 SMP Tue Aug 4 08:44:15 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 cb3a578 (cb3a578) to cb3a578 diff

Run configuration
run benchmark tpch
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "false"
changed:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  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-c5675290885-2365-msp2d 6.12.94+ #1 SMP Tue Aug 4 08:44:15 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 cb3a578 (cb3a578) to cb3a578 diff

Run configuration
run benchmark tpcds
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "false"
changed:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  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-c5675290885-2366-xftgp 6.12.94+ #1 SMP Tue Aug 4 08:44:15 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 cb3a578 (cb3a578) to cb3a578 diff

Run configuration
run benchmark clickbench_partitioned
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "false"
changed:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  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-c5675290885-2367-l2clt 6.12.94+ #1 SMP Tue Aug 4 08:44:15 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 cb3a578 (cb3a578) to cb3a578 diff

Run configuration
run benchmark wide_schema
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "false"
changed:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "true"

Results will be posted here when complete


File an issue against this benchmark runner

@kumarUjjawal

Copy link
Copy Markdown
Contributor

show benchmark queue

@adriangbot

Copy link
Copy Markdown

Hi @kumarUjjawal, you asked to view the benchmark queue (#24227 (comment)).

Comment Repo PR User Benchmarks Status
#5675290885 apache/datafusion #24227 kumarUjjawal ["tpch"] running
#5675290885 apache/datafusion #24227 kumarUjjawal ["tpcds"] running
#5675290885 apache/datafusion #24227 kumarUjjawal ["clickbench_partitioned"] running
#5675290885 apache/datafusion #24227 kumarUjjawal ["wide_schema"] running

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 cb3a578 (cb3a578) to cb3a578 diff

Run configuration
run benchmark tpch
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "false"
changed:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  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 rich-T-kid_introduce-rle-parquet-flag
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ Query     ┃     HEAD ┃ rich-T-kid_introduce-rle-parquet-flag ┃       Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ QQuery 1  │ 37.99 ms │                              38.06 ms │    no change │
│ QQuery 2  │ 18.53 ms │                              19.17 ms │    no change │
│ QQuery 3  │ 28.03 ms │                              28.40 ms │    no change │
│ QQuery 4  │ 17.14 ms │                              17.32 ms │    no change │
│ QQuery 5  │ 35.12 ms │                              35.14 ms │    no change │
│ QQuery 6  │ 16.05 ms │                              15.97 ms │    no change │
│ QQuery 7  │ 40.40 ms │                              40.74 ms │    no change │
│ QQuery 8  │ 40.58 ms │                              40.68 ms │    no change │
│ QQuery 9  │ 47.98 ms │                              50.30 ms │    no change │
│ QQuery 10 │ 41.88 ms │                              60.36 ms │ 1.44x slower │
│ QQuery 11 │ 13.10 ms │                              13.63 ms │    no change │
│ QQuery 12 │ 23.80 ms │                              23.74 ms │    no change │
│ QQuery 13 │ 38.69 ms │                              51.41 ms │ 1.33x slower │
│ QQuery 14 │ 24.19 ms │                              24.14 ms │    no change │
│ QQuery 15 │ 30.67 ms │                              30.81 ms │    no change │
│ QQuery 16 │ 13.58 ms │                              14.23 ms │    no change │
│ QQuery 17 │ 70.69 ms │                              71.49 ms │    no change │
│ QQuery 18 │ 61.01 ms │                              99.29 ms │ 1.63x slower │
│ QQuery 19 │ 32.64 ms │                              31.65 ms │    no change │
│ QQuery 20 │ 31.61 ms │                              35.90 ms │ 1.14x slower │
│ QQuery 21 │ 55.16 ms │                              52.74 ms │    no change │
│ QQuery 22 │ 13.57 ms │                              15.63 ms │ 1.15x slower │
└───────────┴──────────┴───────────────────────────────────────┴──────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                                    ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                                    │ 732.41ms │
│ Total Time (rich-T-kid_introduce-rle-parquet-flag)   │ 810.78ms │
│ Average Time (HEAD)                                  │  33.29ms │
│ Average Time (rich-T-kid_introduce-rle-parquet-flag) │  36.85ms │
│ Queries Faster                                       │        0 │
│ Queries Slower                                       │        5 │
│ Queries with No Change                               │       17 │
│ Queries with Failure                                 │        0 │
└──────────────────────────────────────────────────────┴──────────┘

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

Comparing HEAD and rich-T-kid_introduce-rle-parquet-flag
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃ rich-T-kid_introduce-rle-parquet-flag ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 37.99 / 39.01 ±1.26 / 41.04 ms │        38.06 / 38.85 ±1.03 / 40.81 ms │     no change │
│ QQuery 2  │ 18.53 / 19.13 ±0.68 / 20.45 ms │        19.17 / 19.73 ±0.65 / 20.98 ms │     no change │
│ QQuery 3  │ 28.03 / 29.52 ±1.27 / 31.46 ms │        28.40 / 28.65 ±0.17 / 28.90 ms │     no change │
│ QQuery 4  │ 17.14 / 17.50 ±0.29 / 17.92 ms │        17.32 / 17.51 ±0.11 / 17.62 ms │     no change │
│ QQuery 5  │ 35.12 / 36.41 ±1.24 / 38.72 ms │        35.14 / 35.48 ±0.19 / 35.71 ms │     no change │
│ QQuery 6  │ 16.05 / 18.18 ±3.82 / 25.81 ms │        15.97 / 16.05 ±0.06 / 16.16 ms │ +1.13x faster │
│ QQuery 7  │ 40.40 / 41.95 ±0.87 / 43.10 ms │        40.74 / 42.62 ±1.36 / 44.40 ms │     no change │
│ QQuery 8  │ 40.58 / 41.57 ±1.46 / 44.47 ms │        40.68 / 42.22 ±2.54 / 47.28 ms │     no change │
│ QQuery 9  │ 47.98 / 49.97 ±1.40 / 52.04 ms │        50.30 / 50.94 ±0.49 / 51.75 ms │     no change │
│ QQuery 10 │ 41.88 / 42.59 ±1.04 / 44.65 ms │        60.36 / 61.66 ±0.98 / 62.85 ms │  1.45x slower │
│ QQuery 11 │ 13.10 / 13.30 ±0.22 / 13.71 ms │        13.63 / 13.72 ±0.06 / 13.80 ms │     no change │
│ QQuery 12 │ 23.80 / 24.82 ±0.91 / 26.42 ms │        23.74 / 23.99 ±0.17 / 24.21 ms │     no change │
│ QQuery 13 │ 38.69 / 38.88 ±0.14 / 39.08 ms │        51.41 / 52.41 ±1.59 / 55.57 ms │  1.35x slower │
│ QQuery 14 │ 24.19 / 24.45 ±0.22 / 24.81 ms │        24.14 / 24.35 ±0.15 / 24.52 ms │     no change │
│ QQuery 15 │ 30.67 / 30.79 ±0.07 / 30.86 ms │        30.81 / 31.89 ±1.64 / 35.15 ms │     no change │
│ QQuery 16 │ 13.58 / 13.86 ±0.26 / 14.31 ms │        14.23 / 14.61 ±0.22 / 14.85 ms │  1.05x slower │
│ QQuery 17 │ 70.69 / 71.53 ±0.48 / 72.15 ms │        71.49 / 73.43 ±1.53 / 76.09 ms │     no change │
│ QQuery 18 │ 61.01 / 62.06 ±0.72 / 63.23 ms │      99.29 / 103.32 ±4.09 / 110.66 ms │  1.66x slower │
│ QQuery 19 │ 32.64 / 32.96 ±0.25 / 33.34 ms │        31.65 / 31.98 ±0.36 / 32.66 ms │     no change │
│ QQuery 20 │ 31.61 / 31.84 ±0.23 / 32.18 ms │        35.90 / 36.32 ±0.27 / 36.76 ms │  1.14x slower │
│ QQuery 21 │ 55.16 / 55.56 ±0.40 / 56.27 ms │        52.74 / 54.75 ±2.39 / 59.20 ms │     no change │
│ QQuery 22 │ 13.57 / 13.93 ±0.24 / 14.23 ms │        15.63 / 15.80 ±0.14 / 15.97 ms │  1.13x slower │
└───────────┴────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                                    ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                                    │ 749.79ms │
│ Total Time (rich-T-kid_introduce-rle-parquet-flag)   │ 830.28ms │
│ Average Time (HEAD)                                  │  34.08ms │
│ Average Time (rich-T-kid_introduce-rle-parquet-flag) │  37.74ms │
│ Queries Faster                                       │        1 │
│ Queries Slower                                       │        6 │
│ Queries with No Change                               │       15 │
│ Queries with Failure                                 │        0 │
└──────────────────────────────────────────────────────┴──────────┘

Memory Pool Peaks

Peak MemoryPool reservation per query — what DataFusion's accounting believes it reserved. Recorded only when the benchmark runs with DATAFUSION_RUNTIME_MEMORY_LIMIT set.

Base: cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f | Changed: cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f

tpch — tpch_sf1

Query Base Changed Change
Query 1 30.0 MiB 30.0 MiB +0.1%
Query 2 25.2 MiB 16.0 MiB -36.3%
Query 3 11.4 MiB 11.2 MiB -2.2%
Query 4 33.5 MiB 22.2 MiB -33.8%
Query 5 42.4 MiB 32.2 MiB -24.2%
Query 6 832 B 832 B +0.0%
Query 7 97.2 MiB 100.7 MiB +3.5%
Query 8 30.1 MiB 30.1 MiB -0.0%
Query 9 134.9 MiB 133.8 MiB -0.8%
Query 10 37.9 MiB 68.2 MiB +79.8%
Query 11 41.5 MiB 31.5 MiB -24.1%
Query 12 20.0 MiB 10.1 MiB -49.4%
Query 13 62.4 MiB 52.5 MiB -16.0%
Query 14 4.8 MiB 4.8 MiB +0.0%
Query 15 12.3 MiB 13.1 MiB +6.4%
Query 16 44.5 MiB 32.7 MiB -26.6%
Query 17 141.3 MiB 141.3 MiB +0.0%
Query 18 308.1 MiB 152.9 MiB -50.4%
Query 19 721.9 KiB 215.8 KiB -70.1%
Query 20 58.8 MiB 64.9 MiB +10.3%
Query 21 39.5 MiB 32.9 MiB -16.7%
Query 22 32.3 MiB 35.0 MiB +8.6%

Pool accounting vs. process RSS

Max pool peak is the largest reservation any single query in the run reached; peak RSS covers the whole invocation, including data loading and allocator retention, and the two high-water marks need not coincide in time. The gap is therefore an upper bound on what the pool did not account for, not a measurement of it.

Benchmark Side Max pool peak Peak RSS Gap RSS / pool
tpch base (cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f) 308.1 MiB 1.2 GiB 944.0 MiB 4.1×
tpch changed (cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f) 152.9 MiB 1.1 GiB 985.6 MiB 7.4×
Resource Usage

tpch — base (merge-base)

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

tpch — branch

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

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing cb3a578 (cb3a578) to cb3a578 diff

Run configuration
run benchmark tpcds
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "false"
changed:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  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 rich-T-kid_introduce-rle-parquet-flag
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ rich-T-kid_introduce-rle-parquet-flag ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │    5.52 ms │                               5.87 ms │  1.06x slower │
│ QQuery 2  │   80.27 ms │                              84.30 ms │  1.05x slower │
│ QQuery 3  │   28.74 ms │                              29.52 ms │     no change │
│ QQuery 4  │  488.18 ms │                             664.61 ms │  1.36x slower │
│ QQuery 5  │   52.24 ms │                              52.35 ms │     no change │
│ QQuery 6  │   36.32 ms │                              34.83 ms │     no change │
│ QQuery 7  │   74.32 ms │                              76.49 ms │     no change │
│ QQuery 8  │   36.50 ms │                              37.36 ms │     no change │
│ QQuery 9  │   52.80 ms │                              51.99 ms │     no change │
│ QQuery 10 │   61.24 ms │                              63.35 ms │     no change │
│ QQuery 11 │  306.53 ms │                             437.80 ms │  1.43x slower │
│ QQuery 12 │   28.98 ms │                              25.73 ms │ +1.13x faster │
│ QQuery 13 │  117.36 ms │                             121.36 ms │     no change │
│ QQuery 14 │  415.32 ms │                             419.35 ms │     no change │
│ QQuery 15 │   57.00 ms │                              65.28 ms │  1.15x slower │
│ QQuery 16 │    6.53 ms │                               6.67 ms │     no change │
│ QQuery 17 │   80.10 ms │                              82.14 ms │     no change │
│ QQuery 18 │  103.91 ms │                             106.01 ms │     no change │
│ QQuery 19 │   41.37 ms │                              42.25 ms │     no change │
│ QQuery 20 │   35.46 ms │                              31.79 ms │ +1.12x faster │
│ QQuery 21 │   17.16 ms │                              17.27 ms │     no change │
│ QQuery 22 │   62.97 ms │                              72.40 ms │  1.15x slower │
│ QQuery 23 │  313.60 ms │                             314.76 ms │     no change │
│ QQuery 24 │  195.62 ms │                             196.51 ms │     no change │
│ QQuery 25 │  110.00 ms │                             109.55 ms │     no change │
│ QQuery 26 │   48.70 ms │                              50.47 ms │     no change │
│ QQuery 27 │    6.14 ms │                               6.66 ms │  1.08x slower │
│ QQuery 28 │   56.91 ms │                              56.84 ms │     no change │
│ QQuery 29 │   97.68 ms │                              99.98 ms │     no change │
│ QQuery 30 │   31.75 ms │                              39.76 ms │  1.25x slower │
│ QQuery 31 │  110.59 ms │                             115.76 ms │     no change │
│ QQuery 32 │   20.18 ms │                              20.25 ms │     no change │
│ QQuery 33 │   38.64 ms │                              37.90 ms │     no change │
│ QQuery 34 │    9.97 ms │                               9.76 ms │     no change │
│ QQuery 35 │   71.85 ms │                              72.93 ms │     no change │
│ QQuery 36 │    5.76 ms │                               6.03 ms │     no change │
│ QQuery 37 │    6.80 ms │                               7.87 ms │  1.16x slower │
│ QQuery 38 │   61.59 ms │                              77.88 ms │  1.26x slower │
│ QQuery 39 │   88.93 ms │                              91.27 ms │     no change │
│ QQuery 40 │   23.87 ms │                              24.62 ms │     no change │
│ QQuery 41 │   11.18 ms │                              12.49 ms │  1.12x slower │
│ QQuery 42 │   23.52 ms │                              23.91 ms │     no change │
│ QQuery 43 │    5.06 ms │                               5.29 ms │     no change │
│ QQuery 44 │    9.31 ms │                               9.15 ms │     no change │
│ QQuery 45 │   39.34 ms │                              38.25 ms │     no change │
│ QQuery 46 │   12.14 ms │                              11.87 ms │     no change │
│ QQuery 47 │  227.46 ms │                             211.65 ms │ +1.07x faster │
│ QQuery 48 │   95.07 ms │                              97.39 ms │     no change │
│ QQuery 49 │   70.91 ms │                              70.92 ms │     no change │
│ QQuery 50 │   59.05 ms │                              60.04 ms │     no change │
│ QQuery 51 │   91.14 ms │                              91.66 ms │     no change │
│ QQuery 52 │   23.91 ms │                              24.04 ms │     no change │
│ QQuery 53 │   29.16 ms │                              29.39 ms │     no change │
│ QQuery 54 │   54.06 ms │                              55.36 ms │     no change │
│ QQuery 55 │   23.38 ms │                              23.65 ms │     no change │
│ QQuery 56 │   38.95 ms │                              39.45 ms │     no change │
│ QQuery 57 │  175.66 ms │                             163.08 ms │ +1.08x faster │
│ QQuery 58 │  113.67 ms │                             108.32 ms │     no change │
│ QQuery 59 │  117.84 ms │                             115.97 ms │     no change │
│ QQuery 60 │   39.44 ms │                              39.60 ms │     no change │
│ QQuery 61 │   12.10 ms │                              12.26 ms │     no change │
│ QQuery 62 │   46.29 ms │                              46.77 ms │     no change │
│ QQuery 63 │   29.62 ms │                              29.43 ms │     no change │
│ QQuery 64 │  364.39 ms │                             376.51 ms │     no change │
│ QQuery 65 │  122.72 ms │                             125.13 ms │     no change │
│ QQuery 66 │   80.64 ms │                              78.98 ms │     no change │
│ QQuery 67 │  243.75 ms │                             248.87 ms │     no change │
│ QQuery 68 │   11.97 ms │                              12.04 ms │     no change │
│ QQuery 69 │   56.25 ms │                              57.95 ms │     no change │
│ QQuery 70 │  104.35 ms │                             101.56 ms │     no change │
│ QQuery 71 │   35.17 ms │                              35.90 ms │     no change │
│ QQuery 72 │ 1840.58 ms │                            1761.34 ms │     no change │
│ QQuery 73 │   10.30 ms │                               9.63 ms │ +1.07x faster │
│ QQuery 74 │  170.78 ms │                             230.11 ms │  1.35x slower │
│ QQuery 75 │  145.69 ms │                             146.43 ms │     no change │
│ QQuery 76 │   34.46 ms │                              36.07 ms │     no change │
│ QQuery 77 │   60.89 ms │                              62.01 ms │     no change │
│ QQuery 78 │  221.60 ms │                             223.40 ms │     no change │
│ QQuery 79 │   66.06 ms │                              67.51 ms │     no change │
│ QQuery 80 │   98.48 ms │                              99.60 ms │     no change │
│ QQuery 81 │   25.93 ms │                              30.45 ms │  1.17x slower │
│ QQuery 82 │   16.15 ms │                              17.33 ms │  1.07x slower │
│ QQuery 83 │   34.23 ms │                              33.75 ms │     no change │
│ QQuery 84 │   30.00 ms │                              32.01 ms │  1.07x slower │
│ QQuery 85 │  103.72 ms │                             105.75 ms │     no change │
│ QQuery 86 │   25.07 ms │                              25.09 ms │     no change │
│ QQuery 87 │   62.62 ms │                              78.51 ms │  1.25x slower │
│ QQuery 88 │   64.08 ms │                              64.73 ms │     no change │
│ QQuery 89 │   36.18 ms │                              36.55 ms │     no change │
│ QQuery 90 │   17.26 ms │                              17.43 ms │     no change │
│ QQuery 91 │   44.93 ms │                              46.22 ms │     no change │
│ QQuery 92 │   29.59 ms │                              29.65 ms │     no change │
│ QQuery 93 │   50.41 ms │                              51.03 ms │     no change │
│ QQuery 94 │   38.79 ms │                              38.55 ms │     no change │
│ QQuery 95 │   80.53 ms │                              80.99 ms │     no change │
│ QQuery 96 │   24.27 ms │                              23.75 ms │     no change │
│ QQuery 97 │   52.15 ms │                              51.65 ms │     no change │
│ QQuery 98 │   44.16 ms │                              38.51 ms │ +1.15x faster │
│ QQuery 99 │   71.10 ms │                              69.69 ms │     no change │
└───────────┴────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                    ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                    │ 9354.95ms │
│ Total Time (rich-T-kid_introduce-rle-parquet-flag)   │ 9732.14ms │
│ Average Time (HEAD)                                  │   94.49ms │
│ Average Time (rich-T-kid_introduce-rle-parquet-flag) │   98.30ms │
│ Queries Faster                                       │         6 │
│ Queries Slower                                       │        16 │
│ Queries with No Change                               │        77 │
│ Queries with Failure                                 │         0 │
└──────────────────────────────────────────────────────┴───────────┘

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

Comparing HEAD and rich-T-kid_introduce-rle-parquet-flag
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃ rich-T-kid_introduce-rle-parquet-flag ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │           5.52 / 6.04 ±0.90 / 7.84 ms │           5.87 / 6.38 ±0.95 / 8.29 ms │  1.06x slower │
│ QQuery 2  │        80.27 / 80.53 ±0.22 / 80.86 ms │        84.30 / 84.59 ±0.18 / 84.84 ms │  1.05x slower │
│ QQuery 3  │        28.74 / 29.17 ±0.33 / 29.61 ms │        29.52 / 29.75 ±0.19 / 30.10 ms │     no change │
│ QQuery 4  │     488.18 / 492.46 ±3.26 / 497.11 ms │    664.61 / 674.27 ±10.66 / 689.43 ms │  1.37x slower │
│ QQuery 5  │        52.24 / 52.55 ±0.27 / 52.98 ms │        52.35 / 54.06 ±3.02 / 60.08 ms │     no change │
│ QQuery 6  │        36.32 / 36.47 ±0.17 / 36.81 ms │        34.83 / 35.32 ±0.46 / 36.19 ms │     no change │
│ QQuery 7  │        74.32 / 75.01 ±0.47 / 75.72 ms │        76.49 / 76.84 ±0.32 / 77.35 ms │     no change │
│ QQuery 8  │        36.50 / 38.24 ±3.26 / 44.76 ms │        37.36 / 37.51 ±0.12 / 37.67 ms │     no change │
│ QQuery 9  │        52.80 / 54.33 ±1.49 / 57.15 ms │        51.99 / 55.64 ±3.35 / 61.97 ms │     no change │
│ QQuery 10 │        61.24 / 61.56 ±0.35 / 62.23 ms │        63.35 / 63.91 ±0.37 / 64.49 ms │     no change │
│ QQuery 11 │     306.53 / 309.10 ±1.96 / 311.89 ms │     437.80 / 442.65 ±3.48 / 447.05 ms │  1.43x slower │
│ QQuery 12 │        28.98 / 29.43 ±0.37 / 29.90 ms │        25.73 / 26.55 ±0.52 / 27.33 ms │ +1.11x faster │
│ QQuery 13 │     117.36 / 119.12 ±2.06 / 123.09 ms │     121.36 / 122.92 ±1.38 / 124.93 ms │     no change │
│ QQuery 14 │     415.32 / 419.44 ±2.52 / 422.88 ms │     419.35 / 423.38 ±4.02 / 430.22 ms │     no change │
│ QQuery 15 │        57.00 / 58.37 ±1.15 / 60.16 ms │        65.28 / 66.36 ±0.61 / 67.09 ms │  1.14x slower │
│ QQuery 16 │           6.53 / 6.72 ±0.25 / 7.22 ms │           6.67 / 6.91 ±0.25 / 7.37 ms │     no change │
│ QQuery 17 │        80.10 / 82.54 ±3.39 / 89.20 ms │        82.14 / 86.19 ±3.84 / 93.01 ms │     no change │
│ QQuery 18 │     103.91 / 104.40 ±0.56 / 105.44 ms │     106.01 / 107.20 ±0.82 / 108.23 ms │     no change │
│ QQuery 19 │        41.37 / 41.64 ±0.27 / 42.13 ms │        42.25 / 43.93 ±1.75 / 46.52 ms │  1.05x slower │
│ QQuery 20 │        35.46 / 36.26 ±1.00 / 38.17 ms │        31.79 / 32.24 ±0.26 / 32.50 ms │ +1.12x faster │
│ QQuery 21 │        17.16 / 17.32 ±0.10 / 17.49 ms │        17.27 / 17.64 ±0.21 / 17.83 ms │     no change │
│ QQuery 22 │        62.97 / 63.75 ±0.58 / 64.59 ms │        72.40 / 73.53 ±0.72 / 74.35 ms │  1.15x slower │
│ QQuery 23 │     313.60 / 317.20 ±2.55 / 320.22 ms │     314.76 / 318.38 ±2.74 / 321.14 ms │     no change │
│ QQuery 24 │     195.62 / 196.68 ±0.92 / 198.12 ms │     196.51 / 200.46 ±3.45 / 204.72 ms │     no change │
│ QQuery 25 │     110.00 / 112.55 ±2.14 / 116.24 ms │     109.55 / 112.11 ±1.76 / 114.27 ms │     no change │
│ QQuery 26 │        48.70 / 48.91 ±0.17 / 49.11 ms │        50.47 / 53.08 ±2.97 / 57.95 ms │  1.09x slower │
│ QQuery 27 │           6.14 / 6.32 ±0.15 / 6.53 ms │           6.66 / 6.83 ±0.13 / 6.98 ms │  1.08x slower │
│ QQuery 28 │        56.91 / 60.06 ±1.59 / 61.07 ms │        56.84 / 60.36 ±1.86 / 62.27 ms │     no change │
│ QQuery 29 │      97.68 / 100.05 ±2.40 / 103.23 ms │      99.98 / 101.52 ±1.80 / 104.52 ms │     no change │
│ QQuery 30 │        31.75 / 32.39 ±0.37 / 32.83 ms │        39.76 / 41.81 ±3.34 / 48.46 ms │  1.29x slower │
│ QQuery 31 │     110.59 / 112.54 ±2.23 / 116.88 ms │     115.76 / 116.91 ±0.67 / 117.84 ms │     no change │
│ QQuery 32 │        20.18 / 21.49 ±1.57 / 24.55 ms │        20.25 / 20.71 ±0.34 / 21.13 ms │     no change │
│ QQuery 33 │        38.64 / 39.14 ±0.65 / 40.40 ms │        37.90 / 39.73 ±2.71 / 45.13 ms │     no change │
│ QQuery 34 │         9.97 / 10.19 ±0.23 / 10.52 ms │         9.76 / 10.41 ±0.62 / 11.51 ms │     no change │
│ QQuery 35 │        71.85 / 73.05 ±1.29 / 75.33 ms │        72.93 / 73.53 ±0.36 / 73.89 ms │     no change │
│ QQuery 36 │           5.76 / 5.91 ±0.22 / 6.33 ms │           6.03 / 6.20 ±0.24 / 6.68 ms │     no change │
│ QQuery 37 │           6.80 / 6.92 ±0.10 / 7.05 ms │           7.87 / 8.32 ±0.29 / 8.67 ms │  1.20x slower │
│ QQuery 38 │        61.59 / 62.45 ±0.74 / 63.56 ms │        77.88 / 79.00 ±1.32 / 81.59 ms │  1.27x slower │
│ QQuery 39 │        88.93 / 89.80 ±0.80 / 91.16 ms │        91.27 / 93.32 ±3.23 / 99.71 ms │     no change │
│ QQuery 40 │        23.87 / 26.09 ±3.25 / 32.41 ms │        24.62 / 25.03 ±0.24 / 25.36 ms │     no change │
│ QQuery 41 │        11.18 / 11.43 ±0.18 / 11.69 ms │        12.49 / 12.62 ±0.11 / 12.77 ms │  1.10x slower │
│ QQuery 42 │        23.52 / 24.02 ±0.53 / 24.85 ms │        23.91 / 24.29 ±0.39 / 25.05 ms │     no change │
│ QQuery 43 │           5.06 / 5.18 ±0.15 / 5.47 ms │           5.29 / 5.44 ±0.20 / 5.83 ms │  1.05x slower │
│ QQuery 44 │           9.31 / 9.42 ±0.09 / 9.56 ms │           9.15 / 9.41 ±0.21 / 9.72 ms │     no change │
│ QQuery 45 │        39.34 / 39.85 ±0.71 / 41.24 ms │        38.25 / 39.93 ±2.20 / 44.23 ms │     no change │
│ QQuery 46 │        12.14 / 12.37 ±0.30 / 12.94 ms │        11.87 / 12.08 ±0.23 / 12.48 ms │     no change │
│ QQuery 47 │     227.46 / 229.40 ±1.05 / 230.30 ms │     211.65 / 216.12 ±4.46 / 222.15 ms │ +1.06x faster │
│ QQuery 48 │       95.07 / 96.78 ±2.86 / 102.48 ms │        97.39 / 98.55 ±0.81 / 99.91 ms │     no change │
│ QQuery 49 │        70.91 / 71.85 ±1.01 / 73.49 ms │        70.92 / 72.68 ±2.59 / 77.77 ms │     no change │
│ QQuery 50 │        59.05 / 59.59 ±0.56 / 60.55 ms │        60.04 / 61.69 ±2.42 / 66.50 ms │     no change │
│ QQuery 51 │       91.14 / 95.05 ±3.36 / 100.91 ms │        91.66 / 93.35 ±0.92 / 94.22 ms │     no change │
│ QQuery 52 │        23.91 / 24.40 ±0.35 / 24.87 ms │        24.04 / 24.36 ±0.22 / 24.60 ms │     no change │
│ QQuery 53 │        29.16 / 29.48 ±0.21 / 29.81 ms │        29.39 / 30.33 ±1.23 / 32.68 ms │     no change │
│ QQuery 54 │        54.06 / 54.67 ±0.32 / 54.91 ms │        55.36 / 56.69 ±1.45 / 59.41 ms │     no change │
│ QQuery 55 │        23.38 / 23.64 ±0.21 / 23.97 ms │        23.65 / 24.00 ±0.38 / 24.65 ms │     no change │
│ QQuery 56 │        38.95 / 40.66 ±2.56 / 45.72 ms │        39.45 / 40.03 ±0.60 / 41.12 ms │     no change │
│ QQuery 57 │     175.66 / 177.66 ±1.90 / 180.96 ms │     163.08 / 165.25 ±2.72 / 170.58 ms │ +1.08x faster │
│ QQuery 58 │     113.67 / 114.69 ±1.20 / 117.02 ms │     108.32 / 111.43 ±2.86 / 116.26 ms │     no change │
│ QQuery 59 │     117.84 / 119.83 ±2.19 / 123.76 ms │     115.97 / 117.07 ±1.52 / 120.06 ms │     no change │
│ QQuery 60 │        39.44 / 39.79 ±0.37 / 40.29 ms │        39.60 / 40.31 ±0.41 / 40.80 ms │     no change │
│ QQuery 61 │        12.10 / 12.75 ±1.13 / 15.01 ms │        12.26 / 12.53 ±0.26 / 12.99 ms │     no change │
│ QQuery 62 │        46.29 / 46.72 ±0.43 / 47.53 ms │        46.77 / 47.74 ±1.47 / 50.65 ms │     no change │
│ QQuery 63 │        29.62 / 30.03 ±0.31 / 30.54 ms │        29.43 / 30.85 ±1.67 / 34.08 ms │     no change │
│ QQuery 64 │     364.39 / 367.41 ±1.85 / 369.72 ms │     376.51 / 382.24 ±4.49 / 389.13 ms │     no change │
│ QQuery 65 │     122.72 / 125.57 ±2.28 / 128.93 ms │     125.13 / 128.69 ±2.46 / 132.77 ms │     no change │
│ QQuery 66 │        80.64 / 82.29 ±2.38 / 86.90 ms │        78.98 / 83.01 ±3.74 / 88.64 ms │     no change │
│ QQuery 67 │     243.75 / 249.20 ±3.94 / 255.10 ms │     248.87 / 255.11 ±4.33 / 260.85 ms │     no change │
│ QQuery 68 │        11.97 / 13.62 ±3.03 / 19.68 ms │        12.04 / 12.33 ±0.24 / 12.60 ms │ +1.10x faster │
│ QQuery 69 │        56.25 / 56.76 ±0.55 / 57.83 ms │        57.95 / 58.19 ±0.31 / 58.80 ms │     no change │
│ QQuery 70 │     104.35 / 106.26 ±1.60 / 108.20 ms │     101.56 / 105.27 ±3.64 / 111.49 ms │     no change │
│ QQuery 71 │        35.17 / 35.52 ±0.26 / 35.90 ms │        35.90 / 36.30 ±0.59 / 37.46 ms │     no change │
│ QQuery 72 │ 1840.58 / 1882.18 ±42.35 / 1935.08 ms │ 1761.34 / 1854.04 ±58.70 / 1919.91 ms │     no change │
│ QQuery 73 │        10.30 / 10.75 ±0.32 / 11.13 ms │          9.63 / 9.85 ±0.22 / 10.12 ms │ +1.09x faster │
│ QQuery 74 │     170.78 / 173.20 ±2.15 / 176.12 ms │     230.11 / 234.68 ±3.95 / 241.20 ms │  1.35x slower │
│ QQuery 75 │     145.69 / 149.38 ±2.49 / 152.71 ms │     146.43 / 149.23 ±3.44 / 155.72 ms │     no change │
│ QQuery 76 │        34.46 / 35.52 ±0.58 / 36.19 ms │        36.07 / 36.35 ±0.33 / 36.96 ms │     no change │
│ QQuery 77 │        60.89 / 61.71 ±0.62 / 62.71 ms │        62.01 / 62.42 ±0.40 / 63.09 ms │     no change │
│ QQuery 78 │     221.60 / 226.31 ±3.15 / 230.36 ms │     223.40 / 228.02 ±3.22 / 231.60 ms │     no change │
│ QQuery 79 │        66.06 / 67.95 ±1.89 / 71.53 ms │        67.51 / 68.81 ±1.50 / 71.70 ms │     no change │
│ QQuery 80 │      98.48 / 100.48 ±1.71 / 102.61 ms │      99.60 / 104.28 ±5.79 / 115.65 ms │     no change │
│ QQuery 81 │        25.93 / 26.58 ±0.89 / 28.34 ms │        30.45 / 30.88 ±0.34 / 31.29 ms │  1.16x slower │
│ QQuery 82 │        16.15 / 16.49 ±0.25 / 16.89 ms │        17.33 / 17.80 ±0.49 / 18.74 ms │  1.08x slower │
│ QQuery 83 │        34.23 / 35.05 ±0.75 / 36.07 ms │        33.75 / 34.00 ±0.13 / 34.11 ms │     no change │
│ QQuery 84 │        30.00 / 30.95 ±1.54 / 34.03 ms │        32.01 / 32.24 ±0.13 / 32.39 ms │     no change │
│ QQuery 85 │     103.72 / 105.15 ±1.32 / 107.47 ms │     105.75 / 109.52 ±3.57 / 115.59 ms │     no change │
│ QQuery 86 │        25.07 / 26.47 ±1.74 / 29.85 ms │        25.09 / 25.53 ±0.28 / 25.88 ms │     no change │
│ QQuery 87 │        62.62 / 63.37 ±0.60 / 64.39 ms │        78.51 / 79.21 ±0.53 / 79.86 ms │  1.25x slower │
│ QQuery 88 │        64.08 / 64.50 ±0.23 / 64.72 ms │        64.73 / 66.43 ±2.05 / 69.90 ms │     no change │
│ QQuery 89 │        36.18 / 36.94 ±0.61 / 37.97 ms │        36.55 / 36.95 ±0.39 / 37.67 ms │     no change │
│ QQuery 90 │        17.26 / 17.45 ±0.25 / 17.92 ms │        17.43 / 17.64 ±0.30 / 18.22 ms │     no change │
│ QQuery 91 │        44.93 / 45.83 ±0.78 / 47.09 ms │        46.22 / 46.73 ±0.27 / 46.99 ms │     no change │
│ QQuery 92 │        29.59 / 29.80 ±0.16 / 30.07 ms │        29.65 / 29.99 ±0.36 / 30.50 ms │     no change │
│ QQuery 93 │        50.41 / 52.12 ±1.67 / 54.87 ms │        51.03 / 51.98 ±0.75 / 52.78 ms │     no change │
│ QQuery 94 │        38.79 / 39.87 ±1.51 / 42.82 ms │        38.55 / 39.90 ±1.22 / 42.15 ms │     no change │
│ QQuery 95 │        80.53 / 82.41 ±1.09 / 83.64 ms │        80.99 / 81.58 ±0.81 / 83.18 ms │     no change │
│ QQuery 96 │        24.27 / 24.38 ±0.06 / 24.45 ms │        23.75 / 23.97 ±0.17 / 24.25 ms │     no change │
│ QQuery 97 │        52.15 / 53.59 ±1.21 / 55.28 ms │        51.65 / 53.16 ±1.28 / 55.11 ms │     no change │
│ QQuery 98 │        44.16 / 44.99 ±0.82 / 46.48 ms │        38.51 / 39.24 ±0.56 / 39.84 ms │ +1.15x faster │
│ QQuery 99 │        71.10 / 71.49 ±0.22 / 71.74 ms │        69.69 / 70.23 ±0.41 / 70.74 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                    ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                    │ 9517.03ms │
│ Total Time (rich-T-kid_introduce-rle-parquet-flag)   │ 9978.00ms │
│ Average Time (HEAD)                                  │   96.13ms │
│ Average Time (rich-T-kid_introduce-rle-parquet-flag) │  100.79ms │
│ Queries Faster                                       │         7 │
│ Queries Slower                                       │        18 │
│ Queries with No Change                               │        74 │
│ Queries with Failure                                 │         0 │
└──────────────────────────────────────────────────────┴───────────┘

Memory Pool Peaks

Peak MemoryPool reservation per query — what DataFusion's accounting believes it reserved. Recorded only when the benchmark runs with DATAFUSION_RUNTIME_MEMORY_LIMIT set.

Base: cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f | Changed: cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f

tpcds — tpcds_sf1

Query Base Changed Change
Query 1 128.4 KiB 64.3 KiB -50.0%
Query 2 83.6 MiB 80.1 MiB -4.2%
Query 3 4.5 MiB 2.5 MiB -44.0%
Query 4 154.2 MiB 83.3 MiB -46.0%
Query 5 12.7 MiB 11.7 MiB -8.2%
Query 6 7.8 MiB 4.5 MiB -42.1%
Query 7 9.1 MiB 3.4 MiB -62.5%
Query 8 2.4 MiB 1.2 MiB -50.8%
Query 9 32.1 KiB 32.1 KiB +0.0%
Query 10 4.4 MiB 2.0 MiB -54.0%
Query 11 101.5 MiB 55.8 MiB -45.0%
Query 12 131.9 MiB 116.6 MiB -11.6%
Query 13 17.4 MiB 11.8 MiB -31.8%
Query 14 160.5 MiB 160.3 MiB -0.1%
Query 15 6.8 MiB 4.2 MiB -37.6%
Query 16 161.6 KiB 66.0 KiB -59.2%
Query 17 37.7 MiB 37.7 MiB -0.1%
Query 18 21.3 MiB 18.4 MiB -13.4%
Query 19 7.8 MiB 2.8 MiB -64.6%
Query 20 132.8 MiB 126.5 MiB -4.7%
Query 21 5.6 MiB 2.7 MiB -52.5%
Query 22 91.5 MiB 59.1 MiB -35.4%
Query 23 216.9 MiB 210.3 MiB -3.0%
Query 24 46.8 MiB 32.6 MiB -30.5%
Query 25 79.6 MiB 79.2 MiB -0.6%
Query 26 8.9 MiB 3.6 MiB -59.3%
Query 27 1.9 MiB 1.3 MiB -28.2%
Query 28 1.5 MiB 1.3 MiB -9.0%
Query 29 91.2 MiB 91.6 MiB +0.4%
Query 30 6.9 MiB 3.6 MiB -48.1%
Query 31 32.0 MiB 21.5 MiB -33.0%
Query 32 2.7 MiB 2.7 MiB +0.0%
Query 33 6.3 MiB 4.8 MiB -24.8%
Query 34 7.9 MiB 2.9 MiB -62.9%
Query 35 25.8 MiB 16.0 MiB -37.9%
Query 36 10.6 MiB 10.3 MiB -2.4%
Query 37 3.8 MiB 3.1 MiB -17.7%
Query 38 20.3 MiB 9.5 MiB -53.1%
Query 39 44.3 MiB 54.7 MiB +23.6%
Query 40 13.8 MiB 10.8 MiB -21.3%
Query 41 2.2 MiB 1.1 MiB -48.5%
Query 42 2.2 MiB 1.2 MiB -45.3%
Query 43 192.4 KiB 96.6 KiB -49.8%
Query 44 192.4 KiB 96.6 KiB -49.8%
Query 45 10.7 MiB 5.7 MiB -46.8%
Query 46 8.0 MiB 4.2 MiB -47.8%
Query 47 163.0 MiB 129.8 MiB -20.4%
Query 48 15.5 MiB 9.9 MiB -35.8%
Query 49 51.7 MiB 43.0 MiB -17.0%
Query 50 13.6 MiB 13.9 MiB +2.2%
Query 51 177.8 MiB 178.1 MiB +0.2%
Query 52 3.9 MiB 1.9 MiB -51.2%
Query 53 30.8 MiB 30.8 MiB +0.0%
Query 54 3.3 MiB 1.9 MiB -41.8%
Query 55 3.8 MiB 1.6 MiB -56.7%
Query 56 5.7 MiB 3.9 MiB -30.2%
Query 57 156.9 MiB 128.5 MiB -18.1%
Query 58 6.4 MiB 4.3 MiB -33.0%
Query 59 24.0 MiB 20.4 MiB -14.9%
Query 60 7.8 MiB 6.3 MiB -19.0%
Query 61 1.3 MiB 1.3 MiB +0.0%
Query 62 7.0 MiB 4.0 MiB -42.5%
Query 63 20.8 MiB 20.8 MiB -0.0%
Query 64 86.3 MiB 93.9 MiB +8.8%
Query 65 30.7 MiB 21.0 MiB -31.6%
Query 66 12.2 MiB 13.3 MiB +9.4%
Query 67 517.5 MiB 141.9 MiB -72.6%
Query 68 8.0 MiB 4.2 MiB -47.8%
Query 69 47.9 MiB 3.6 MiB -92.4%
Query 70 51.9 MiB 39.5 MiB -23.9%
Query 71 52.9 MiB 41.8 MiB -21.0%
Query 72 72.8 MiB 75.5 MiB +3.7%
Query 73 7.9 MiB 2.9 MiB -62.9%
Query 74 57.6 MiB 33.7 MiB -41.4%
Query 75 24.3 MiB 23.2 MiB -4.5%
Query 76 8.0 MiB 6.7 MiB -16.4%
Query 77 3.5 MiB 3.5 MiB -0.1%
Query 78 137.4 MiB 137.4 MiB +0.0%
Query 79 10.3 MiB 8.8 MiB -14.4%
Query 80 42.3 MiB 41.4 MiB -2.3%
Query 81 17.5 MiB 5.0 MiB -71.4%
Query 82 3.8 MiB 3.8 MiB -0.0%
Query 83 11.4 MiB 8.3 MiB -27.7%
Query 84 10.9 MiB 10.5 MiB -3.3%
Query 85 20.2 MiB 15.2 MiB -24.5%
Query 86 105.5 MiB 82.1 MiB -22.1%
Query 87 20.8 MiB 12.3 MiB -40.8%
Query 88 2.1 MiB 1.8 MiB -12.2%
Query 89 130.4 MiB 112.4 MiB -13.8%
Query 90 619.0 KiB 619.0 KiB +0.0%
Query 91 22.7 MiB 30.9 MiB +36.1%
Query 92 2.7 MiB 2.7 MiB +0.0%
Query 93 13.8 MiB 14.3 MiB +3.7%
Query 94 3.8 MiB 3.6 MiB -7.3%
Query 95 14.3 MiB 14.3 MiB +0.0%
Query 96 224.7 KiB 224.7 KiB +0.0%
Query 97 32.3 MiB 32.0 MiB -0.9%
Query 98 133.1 MiB 116.9 MiB -12.1%
Query 99 7.1 MiB 1.7 MiB -76.5%

Pool accounting vs. process RSS

Max pool peak is the largest reservation any single query in the run reached; peak RSS covers the whole invocation, including data loading and allocator retention, and the two high-water marks need not coincide in time. The gap is therefore an upper bound on what the pool did not account for, not a measurement of it.

Benchmark Side Max pool peak Peak RSS Gap RSS / pool
tpcds base (cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f) 517.5 MiB 2.2 GiB 1.7 GiB 4.3×
tpcds changed (cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f) 210.3 MiB 1.8 GiB 1.6 GiB 8.8×
Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 50.0s
Peak memory 2.2 GiB
Avg memory 1.5 GiB
CPU user 201.6s
CPU sys 5.7s
Peak spill 0 B

tpcds — branch

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

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing cb3a578 (cb3a578) to cb3a578 diff

Run configuration
run benchmark clickbench_partitioned
env:
  DATAFUSION_RUNTIME_MEMORY_LIMIT: "32G"
baseline:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  env:
    DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY: "false"
changed:
  ref: "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"
  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 rich-T-kid_introduce-rle-parquet-flag
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ rich-T-kid_introduce-rle-parquet-flag ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │    1.24 ms │                               1.19 ms │     no change │
│ QQuery 1  │   11.94 ms │                              11.29 ms │ +1.06x faster │
│ QQuery 2  │   36.70 ms │                              35.80 ms │     no change │
│ QQuery 3  │   31.04 ms │                              30.26 ms │     no change │
│ QQuery 4  │  220.65 ms │                             221.82 ms │     no change │
│ QQuery 5  │  270.95 ms │                            1425.44 ms │  5.26x slower │
│ QQuery 6  │    1.27 ms │                               1.24 ms │     no change │
│ QQuery 7  │   13.13 ms │                              12.64 ms │     no change │
│ QQuery 8  │  327.66 ms │                             339.50 ms │     no change │
│ QQuery 9  │  455.32 ms │                             465.80 ms │     no change │
│ QQuery 10 │   68.78 ms │                             202.13 ms │  2.94x slower │
│ QQuery 11 │   80.61 ms │                             214.29 ms │  2.66x slower │
│ QQuery 12 │  262.65 ms │                            1417.02 ms │  5.40x slower │
│ QQuery 13 │  366.14 ms │                            2019.15 ms │  5.51x slower │
│ QQuery 14 │  285.97 ms │                            1550.45 ms │  5.42x slower │
│ QQuery 15 │  269.41 ms │                             277.13 ms │     no change │
│ QQuery 16 │  621.05 ms │                            3491.74 ms │  5.62x slower │
│ QQuery 17 │  623.43 ms │                            3556.36 ms │  5.70x slower │
│ QQuery 18 │ 1269.91 ms │                            5992.72 ms │  4.72x slower │
│ QQuery 19 │   27.11 ms │                              26.65 ms │     no change │
│ QQuery 20 │  513.47 ms │                            1033.26 ms │  2.01x slower │
│ QQuery 21 │  511.27 ms │                            1364.27 ms │  2.67x slower │
│ QQuery 22 │  981.59 ms │                            3169.13 ms │  3.23x slower │
│ QQuery 23 │ 3029.35 ms │                            9163.52 ms │  3.02x slower │
│ QQuery 24 │   40.70 ms │                              96.23 ms │  2.36x slower │
│ QQuery 25 │  110.45 ms │                             355.91 ms │  3.22x slower │
│ QQuery 26 │   41.34 ms │                              96.50 ms │  2.33x slower │
│ QQuery 27 │  513.69 ms │                            1127.43 ms │  2.19x slower │
│ QQuery 28 │ 2880.62 ms │                            3537.71 ms │  1.23x slower │
│ QQuery 29 │   41.45 ms │                              40.72 ms │     no change │
│ QQuery 30 │  310.83 ms │                             547.97 ms │  1.76x slower │
│ QQuery 31 │  286.09 ms │                             543.16 ms │  1.90x slower │
│ QQuery 32 │  936.76 ms │                            1044.47 ms │  1.11x slower │
│ QQuery 33 │ 1459.69 ms │                           13430.75 ms │  9.20x slower │
│ QQuery 34 │ 1485.67 ms │                           13273.73 ms │  8.93x slower │
│ QQuery 35 │  275.82 ms │                             284.74 ms │     no change │
│ QQuery 36 │   67.62 ms │                             167.07 ms │  2.47x slower │
│ QQuery 37 │   35.52 ms │                              96.46 ms │  2.72x slower │
│ QQuery 38 │   42.23 ms │                              80.22 ms │  1.90x slower │
│ QQuery 39 │  149.85 ms │                             375.56 ms │  2.51x slower │
│ QQuery 40 │   13.91 ms │                              14.12 ms │     no change │
│ QQuery 41 │   13.58 ms │                              13.69 ms │     no change │
│ QQuery 42 │   12.98 ms │                              13.09 ms │     no change │
└───────────┴────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                    ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                    │ 18999.43ms │
│ Total Time (rich-T-kid_introduce-rle-parquet-flag)   │ 71162.33ms │
│ Average Time (HEAD)                                  │   441.85ms │
│ Average Time (rich-T-kid_introduce-rle-parquet-flag) │  1654.94ms │
│ Queries Faster                                       │          1 │
│ Queries Slower                                       │         27 │
│ Queries with No Change                               │         15 │
│ Queries with Failure                                 │          0 │
└──────────────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and rich-T-kid_introduce-rle-parquet-flag
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃     rich-T-kid_introduce-rle-parquet-flag ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.24 / 4.00 ±5.44 / 14.89 ms │              1.19 / 3.92 ±5.39 / 14.70 ms │     no change │
│ QQuery 1  │        11.94 / 11.99 ±0.05 / 12.09 ms │            11.29 / 11.43 ±0.08 / 11.50 ms │     no change │
│ QQuery 2  │        36.70 / 37.03 ±0.24 / 37.34 ms │            35.80 / 36.17 ±0.36 / 36.86 ms │     no change │
│ QQuery 3  │        31.04 / 31.55 ±0.49 / 32.43 ms │            30.26 / 30.80 ±0.57 / 31.87 ms │     no change │
│ QQuery 4  │     220.65 / 225.04 ±3.32 / 229.90 ms │         221.82 / 224.77 ±2.53 / 229.44 ms │     no change │
│ QQuery 5  │     270.95 / 275.22 ±3.18 / 280.63 ms │     1425.44 / 1488.69 ±42.65 / 1539.99 ms │  5.41x slower │
│ QQuery 6  │           1.27 / 1.42 ±0.21 / 1.82 ms │               1.24 / 1.39 ±0.23 / 1.83 ms │     no change │
│ QQuery 7  │        13.13 / 13.45 ±0.35 / 14.00 ms │            12.64 / 12.67 ±0.03 / 12.71 ms │ +1.06x faster │
│ QQuery 8  │     327.66 / 331.61 ±2.50 / 334.06 ms │         339.50 / 345.94 ±6.73 / 358.01 ms │     no change │
│ QQuery 9  │     455.32 / 460.31 ±5.67 / 470.67 ms │        465.80 / 494.00 ±17.60 / 521.36 ms │  1.07x slower │
│ QQuery 10 │        68.78 / 70.08 ±1.45 / 72.84 ms │         202.13 / 203.71 ±1.47 / 206.48 ms │  2.91x slower │
│ QQuery 11 │        80.61 / 80.95 ±0.48 / 81.90 ms │         214.29 / 214.46 ±0.19 / 214.78 ms │  2.65x slower │
│ QQuery 12 │     262.65 / 268.27 ±5.23 / 278.10 ms │     1417.02 / 1504.42 ±67.45 / 1599.47 ms │  5.61x slower │
│ QQuery 13 │     366.14 / 373.33 ±4.05 / 377.47 ms │    2019.15 / 2148.83 ±188.35 / 2520.03 ms │  5.76x slower │
│ QQuery 14 │     285.97 / 289.47 ±2.93 / 293.79 ms │     1550.45 / 1597.18 ±28.19 / 1633.28 ms │  5.52x slower │
│ QQuery 15 │    269.41 / 282.72 ±11.78 / 304.61 ms │         277.13 / 285.27 ±8.19 / 297.78 ms │     no change │
│ QQuery 16 │     621.05 / 626.45 ±4.17 / 633.49 ms │     3491.74 / 3559.90 ±80.16 / 3702.28 ms │  5.68x slower │
│ QQuery 17 │     623.43 / 630.44 ±3.84 / 635.08 ms │     3556.36 / 3665.36 ±92.61 / 3813.58 ms │  5.81x slower │
│ QQuery 18 │ 1269.91 / 1307.75 ±33.11 / 1360.19 ms │    5992.72 / 6539.67 ±379.19 / 7140.70 ms │  5.00x slower │
│ QQuery 19 │        27.11 / 31.81 ±5.12 / 39.86 ms │            26.65 / 27.14 ±0.47 / 28.02 ms │ +1.17x faster │
│ QQuery 20 │    513.47 / 530.50 ±23.66 / 576.04 ms │      1033.26 / 1042.76 ±5.23 / 1048.63 ms │  1.97x slower │
│ QQuery 21 │     511.27 / 515.56 ±3.72 / 521.35 ms │      1364.27 / 1373.22 ±6.19 / 1381.60 ms │  2.66x slower │
│ QQuery 22 │     981.59 / 987.94 ±6.19 / 997.70 ms │     3169.13 / 3228.96 ±33.79 / 3265.64 ms │  3.27x slower │
│ QQuery 23 │ 3029.35 / 3098.47 ±38.90 / 3145.61 ms │    9163.52 / 9320.42 ±185.21 / 9672.74 ms │  3.01x slower │
│ QQuery 24 │        40.70 / 43.04 ±1.31 / 44.58 ms │         96.23 / 140.17 ±68.94 / 274.85 ms │  3.26x slower │
│ QQuery 25 │     110.45 / 111.00 ±0.51 / 111.77 ms │         355.91 / 361.55 ±4.19 / 367.96 ms │  3.26x slower │
│ QQuery 26 │        41.34 / 42.55 ±1.75 / 45.97 ms │            96.50 / 97.73 ±0.82 / 98.59 ms │  2.30x slower │
│ QQuery 27 │     513.69 / 522.98 ±8.02 / 537.77 ms │     1127.43 / 1149.56 ±15.26 / 1174.73 ms │  2.20x slower │
│ QQuery 28 │ 2880.62 / 2922.14 ±24.29 / 2956.05 ms │     3537.71 / 3581.56 ±27.07 / 3617.84 ms │  1.23x slower │
│ QQuery 29 │        41.45 / 42.26 ±0.81 / 43.41 ms │            40.72 / 41.13 ±0.37 / 41.80 ms │     no change │
│ QQuery 30 │     310.83 / 317.22 ±7.06 / 330.27 ms │         547.97 / 556.28 ±8.75 / 572.99 ms │  1.75x slower │
│ QQuery 31 │    286.09 / 299.78 ±11.55 / 319.08 ms │         543.16 / 545.89 ±2.74 / 550.54 ms │  1.82x slower │
│ QQuery 32 │    936.76 / 965.19 ±23.64 / 996.70 ms │     1044.47 / 1100.67 ±47.54 / 1165.52 ms │  1.14x slower │
│ QQuery 33 │ 1459.69 / 1482.61 ±20.62 / 1514.47 ms │ 13430.75 / 14018.27 ±608.62 / 15064.74 ms │  9.46x slower │
│ QQuery 34 │ 1485.67 / 1508.44 ±28.22 / 1563.64 ms │ 13273.73 / 14131.52 ±811.84 / 15262.78 ms │  9.37x slower │
│ QQuery 35 │    275.82 / 297.94 ±28.81 / 354.66 ms │        284.74 / 323.69 ±73.30 / 470.23 ms │  1.09x slower │
│ QQuery 36 │        67.62 / 71.34 ±2.71 / 74.41 ms │        167.07 / 180.55 ±10.40 / 190.42 ms │  2.53x slower │
│ QQuery 37 │        35.52 / 38.43 ±3.55 / 45.40 ms │            96.46 / 97.58 ±1.04 / 99.30 ms │  2.54x slower │
│ QQuery 38 │        42.23 / 46.74 ±4.91 / 55.12 ms │            80.22 / 85.49 ±4.45 / 91.16 ms │  1.83x slower │
│ QQuery 39 │     149.85 / 153.88 ±2.77 / 157.12 ms │        375.56 / 391.25 ±11.11 / 410.07 ms │  2.54x slower │
│ QQuery 40 │        13.91 / 18.35 ±3.63 / 24.26 ms │            14.12 / 15.24 ±1.24 / 17.65 ms │ +1.20x faster │
│ QQuery 41 │        13.58 / 18.95 ±5.12 / 25.24 ms │            13.69 / 13.92 ±0.28 / 14.48 ms │ +1.36x faster │
│ QQuery 42 │        12.98 / 14.20 ±1.94 / 18.06 ms │            13.09 / 17.76 ±9.01 / 35.77 ms │  1.25x slower │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                    ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                    │ 19402.39ms │
│ Total Time (rich-T-kid_introduce-rle-parquet-flag)   │ 74210.94ms │
│ Average Time (HEAD)                                  │   451.22ms │
│ Average Time (rich-T-kid_introduce-rle-parquet-flag) │  1725.84ms │
│ Queries Faster                                       │          4 │
│ Queries Slower                                       │         30 │
│ Queries with No Change                               │          9 │
│ Queries with Failure                                 │          0 │
└──────────────────────────────────────────────────────┴────────────┘

Memory Pool Peaks

Peak MemoryPool reservation per query — what DataFusion's accounting believes it reserved. Recorded only when the benchmark runs with DATAFUSION_RUNTIME_MEMORY_LIMIT set.

Base: cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f | Changed: cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f

clickbench_partitioned

Query Base Changed Change
Query 0 0 B 0 B 0.0%
Query 1 104 B 104 B +0.0%
Query 2 936 B 936 B +0.0%
Query 3 312 B 312 B +0.0%
Query 4 761.4 MiB 755.7 MiB -0.7%
Query 5 1.2 GiB 1.5 GiB +21.9%
Query 6 0 B 0 B 0.0%
Query 7 60.1 MiB 60.0 MiB -0.1%
Query 8 965.7 MiB 942.0 MiB -2.5%
Query 9 593.5 MiB 551.9 MiB -7.0%
Query 10 115.5 MiB 70.2 MiB -39.2%
Query 11 122.1 MiB 77.1 MiB -36.9%
Query 12 1.3 GiB 1.6 GiB +17.9%
Query 13 1.6 GiB 1.8 GiB +14.6%
Query 14 1.3 GiB 1.9 GiB +47.3%
Query 15 1.1 GiB 1.1 GiB -3.7%
Query 16 3.4 GiB 3.3 GiB -2.4%
Query 17 3.4 GiB 3.4 GiB -0.8%
Query 18 8.1 GiB 7.4 GiB -8.6%
Query 19 0 B 0 B 0.0%
Query 20 104 B 104 B +0.0%
Query 21 3.3 MiB 1.3 MiB -60.6%
Query 22 3.0 MiB 2.5 MiB -17.4%
Query 23 32.2 MiB 12.0 MiB -62.7%
Query 24 60.3 MiB 6.2 MiB -89.8%
Query 25 173.5 MiB 8.1 MiB -95.3%
Query 26 60.3 MiB 7.3 MiB -87.8%
Query 27 2.3 MiB 2.4 MiB +3.8%
Query 28 1.7 GiB 1.7 GiB -0.6%
Query 29 624 B 624 B +0.0%
Query 30 678.9 MiB 648.4 MiB -4.5%
Query 31 1.5 GiB 1.6 GiB +12.8%
Query 32 7.1 GiB 7.1 GiB +0.2%
Query 33 8.1 GiB 12.3 GiB +52.3%
Query 34 8.2 GiB 12.7 GiB +54.2%
Query 35 603.9 MiB 598.9 MiB -0.8%
Query 36 114.4 MiB 473.3 MiB +313.6%
Query 37 6.3 MiB 7.7 MiB +23.6%
Query 38 5.2 MiB 5.3 MiB +1.7%
Query 39 297.8 MiB 450.0 MiB +51.1%
Query 40 2.0 MiB 2.3 MiB +14.5%
Query 41 3.1 MiB 3.1 MiB -0.0%
Query 42 1.7 MiB 1.7 MiB +0.0%

Pool accounting vs. process RSS

Max pool peak is the largest reservation any single query in the run reached; peak RSS covers the whole invocation, including data loading and allocator retention, and the two high-water marks need not coincide in time. The gap is therefore an upper bound on what the pool did not account for, not a measurement of it.

Benchmark Side Max pool peak Peak RSS Gap RSS / pool
clickbench_partitioned base (cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f) 8.2 GiB 11.0 GiB 2.7 GiB 1.3×
clickbench_partitioned changed (cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f) 12.7 GiB 12.4 GiB −323.7 MiB 1.0×
Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 11.0 GiB
Avg memory 4.1 GiB
CPU user 993.1s
CPU sys 70.2s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 375.1s
Peak memory 12.4 GiB
Avg memory 5.8 GiB
CPU user 3264.4s
CPU sys 201.7s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

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

Benchmarks requested: wide_schema

Runner log (last 40 lines)
2026-09-15T05:38:30.475334Z  INFO runner starting benchmark runner bench_type=Datafusion, pr_url=https://github.com/apache/datafusion/pull/24227, benchmarks=wide_schema
2026-09-15T05:38:30.534029Z  INFO benchmark_controller::runner::bench_datafusion === Cloning PR branch ===
2026-09-15T05:38:30.534127Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["clone", "--depth=200", "https://github.com/apache/datafusion.git", "/workspace/datafusion-branch"], cwd="/"
2026-09-15T05:38:35.542760Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["fetch", "origin", "refs/pull/24227/head:rich-T-kid/introduce-rle-parquet-flag", "main"], cwd="/workspace/datafusion-branch"
2026-09-15T05:38:40.544667Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["checkout", "rich-T-kid/introduce-rle-parquet-flag"], cwd="/workspace/datafusion-branch"
2026-09-15T05:38:45.546276Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["merge-base", "HEAD", "origin/main"], cwd="/workspace/datafusion-branch"
2026-09-15T05:38:50.548946Z  INFO benchmark_controller::runner::bench_datafusion === Checking out custom changed ref === changed_ref=cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f
2026-09-15T05:38:50.548962Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["fetch", "origin", "refs/pull/24227/head"], cwd="/workspace/datafusion-branch"
2026-09-15T05:38:55.551151Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["fetch", "origin"], cwd="/workspace/datafusion-branch"
2026-09-15T05:39:00.553444Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["-c", "advice.detachedHead=false", "checkout", "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"], cwd="/workspace/datafusion-branch"
2026-09-15T05:39:05.555440Z  INFO benchmark_controller::runner::bench_datafusion === Cloning merge-base ===
2026-09-15T05:39:05.555458Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["clone", "--depth=200", "https://github.com/apache/datafusion.git", "/workspace/datafusion-base"], cwd="/"
2026-09-15T05:39:10.557640Z  INFO benchmark_controller::runner::bench_datafusion === Checking out custom baseline ref === baseline_ref=cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f
2026-09-15T05:39:10.557655Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["fetch", "origin", "refs/pull/24227/head"], cwd="/workspace/datafusion-base"
2026-09-15T05:39:15.559224Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["fetch", "origin"], cwd="/workspace/datafusion-base"
2026-09-15T05:39:20.561573Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["-c", "advice.detachedHead=false", "checkout", "cb3a57806e64fa8d95a5ec2e226d34ba5a97af3f"], cwd="/workspace/datafusion-base"
2026-09-15T05:39:25.563640Z  INFO benchmark_controller::runner::shell running command cmd=rustc, args=["--version"], cwd="/"
2026-09-15T05:39:30.569501Z  INFO benchmark_controller::runner::shell running command cmd=cargo, args=["metadata", "--no-deps", "--format-version", "1"], cwd="/workspace/datafusion-branch/benchmarks"
2026-09-15T05:39:35.574517Z  INFO benchmark_controller::runner::bench_datafusion === Compiling dfbench for PR branch and merge-base in parallel ===
2026-09-15T05:39:35.601275Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["rev-parse", "HEAD"], cwd="/workspace/datafusion-branch"
2026-09-15T05:39:40.609555Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["rev-parse", "HEAD"], cwd="/workspace/datafusion-base"
2026-09-15T05:39:45.612219Z  INFO benchmark_controller::runner::controller_client post_comment _repo=apache/datafusion, _pr_number=24227, job_id=2367
2026-09-15T05:39:46.649712Z  INFO benchmark_controller::runner::bench_datafusion === Waiting for builds ===
2026-09-15T05:53:32.776134Z  INFO benchmark_controller::runner::bench_datafusion === Builds complete ===
2026-09-15T05:53:32.776146Z  INFO benchmark_controller::runner::bench_datafusion === Setting up bench runner ===
2026-09-15T05:53:32.776156Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["clone", "--depth=200", "https://github.com/apache/datafusion.git", "/workspace/datafusion-bench"], cwd="/"
2026-09-15T05:53:37.778745Z  INFO benchmark_controller::runner::shell running command cmd=git, args=["-c", "advice.detachedHead=false", "checkout", "origin/main"], cwd="/workspace/datafusion-bench"
2026-09-15T05:53:42.781261Z  INFO benchmark_controller::runner::shell running command cmd=cp, args=["-r", "/data/tpch-answers/.", "/workspace/datafusion-bench/benchmarks/data/tpch_sf1/answers"], cwd="/"
2026-09-15T05:53:47.783876Z  INFO benchmark_controller::runner::shell running command cmd=cp, args=["-r", "/data/tpch-answers/.", "/workspace/datafusion-bench/benchmarks/data/tpch_sf10/answers"], cwd="/"
2026-09-15T05:53:52.785214Z  INFO benchmark_controller::runner::bench_datafusion ** Creating data if needed for wide_schema **
2026-09-15T05:53:52.785901Z  INFO benchmark_controller::runner::shell running command cmd=/scripts/cache_data.sh, args=["wide_schema", "/workspace/datafusion-bench/benchmarks"], cwd="/workspace/datafusion-bench/benchmarks"
2026-09-15T06:06:12.956609Z  INFO benchmark_controller::runner::bench_datafusion ** Running wide_schema baseline **
2026-09-15T06:06:12.956752Z  INFO benchmark_controller::runner::shell running command (monitored) cmd=env, args=["DATAFUSION_DIR=/workspace/datafusion-base", "RESULTS_NAME=HEAD", "DATAFUSION_RUNTIME_TEMP_DIRECTORY=/workspace/spill-base-wide_schema", "SQL_CARGO_COMMAND=cargo bench --bench sql -- --save-baseline HEAD", "DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY=false", "./bench.sh", "run", "wide_schema"], cwd="/workspace/datafusion-bench/benchmarks"
Kubernetes message
Job has reached the specified backoff limit

File an issue against this benchmark runner

@yinli-systems

Copy link
Copy Markdown
Contributor

The new paired benchmark is useful because it compares the same cb3a578 head with only DATAFUSION_EXECUTION_PARQUET_ENABLE_RLE_TO_DICTIONARY changed. Correctness CI is green, but flag-on performance needs a narrower target: TPC-H total 732.41 -> 810.78 ms (~11% slower), TPC-DS 9354.95 -> 9732.14 ms (~4% slower), and ClickBench partitioned 18999.43 -> 71162.33 ms (~3.75x slower). ClickBench Q33/Q34 are GROUP BY URL; they become 9.20x/8.93x slower, with peak MemoryPool reservation rising 8.1 -> 12.3 GiB and 8.2 -> 12.7 GiB respectively.

A concrete hypothesis, not yet a proven attribution: DFParquetMetadata::fetch_schema currently promotes a top-level string/binary column if any row group has a dictionary page, without an NDV or repetition gate. That can select an expensive dictionary path for URL-like high-cardinality group keys. Could we capture flag-off/flag-on EXPLAIN ANALYZE, the actual scan schema for URL, and row-group dictionary cardinalities for Q33/Q34? Those would distinguish reader/materialization cost from grouping/hash cost before choosing a fix. The default-off flag keeps existing workloads unchanged, but these A/B results argue against enabling it broadly without a cost gate.

For #24117 I am keeping the staged optimizer opt-in and fail-closed: exact NDV and row-count, physical page evidence, and a high repetition threshold are required before selectively requesting Dictionary on a direct group key. #25185 may help reused dictionary-value hashing, but its standalone benchmark is not yet end-to-end evidence that it offsets this regression.

@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

@kumarUjjawal any status update on this?

@kumarUjjawal

Copy link
Copy Markdown
Contributor

@kumarUjjawal any status update on this?

Based on the reported benchmark number:

  • TPC-H is approximately 10.7% slower.

  • TPC-DS is approximately 4–5% slower, although it uses less memory.

  • ClickBench is approximately 3.75–3.83× slower overall. Q33 and Q34 are approximately 9× slower, and both process memory and MemoryPool reservations increase.

  • wide_schema failed while running the disabled baseline, so it does not provide a comparison.

These results reproduce the earlier performance direction. I think the implementation needs to avoid automatically promoting high-cardinality or dictionary-fallback columns.

@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

These results reproduce the earlier performance direction. I think the implementation needs to avoid automatically promoting high-cardinality or dictionary-fallback columns.

@kumarUjjawal That is expected with this implementation. The larger epic #24111, specifically #24117, will handle deciding on a per-query basis whether to read the column in as Dictionary or as Utf8/Utf8View. The point of this feature flag is to let users enable direct RLE_DICTIONARY reads from Parquet files in DataFusion, for cases where they know the shape of their data and query well enough to make that decision themselves. By default, this flag will be turned off.

This line of thinking is in line with what alamb mentioned here #24111 (comment)

@kumarUjjawal

Copy link
Copy Markdown
Contributor

Thank you @Rich-T-kid I will give another pass.

@alamb

alamb commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Do we have any query where this option makes the query faster?

@Rich-T-kid

Copy link
Copy Markdown
Contributor Author

Do we have any query where this option makes the query faster?

@alamb theres 6 queries that tpcds show sped up but these are more than likely within noise. I think theres still a decent chunk of work left to do in aggregations/filter operators to make dictionary arrays faster.

@kumarUjjawal

Copy link
Copy Markdown
Contributor

Thank you @Rich-T-kid for moving this forward. Since this is a larger change I will need second pair of eyes on this before this can be approved. Let's see if anyone has time to take a look. Can you share the work in discord that might bring some people over.

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

Labels

auto detected api change Auto detected API change common Related to common crate datasource Changes to the datasource crate documentation Improvements or additions to documentation proto Related to proto crate sqllogictest SQL Logic Tests (.slt)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Allow users to enable dictionary column reads from parquet files

7 participants