datafusion icon indicating copy to clipboard operation
datafusion copied to clipboard

feat: use spawned tasks to reduce call stack depth and avoid busy waiting

Open pepijnve opened this issue 7 months ago โ€ข 14 comments

Which issue does this PR close?

  • Closes #16318.
  • Relates to #16196 and/or #16301

Rationale for this change

Yielding to the runtime in Tokio involves unwinding the call stack. When a query contains many nested pipeline blockers when it yields it's likely to do so from quite deep. PRs #16196 and/or #16301 increase the frequency of this.

Luckily Tokio provides just the tool to solve this: spawned tasks. By moving the blocking portion of operators to a spawned task, the call stack depth is significantly reduced. Additionally the caller no longer needs to poll the blocking task in a busy loop since it will only get woken when the spawned task completes which is the signal that the stream is ready to start emitting data.

What this change effectively does is chop a chain of n dependent pipeline blockers into n sub tasks. Only one of these subtasks will actually be scheduled by the runtime at any given time. The others will simply wait until their direct dependent is ready to emit data.

Possible alternative

It could be interesting to generalize the pattern of a pipeline blocking operator having a blocking prepare phase, followed by a streaming emit phase. I think this would probably have to take the shape of support types for operator implementations since this is rather tightly coupled to the internal implementation of an operator. I did not attempt to design this kind of support code yet. I don't having general support code is a strict prerequisite for this PR through. That's something that can be done in a later refactor since the current change is 100% implementation details.

What changes are included in this PR?

Wrap the blocking portion of sort and join (build phase) in a spawned task. The spawned tasks are kicked off the first time the stream is polled, not when execute is called. The guideline on this is not yet clear to me, but this is related to #16312.

The aggregation operators have not been modified in this PR yet, but those could benefit from the same change. If this direction is deemed promising I will update those as well.

Are these changes tested?

No new tests added, covered by existing tests.

โŒ The WASM tests fail due to those not yet running in a tokio context. Looking for feedback on whether that's a showstopper or not and how to fix that.

Are there any user-facing changes?

No, the modified operators yield more efficiently but nothing else changes.

pepijnve avatar Jun 07 '25 11:06 pepijnve

๐Ÿค– ./gh_compare_branch.sh Benchmark Script Running Linux aal-dev 6.11.0-1013-gcp #13~24.04.1-Ubuntu SMP Wed Apr 2 16:34:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Comparing issue_16318 (2a965dce60da14d772b9db4e4c5f6e388626b030) to 1daa5ed5cc51546904d45e23cc148601d973942a diff Benchmarks: tpch_mem clickbench_partitioned clickbench_extended Results will be posted here when complete

alamb avatar Jun 08 '25 23:06 alamb

๐Ÿค–: Benchmark completed

Details

Comparing HEAD and issue_16318
--------------------
Benchmark clickbench_extended.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ        HEAD โ”ƒ issue_16318 โ”ƒ       Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 0     โ”‚  1764.58 ms โ”‚  1887.17 ms โ”‚ 1.07x slower โ”‚
โ”‚ QQuery 1     โ”‚   697.84 ms โ”‚   737.88 ms โ”‚ 1.06x slower โ”‚
โ”‚ QQuery 2     โ”‚  1371.85 ms โ”‚  1456.38 ms โ”‚ 1.06x slower โ”‚
โ”‚ QQuery 3     โ”‚   679.75 ms โ”‚   706.70 ms โ”‚    no change โ”‚
โ”‚ QQuery 4     โ”‚  1455.11 ms โ”‚  1441.33 ms โ”‚    no change โ”‚
โ”‚ QQuery 5     โ”‚ 15616.91 ms โ”‚ 15838.54 ms โ”‚    no change โ”‚
โ”‚ QQuery 6     โ”‚  2021.53 ms โ”‚  2092.32 ms โ”‚    no change โ”‚
โ”‚ QQuery 7     โ”‚  2070.45 ms โ”‚  2255.10 ms โ”‚ 1.09x slower โ”‚
โ”‚ QQuery 8     โ”‚   850.20 ms โ”‚   820.90 ms โ”‚    no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary          โ”ƒ            โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (HEAD)          โ”‚ 26528.21ms โ”‚
โ”‚ Total Time (issue_16318)   โ”‚ 27236.34ms โ”‚
โ”‚ Average Time (HEAD)        โ”‚  2947.58ms โ”‚
โ”‚ Average Time (issue_16318) โ”‚  3026.26ms โ”‚
โ”‚ Queries Faster             โ”‚          0 โ”‚
โ”‚ Queries Slower             โ”‚          4 โ”‚
โ”‚ Queries with No Change     โ”‚          5 โ”‚
โ”‚ Queries with Failure       โ”‚          0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
--------------------
Benchmark clickbench_partitioned.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ        HEAD โ”ƒ issue_16318 โ”ƒ        Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 0     โ”‚    15.98 ms โ”‚    14.96 ms โ”‚ +1.07x faster โ”‚
โ”‚ QQuery 1     โ”‚    32.71 ms โ”‚    32.55 ms โ”‚     no change โ”‚
โ”‚ QQuery 2     โ”‚    81.72 ms โ”‚    80.60 ms โ”‚     no change โ”‚
โ”‚ QQuery 3     โ”‚    98.69 ms โ”‚    94.35 ms โ”‚     no change โ”‚
โ”‚ QQuery 4     โ”‚   579.71 ms โ”‚   595.93 ms โ”‚     no change โ”‚
โ”‚ QQuery 5     โ”‚   845.60 ms โ”‚   861.52 ms โ”‚     no change โ”‚
โ”‚ QQuery 6     โ”‚    23.05 ms โ”‚    23.03 ms โ”‚     no change โ”‚
โ”‚ QQuery 7     โ”‚    37.18 ms โ”‚    35.64 ms โ”‚     no change โ”‚
โ”‚ QQuery 8     โ”‚   896.54 ms โ”‚   888.95 ms โ”‚     no change โ”‚
โ”‚ QQuery 9     โ”‚  1154.45 ms โ”‚  1185.07 ms โ”‚     no change โ”‚
โ”‚ QQuery 10    โ”‚   265.14 ms โ”‚   266.51 ms โ”‚     no change โ”‚
โ”‚ QQuery 11    โ”‚   296.19 ms โ”‚   303.53 ms โ”‚     no change โ”‚
โ”‚ QQuery 12    โ”‚   896.36 ms โ”‚   910.80 ms โ”‚     no change โ”‚
โ”‚ QQuery 13    โ”‚  1212.33 ms โ”‚  1372.46 ms โ”‚  1.13x slower โ”‚
โ”‚ QQuery 14    โ”‚   833.77 ms โ”‚   849.28 ms โ”‚     no change โ”‚
โ”‚ QQuery 15    โ”‚   810.40 ms โ”‚   825.57 ms โ”‚     no change โ”‚
โ”‚ QQuery 16    โ”‚  1702.67 ms โ”‚  1754.50 ms โ”‚     no change โ”‚
โ”‚ QQuery 17    โ”‚  1593.37 ms โ”‚  1622.95 ms โ”‚     no change โ”‚
โ”‚ QQuery 18    โ”‚  3061.89 ms โ”‚  3090.11 ms โ”‚     no change โ”‚
โ”‚ QQuery 19    โ”‚    80.71 ms โ”‚    84.37 ms โ”‚     no change โ”‚
โ”‚ QQuery 20    โ”‚  1131.96 ms โ”‚  1171.56 ms โ”‚     no change โ”‚
โ”‚ QQuery 21    โ”‚  1299.18 ms โ”‚  1355.14 ms โ”‚     no change โ”‚
โ”‚ QQuery 22    โ”‚  2190.27 ms โ”‚  2289.42 ms โ”‚     no change โ”‚
โ”‚ QQuery 23    โ”‚  8012.02 ms โ”‚  8214.48 ms โ”‚     no change โ”‚
โ”‚ QQuery 24    โ”‚   467.12 ms โ”‚   479.98 ms โ”‚     no change โ”‚
โ”‚ QQuery 25    โ”‚   384.56 ms โ”‚   405.53 ms โ”‚  1.05x slower โ”‚
โ”‚ QQuery 26    โ”‚   527.13 ms โ”‚   538.47 ms โ”‚     no change โ”‚
โ”‚ QQuery 27    โ”‚  1590.25 ms โ”‚  1648.26 ms โ”‚     no change โ”‚
โ”‚ QQuery 28    โ”‚ 13842.27 ms โ”‚ 12564.81 ms โ”‚ +1.10x faster โ”‚
โ”‚ QQuery 29    โ”‚   533.53 ms โ”‚   522.59 ms โ”‚     no change โ”‚
โ”‚ QQuery 30    โ”‚   803.36 ms โ”‚   816.08 ms โ”‚     no change โ”‚
โ”‚ QQuery 31    โ”‚   863.54 ms โ”‚   862.31 ms โ”‚     no change โ”‚
โ”‚ QQuery 32    โ”‚  2627.68 ms โ”‚  2692.79 ms โ”‚     no change โ”‚
โ”‚ QQuery 33    โ”‚  3276.79 ms โ”‚  3356.72 ms โ”‚     no change โ”‚
โ”‚ QQuery 34    โ”‚  3323.95 ms โ”‚  3383.36 ms โ”‚     no change โ”‚
โ”‚ QQuery 35    โ”‚  1273.32 ms โ”‚  1281.73 ms โ”‚     no change โ”‚
โ”‚ QQuery 36    โ”‚   122.83 ms โ”‚   122.15 ms โ”‚     no change โ”‚
โ”‚ QQuery 37    โ”‚    55.54 ms โ”‚    57.40 ms โ”‚     no change โ”‚
โ”‚ QQuery 38    โ”‚   124.07 ms โ”‚   123.23 ms โ”‚     no change โ”‚
โ”‚ QQuery 39    โ”‚   197.18 ms โ”‚   195.97 ms โ”‚     no change โ”‚
โ”‚ QQuery 40    โ”‚    48.39 ms โ”‚    49.25 ms โ”‚     no change โ”‚
โ”‚ QQuery 41    โ”‚    43.34 ms โ”‚    44.45 ms โ”‚     no change โ”‚
โ”‚ QQuery 42    โ”‚    38.56 ms โ”‚    38.53 ms โ”‚     no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary          โ”ƒ            โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (HEAD)          โ”‚ 57295.30ms โ”‚
โ”‚ Total Time (issue_16318)   โ”‚ 57106.84ms โ”‚
โ”‚ Average Time (HEAD)        โ”‚  1332.45ms โ”‚
โ”‚ Average Time (issue_16318) โ”‚  1328.07ms โ”‚
โ”‚ Queries Faster             โ”‚          2 โ”‚
โ”‚ Queries Slower             โ”‚          2 โ”‚
โ”‚ Queries with No Change     โ”‚         39 โ”‚
โ”‚ Queries with Failure       โ”‚          0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
--------------------
Benchmark tpch_mem_sf1.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ      HEAD โ”ƒ issue_16318 โ”ƒ       Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 1     โ”‚ 119.84 ms โ”‚   119.54 ms โ”‚    no change โ”‚
โ”‚ QQuery 2     โ”‚  22.34 ms โ”‚    21.44 ms โ”‚    no change โ”‚
โ”‚ QQuery 3     โ”‚  33.02 ms โ”‚    32.72 ms โ”‚    no change โ”‚
โ”‚ QQuery 4     โ”‚  20.20 ms โ”‚    19.94 ms โ”‚    no change โ”‚
โ”‚ QQuery 5     โ”‚  53.21 ms โ”‚    51.88 ms โ”‚    no change โ”‚
โ”‚ QQuery 6     โ”‚  12.31 ms โ”‚    12.07 ms โ”‚    no change โ”‚
โ”‚ QQuery 7     โ”‚  96.52 ms โ”‚    93.30 ms โ”‚    no change โ”‚
โ”‚ QQuery 8     โ”‚  25.53 ms โ”‚    25.72 ms โ”‚    no change โ”‚
โ”‚ QQuery 9     โ”‚  57.51 ms โ”‚    58.47 ms โ”‚    no change โ”‚
โ”‚ QQuery 10    โ”‚  48.69 ms โ”‚    49.67 ms โ”‚    no change โ”‚
โ”‚ QQuery 11    โ”‚  11.31 ms โ”‚    11.33 ms โ”‚    no change โ”‚
โ”‚ QQuery 12    โ”‚  40.74 ms โ”‚    41.53 ms โ”‚    no change โ”‚
โ”‚ QQuery 13    โ”‚  27.30 ms โ”‚    27.26 ms โ”‚    no change โ”‚
โ”‚ QQuery 14    โ”‚   9.71 ms โ”‚     9.89 ms โ”‚    no change โ”‚
โ”‚ QQuery 15    โ”‚  22.36 ms โ”‚    21.91 ms โ”‚    no change โ”‚
โ”‚ QQuery 16    โ”‚  20.83 ms โ”‚    21.17 ms โ”‚    no change โ”‚
โ”‚ QQuery 17    โ”‚  94.35 ms โ”‚    90.99 ms โ”‚    no change โ”‚
โ”‚ QQuery 18    โ”‚ 204.01 ms โ”‚   204.54 ms โ”‚    no change โ”‚
โ”‚ QQuery 19    โ”‚  25.76 ms โ”‚    25.56 ms โ”‚    no change โ”‚
โ”‚ QQuery 20    โ”‚  34.57 ms โ”‚    35.02 ms โ”‚    no change โ”‚
โ”‚ QQuery 21    โ”‚ 153.21 ms โ”‚   160.51 ms โ”‚    no change โ”‚
โ”‚ QQuery 22    โ”‚  16.12 ms โ”‚    17.13 ms โ”‚ 1.06x slower โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary          โ”ƒ           โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (HEAD)          โ”‚ 1149.45ms โ”‚
โ”‚ Total Time (issue_16318)   โ”‚ 1151.58ms โ”‚
โ”‚ Average Time (HEAD)        โ”‚   52.25ms โ”‚
โ”‚ Average Time (issue_16318) โ”‚   52.34ms โ”‚
โ”‚ Queries Faster             โ”‚         0 โ”‚
โ”‚ Queries Slower             โ”‚         1 โ”‚
โ”‚ Queries with No Change     โ”‚        21 โ”‚
โ”‚ Queries with Failure       โ”‚         0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

alamb avatar Jun 09 '25 00:06 alamb

@alamb I've been trying to make sense of what to do with the benchmark results. They always seem to give me very mixed results when I run them locally (that's part of why I did the min/max/stddev thing, to try to get more insight). Some tests are slower but total and average time increase is marginal. Should I take a closer look at the 1.13 slower one?

clickbench_extended seems to have a consistent penalty. I'll try to understand why that is.

pepijnve avatar Jun 09 '25 17:06 pepijnve

I had a look at clickbench_extended. I cannot explain the slowdown. Those queries do not even use sorting or joins. The plan for the first one for instance is

AggregateExec: mode=Final                                                                                                                                                                                                                                                                                                                                                                                                                                                 
  CoalescePartitionsExec                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
    AggregateExec: mode=Partial                                                                                                                                                                                                                                                                                                                                                                                                                                           
      DataSourceExec:

pepijnve avatar Jun 09 '25 18:06 pepijnve

Looking at the clickbench_partitioned outliers. Wrt the code changes in this PR they seem pretty similar yet one has basically the opposite result of the other. What's interesting is that total time is actually lower for the run. I collected target_partitions = 1 plans. Perhaps the results are influenced by repartition/coalesce?

Query 13 1.13x slower

SELECT "SearchPhrase", COUNT(DISTINCT "UserID") AS u FROM 'hits.parquet' WHERE "SearchPhrase" <> '' GROUP BY "SearchPhrase" ORDER BY u DESC LIMIT 10;
SortExec: TopK(fetch=10), expr=[u@1 DESC], preserve_partitioning=[false]
  ProjectionExec: expr=[SearchPhrase@0 as SearchPhrase, count(alias1)@1 as u]
    AggregateExec: mode=Single, gby=[SearchPhrase@0 as SearchPhrase], aggr=[count(alias1)]
      AggregateExec: mode=Single, gby=[SearchPhrase@1 as SearchPhrase, UserID@0 as alias1], aggr=[]
        CoalesceBatchesExec: target_batch_size=8192
          FilterExec: SearchPhrase@1 !=
            DataSourceExec: file_groups={1 group: [[Users/pepijn/RustroverProjects/datafusion/benchmarks/data/hits.parquet:0..14779976446]]}, projection=[UserID, SearchPhrase], file_type=parquet, predicate=SearchPhrase@39 != , pruning_predicate=SearchPhrase_null_count@2 != row_count@3 AND (SearchPhrase_min@0 !=  OR  != SearchPhrase_max@1), required_guarantees=[SearchPhrase not in ()]

Query 28: 1.10x faster

SELECT REGEXP_REPLACE("Referer", '^https?://(?:www\.)?([^/]+)/.*$', '\1') AS k, AVG(length("Referer")) AS l, COUNT(*) AS c, MIN("Referer") FROM 'hits.parquet' WHERE "Referer" <> '' GROUP BY k HAVING COUNT(*) > 100000 ORDER BY l DESC LIMIT 25;
SortExec: TopK(fetch=25), expr=[l@1 DESC], preserve_partitioning=[false]
  ProjectionExec: expr=[regexp_replace(hits.parquet.Referer,Utf8("^https?://(?:www\.)?([^/]+)/.*$"),Utf8("\1"))@0 as k, avg(character_length(hits.parquet.Referer))@1 as l, count(Int64(1))@2 as c, min(hits.parquet.Referer)@3 as min(hits.parquet.Referer)]
    CoalesceBatchesExec: target_batch_size=8192
      FilterExec: count(Int64(1))@2 > 100000
        AggregateExec: mode=Single, gby=[regexp_replace(Referer@0, ^https?://(?:www\.)?([^/]+)/.*$, \1) as regexp_replace(hits.parquet.Referer,Utf8("^https?://(?:www\.)?([^/]+)/.*$"),Utf8("\1"))], aggr=[avg(character_length(hits.parquet.Referer)), count(Int64(1)), min(hits.parquet.Referer)]
          CoalesceBatchesExec: target_batch_size=8192
            FilterExec: Referer@0 !=
              DataSourceExec: file_groups={1 group: [[Users/pepijn/RustroverProjects/datafusion/benchmarks/data/hits.parquet:0..14779976446]]}, projection=[Referer], file_type=parquet, predicate=Referer@14 != , pruning_predicate=Referer_null_count@2 != row_count@3 AND (Referer_min@0 !=  OR  != Referer_max@1), required_guarantees=[Referer not in ()]

pepijnve avatar Jun 09 '25 18:06 pepijnve

In what situations would these changes lead to better performance? I.e. why is query 28 28: ~ 1.10x faster?

Dandandan avatar Jun 10 '25 11:06 Dandandan

(Or is it just benchmark noise?)

Dandandan avatar Jun 10 '25 11:06 Dandandan

In what situations would these changes lead to better performance? I.e. why is query 28 28: ~ 1.10x faster?

The jury is still out on whether it makes sense or not. I can explain my theoretical reasoning. Apologies up front if I'm writing too pedantically. Just trying to explain things as clearly as I can. Not a database guy so this may sounds hopelessly naive.

The first observation is that yielding all the way to the runtime in Tokio requires stack unwinding. That's the nature of stackless tasks. The deeper your call stack is, the more call frames you need to unwind and the more calls you'll need to redo to get back to the yield point. I've been trying to find information on whether the Rust compiler does some magic to avoid this, but as far as I can tell that's not the case. I did find hints that it optimizes nested async function calls, but it will not do so for nested dyn Stream poll_next calls. Makes sense; an aot compiler will typically not be able to optimize across virtual function calls. The consequence is that yielding to the runtime can have a non trivial cost. The other PR you're reviewing is an extreme example of that.

Second observation is that DataFusion's volcano model naturally leads to fairly deep call stacks. The tree of execution plans results in a tree of streams and a parent stream's poll_next will often directly call poll_next on a child. If you get one of these deep call stacks, yielding from the deepest point potentially means unwinding the whole thing and coming back. This is mitigated a bit already when volcano breaking operators like repartition are present in the plan. The deepest call stacks are seen when running with target_partitions = 1.

Third, pipeline breaking operators are intrinsically two-phase. First they collect, then they emit. There's a gray area of course, but I'm talking about the classic ones like single aggregation. While a pipeline breaking stream is in its collect phase, it can be 100% sure that it will not have any new data for poll_next caller until that phase completes. There's really not much point in telling the caller Poll::Pending over and over again because that leads to busy waiting. But you do still want to yield to the runtime periodically to not squat the Tokio executor threads. So there are situations where there are potentially long phases where any yield to the caller is redundant (there's no new info), but you still need to yield for cooperative scheduling.

Combing all that I think you're looking for deep query plans with nested pipeline breakers. In a different PR someone pointed me to this query https://github.com/apache/datafusion/blob/bf7859e5d9dbdc260674f5333a5cafa9c6e7bc12/datafusion/sqllogictest/test_files/window.slt#L3020 The nested sorts in the physical plan are something of a worst case scenario. At the deepest sort you have a 12 level deep call stack that gets reactivated for every yield. If instead we chop this into 6 chained spawned task, you get 6 much shallower call stacks. Of those tasks only one will be active, the other ones will be inert until there's actually something to do.

A second factor can be the data source. Filesystem streams tend to be always ready, others may not. The more the source returns pending the more you'll see the overhead described above show up I think.

All of this assumes of course that going up and back down the call stack has a non trivial cost. Perhaps it's not significant enough to be measurable. I'm still figuring out how to best profile this stuff, so I'm afraid I don't have anything more fact based to give you yet.

Besides performance there's a small aesthetic aspect to this. I find that a stream that responds with pending <wake> ready ready ready none is more elegant than pending pending pending pending ... pending ready ready ready none The first one abstracts what's going on underneath better than the letter. But I understand that raw performance trumps aesthetics here.

pepijnve avatar Jun 10 '25 12:06 pepijnve

I think I'll put this one in draft for now. Benchmarks results say "needs more work and performance analysis" to me.

Comparing baseline and branch
--------------------
Benchmark clickbench_extended.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ    baseline โ”ƒ      branch โ”ƒ    Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 0     โ”‚  2827.60 ms โ”‚  2861.15 ms โ”‚ no change โ”‚
โ”‚ QQuery 1     โ”‚  1275.24 ms โ”‚  1271.33 ms โ”‚ no change โ”‚
โ”‚ QQuery 2     โ”‚  2529.29 ms โ”‚  2542.19 ms โ”‚ no change โ”‚
โ”‚ QQuery 3     โ”‚  1082.87 ms โ”‚  1105.09 ms โ”‚ no change โ”‚
โ”‚ QQuery 4     โ”‚  2774.37 ms โ”‚  2834.65 ms โ”‚ no change โ”‚
โ”‚ QQuery 5     โ”‚ 32714.77 ms โ”‚ 32948.06 ms โ”‚ no change โ”‚
โ”‚ QQuery 6     โ”‚  3662.78 ms โ”‚  3610.34 ms โ”‚ no change โ”‚
โ”‚ QQuery 7     โ”‚  4411.89 ms โ”‚  4412.35 ms โ”‚ no change โ”‚
โ”‚ QQuery 8     โ”‚  1622.98 ms โ”‚  1641.82 ms โ”‚ no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ            โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 52901.80ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 53226.99ms โ”‚
โ”‚ Average Time (baseline) โ”‚  5877.98ms โ”‚
โ”‚ Average Time (branch)   โ”‚  5914.11ms โ”‚
โ”‚ Queries Faster          โ”‚          0 โ”‚
โ”‚ Queries Slower          โ”‚          0 โ”‚
โ”‚ Queries with No Change  โ”‚          9 โ”‚
โ”‚ Queries with Failure    โ”‚          0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
--------------------
Benchmark clickbench_partitioned.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ    baseline โ”ƒ      branch โ”ƒ        Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 0     โ”‚    29.01 ms โ”‚    28.68 ms โ”‚     no change โ”‚
โ”‚ QQuery 1     โ”‚    74.78 ms โ”‚    69.50 ms โ”‚ +1.08x faster โ”‚
โ”‚ QQuery 2     โ”‚   159.91 ms โ”‚   167.57 ms โ”‚     no change โ”‚
โ”‚ QQuery 3     โ”‚   183.96 ms โ”‚   188.96 ms โ”‚     no change โ”‚
โ”‚ QQuery 4     โ”‚  1132.22 ms โ”‚  1143.89 ms โ”‚     no change โ”‚
โ”‚ QQuery 5     โ”‚  1439.94 ms โ”‚  1548.88 ms โ”‚  1.08x slower โ”‚
โ”‚ QQuery 6     โ”‚    46.06 ms โ”‚    43.16 ms โ”‚ +1.07x faster โ”‚
โ”‚ QQuery 7     โ”‚    86.63 ms โ”‚    86.83 ms โ”‚     no change โ”‚
โ”‚ QQuery 8     โ”‚  1840.94 ms โ”‚  1836.42 ms โ”‚     no change โ”‚
โ”‚ QQuery 9     โ”‚  2142.35 ms โ”‚  2141.25 ms โ”‚     no change โ”‚
โ”‚ QQuery 10    โ”‚   562.25 ms โ”‚   551.77 ms โ”‚     no change โ”‚
โ”‚ QQuery 11    โ”‚   612.86 ms โ”‚   647.94 ms โ”‚  1.06x slower โ”‚
โ”‚ QQuery 12    โ”‚  1692.83 ms โ”‚  1651.23 ms โ”‚     no change โ”‚
โ”‚ QQuery 13    โ”‚  2755.19 ms โ”‚  2699.53 ms โ”‚     no change โ”‚
โ”‚ QQuery 14    โ”‚  1571.17 ms โ”‚  1620.12 ms โ”‚     no change โ”‚
โ”‚ QQuery 15    โ”‚  1619.18 ms โ”‚  1649.79 ms โ”‚     no change โ”‚
โ”‚ QQuery 16    โ”‚  3235.65 ms โ”‚  3235.25 ms โ”‚     no change โ”‚
โ”‚ QQuery 17    โ”‚  2820.07 ms โ”‚  2857.36 ms โ”‚     no change โ”‚
โ”‚ QQuery 18    โ”‚  6210.01 ms โ”‚  5920.66 ms โ”‚     no change โ”‚
โ”‚ QQuery 19    โ”‚   159.65 ms โ”‚   158.77 ms โ”‚     no change โ”‚
โ”‚ QQuery 20    โ”‚  2013.41 ms โ”‚  1929.52 ms โ”‚     no change โ”‚
โ”‚ QQuery 21    โ”‚  2378.85 ms โ”‚  2307.42 ms โ”‚     no change โ”‚
โ”‚ QQuery 22    โ”‚  4003.49 ms โ”‚  4006.98 ms โ”‚     no change โ”‚
โ”‚ QQuery 23    โ”‚ 15582.81 ms โ”‚ 15369.75 ms โ”‚     no change โ”‚
โ”‚ QQuery 24    โ”‚   911.63 ms โ”‚   875.75 ms โ”‚     no change โ”‚
โ”‚ QQuery 25    โ”‚   749.19 ms โ”‚   748.95 ms โ”‚     no change โ”‚
โ”‚ QQuery 26    โ”‚  1002.11 ms โ”‚   990.34 ms โ”‚     no change โ”‚
โ”‚ QQuery 27    โ”‚  2852.13 ms โ”‚  2868.56 ms โ”‚     no change โ”‚
โ”‚ QQuery 28    โ”‚ 22829.31 ms โ”‚ 22958.81 ms โ”‚     no change โ”‚
โ”‚ QQuery 29    โ”‚  1192.45 ms โ”‚  1191.21 ms โ”‚     no change โ”‚
โ”‚ QQuery 30    โ”‚  1658.09 ms โ”‚  1697.88 ms โ”‚     no change โ”‚
โ”‚ QQuery 31    โ”‚  1727.92 ms โ”‚  1733.49 ms โ”‚     no change โ”‚
โ”‚ QQuery 32    โ”‚  5707.58 ms โ”‚  5705.04 ms โ”‚     no change โ”‚
โ”‚ QQuery 33    โ”‚  6534.26 ms โ”‚  6312.33 ms โ”‚     no change โ”‚
โ”‚ QQuery 34    โ”‚  6814.26 ms โ”‚  7162.10 ms โ”‚  1.05x slower โ”‚
โ”‚ QQuery 35    โ”‚  2301.72 ms โ”‚  2423.41 ms โ”‚  1.05x slower โ”‚
โ”‚ QQuery 36    โ”‚   168.31 ms โ”‚   162.38 ms โ”‚     no change โ”‚
โ”‚ QQuery 37    โ”‚    88.48 ms โ”‚    87.41 ms โ”‚     no change โ”‚
โ”‚ QQuery 38    โ”‚   178.01 ms โ”‚   175.14 ms โ”‚     no change โ”‚
โ”‚ QQuery 39    โ”‚   281.96 ms โ”‚   271.88 ms โ”‚     no change โ”‚
โ”‚ QQuery 40    โ”‚    76.88 ms โ”‚    74.45 ms โ”‚     no change โ”‚
โ”‚ QQuery 41    โ”‚    68.88 ms โ”‚    72.43 ms โ”‚  1.05x slower โ”‚
โ”‚ QQuery 42    โ”‚    63.90 ms โ”‚    68.55 ms โ”‚  1.07x slower โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ             โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 107560.26ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 107441.36ms โ”‚
โ”‚ Average Time (baseline) โ”‚   2501.40ms โ”‚
โ”‚ Average Time (branch)   โ”‚   2498.64ms โ”‚
โ”‚ Queries Faster          โ”‚           2 โ”‚
โ”‚ Queries Slower          โ”‚           6 โ”‚
โ”‚ Queries with No Change  โ”‚          35 โ”‚
โ”‚ Queries with Failure    โ”‚           0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
--------------------
Benchmark tpch_mem_sf1.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ  baseline โ”ƒ    branch โ”ƒ       Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 1     โ”‚ 220.77 ms โ”‚ 237.23 ms โ”‚ 1.07x slower โ”‚
โ”‚ QQuery 2     โ”‚  40.18 ms โ”‚  42.72 ms โ”‚ 1.06x slower โ”‚
โ”‚ QQuery 3     โ”‚  55.84 ms โ”‚  71.40 ms โ”‚ 1.28x slower โ”‚
โ”‚ QQuery 4     โ”‚  35.93 ms โ”‚  40.89 ms โ”‚ 1.14x slower โ”‚
โ”‚ QQuery 5     โ”‚  92.56 ms โ”‚ 117.69 ms โ”‚ 1.27x slower โ”‚
โ”‚ QQuery 6     โ”‚  21.60 ms โ”‚  26.50 ms โ”‚ 1.23x slower โ”‚
โ”‚ QQuery 7     โ”‚ 180.65 ms โ”‚ 291.03 ms โ”‚ 1.61x slower โ”‚
โ”‚ QQuery 8     โ”‚  39.94 ms โ”‚  44.46 ms โ”‚ 1.11x slower โ”‚
โ”‚ QQuery 9     โ”‚ 118.20 ms โ”‚ 162.73 ms โ”‚ 1.38x slower โ”‚
โ”‚ QQuery 10    โ”‚  78.63 ms โ”‚ 117.56 ms โ”‚ 1.50x slower โ”‚
โ”‚ QQuery 11    โ”‚  17.29 ms โ”‚  19.05 ms โ”‚ 1.10x slower โ”‚
โ”‚ QQuery 12    โ”‚  89.51 ms โ”‚ 108.56 ms โ”‚ 1.21x slower โ”‚
โ”‚ QQuery 13    โ”‚  59.26 ms โ”‚  66.55 ms โ”‚ 1.12x slower โ”‚
โ”‚ QQuery 14    โ”‚  17.51 ms โ”‚  21.44 ms โ”‚ 1.22x slower โ”‚
โ”‚ QQuery 15    โ”‚  34.14 ms โ”‚  40.69 ms โ”‚ 1.19x slower โ”‚
โ”‚ QQuery 16    โ”‚  39.74 ms โ”‚  39.22 ms โ”‚    no change โ”‚
โ”‚ QQuery 17    โ”‚ 146.47 ms โ”‚ 145.61 ms โ”‚    no change โ”‚
โ”‚ QQuery 18    โ”‚ 430.93 ms โ”‚ 423.05 ms โ”‚    no change โ”‚
โ”‚ QQuery 19    โ”‚  52.45 ms โ”‚  53.23 ms โ”‚    no change โ”‚
โ”‚ QQuery 20    โ”‚  74.50 ms โ”‚  79.03 ms โ”‚ 1.06x slower โ”‚
โ”‚ QQuery 21    โ”‚ 286.87 ms โ”‚ 307.48 ms โ”‚ 1.07x slower โ”‚
โ”‚ QQuery 22    โ”‚  42.56 ms โ”‚  42.50 ms โ”‚    no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ           โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 2175.53ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 2498.61ms โ”‚
โ”‚ Average Time (baseline) โ”‚   98.89ms โ”‚
โ”‚ Average Time (branch)   โ”‚  113.57ms โ”‚
โ”‚ Queries Faster          โ”‚         0 โ”‚
โ”‚ Queries Slower          โ”‚        17 โ”‚
โ”‚ Queries with No Change  โ”‚         5 โ”‚
โ”‚ Queries with Failure    โ”‚         0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

pepijnve avatar Jun 10 '25 13:06 pepijnve

Googling a bit I'm starting to get the impression that I shouldn't be thinking Tokio tasks are as lightweight as coroutines in some other ecosystems.

pepijnve avatar Jun 10 '25 13:06 pepijnve

https://github.com/apache/datafusion/pull/16357 might be relevant here. I was testing on an old system with spinning disks. Going to retest with more iterations and this change to make sure I'm not measuring noise.

pepijnve avatar Jun 10 '25 14:06 pepijnve

@alamb @Dandandan I started a benchmark run with 50 iterations and the TPCH benchmark change that eliminates local filesystem access yesterday evening. Checked the results this morning... ๐Ÿ˜Œ Would be great if someone else could confirm.

If you would like to reproduce this was baseline b41acf3c43ff259a22f9ecc2abdb17db58297fd8 vs branch 91f2d75ced0ebd17e20006c9ad0cd75403261e3b with the following patch applied to bench.sh https://gist.github.com/pepijnve/c5498e4762730bd68a2f6b188ed20f45

Long story short, in my environment at least, the 5 iterations setting the bench.sh script uses is just too little. Especially in the first 5-10 iterations I see way too much variability in the runs for it to be useful. It stabilizes later on.

I wonder if it would be a good idea to modify the benchmark code to always do a number of warmup iterations before we actually start measuring.

Comparing baseline and branch
--------------------
Benchmark clickbench_extended.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ    baseline โ”ƒ      branch โ”ƒ    Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 0     โ”‚  2841.73 ms โ”‚  2868.70 ms โ”‚ no change โ”‚
โ”‚ QQuery 1     โ”‚  1254.60 ms โ”‚  1259.50 ms โ”‚ no change โ”‚
โ”‚ QQuery 2     โ”‚  2444.16 ms โ”‚  2417.82 ms โ”‚ no change โ”‚
โ”‚ QQuery 3     โ”‚  1075.16 ms โ”‚  1046.80 ms โ”‚ no change โ”‚
โ”‚ QQuery 4     โ”‚  2759.06 ms โ”‚  2800.21 ms โ”‚ no change โ”‚
โ”‚ QQuery 5     โ”‚ 32991.04 ms โ”‚ 33376.96 ms โ”‚ no change โ”‚
โ”‚ QQuery 6     โ”‚  3591.27 ms โ”‚  3577.60 ms โ”‚ no change โ”‚
โ”‚ QQuery 7     โ”‚  4174.48 ms โ”‚  4260.27 ms โ”‚ no change โ”‚
โ”‚ QQuery 8     โ”‚  1562.72 ms โ”‚  1541.47 ms โ”‚ no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ            โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 52694.22ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 53149.33ms โ”‚
โ”‚ Average Time (baseline) โ”‚  5854.91ms โ”‚
โ”‚ Average Time (branch)   โ”‚  5905.48ms โ”‚
โ”‚ Queries Faster          โ”‚          0 โ”‚
โ”‚ Queries Slower          โ”‚          0 โ”‚
โ”‚ Queries with No Change  โ”‚          9 โ”‚
โ”‚ Queries with Failure    โ”‚          0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
--------------------
Benchmark clickbench_partitioned.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ    baseline โ”ƒ      branch โ”ƒ        Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 0     โ”‚    28.47 ms โ”‚    28.17 ms โ”‚     no change โ”‚
โ”‚ QQuery 1     โ”‚    66.76 ms โ”‚    68.23 ms โ”‚     no change โ”‚
โ”‚ QQuery 2     โ”‚   158.80 ms โ”‚   158.78 ms โ”‚     no change โ”‚
โ”‚ QQuery 3     โ”‚   156.06 ms โ”‚   147.87 ms โ”‚ +1.06x faster โ”‚
โ”‚ QQuery 4     โ”‚  1169.02 ms โ”‚  1170.60 ms โ”‚     no change โ”‚
โ”‚ QQuery 5     โ”‚  1498.30 ms โ”‚  1546.96 ms โ”‚     no change โ”‚
โ”‚ QQuery 6     โ”‚    41.48 ms โ”‚    41.42 ms โ”‚     no change โ”‚
โ”‚ QQuery 7     โ”‚    80.51 ms โ”‚    79.37 ms โ”‚     no change โ”‚
โ”‚ QQuery 8     โ”‚  1831.67 ms โ”‚  1817.91 ms โ”‚     no change โ”‚
โ”‚ QQuery 9     โ”‚  2152.33 ms โ”‚  2190.01 ms โ”‚     no change โ”‚
โ”‚ QQuery 10    โ”‚   531.87 ms โ”‚   545.53 ms โ”‚     no change โ”‚
โ”‚ QQuery 11    โ”‚   592.01 ms โ”‚   603.65 ms โ”‚     no change โ”‚
โ”‚ QQuery 12    โ”‚  1651.35 ms โ”‚  1679.20 ms โ”‚     no change โ”‚
โ”‚ QQuery 13    โ”‚  2783.70 ms โ”‚  2847.50 ms โ”‚     no change โ”‚
โ”‚ QQuery 14    โ”‚  1589.41 ms โ”‚  1597.90 ms โ”‚     no change โ”‚
โ”‚ QQuery 15    โ”‚  1620.37 ms โ”‚  1629.00 ms โ”‚     no change โ”‚
โ”‚ QQuery 16    โ”‚  3332.63 ms โ”‚  3354.37 ms โ”‚     no change โ”‚
โ”‚ QQuery 17    โ”‚  2864.46 ms โ”‚  2850.38 ms โ”‚     no change โ”‚
โ”‚ QQuery 18    โ”‚  6226.51 ms โ”‚  5993.04 ms โ”‚     no change โ”‚
โ”‚ QQuery 19    โ”‚   138.61 ms โ”‚   140.21 ms โ”‚     no change โ”‚
โ”‚ QQuery 20    โ”‚  1892.60 ms โ”‚  1910.23 ms โ”‚     no change โ”‚
โ”‚ QQuery 21    โ”‚  2292.32 ms โ”‚  2325.51 ms โ”‚     no change โ”‚
โ”‚ QQuery 22    โ”‚  3944.51 ms โ”‚  4020.94 ms โ”‚     no change โ”‚
โ”‚ QQuery 23    โ”‚ 15570.73 ms โ”‚ 15691.75 ms โ”‚     no change โ”‚
โ”‚ QQuery 24    โ”‚   862.29 ms โ”‚   875.83 ms โ”‚     no change โ”‚
โ”‚ QQuery 25    โ”‚   727.49 ms โ”‚   721.70 ms โ”‚     no change โ”‚
โ”‚ QQuery 26    โ”‚   975.89 ms โ”‚   986.73 ms โ”‚     no change โ”‚
โ”‚ QQuery 27    โ”‚  2697.31 ms โ”‚  2769.85 ms โ”‚     no change โ”‚
โ”‚ QQuery 28    โ”‚ 22911.95 ms โ”‚ 22695.04 ms โ”‚     no change โ”‚
โ”‚ QQuery 29    โ”‚  1172.68 ms โ”‚  1173.51 ms โ”‚     no change โ”‚
โ”‚ QQuery 30    โ”‚  1634.30 ms โ”‚  1637.76 ms โ”‚     no change โ”‚
โ”‚ QQuery 31    โ”‚  1718.66 ms โ”‚  1717.93 ms โ”‚     no change โ”‚
โ”‚ QQuery 32    โ”‚  5527.03 ms โ”‚  5810.12 ms โ”‚  1.05x slower โ”‚
โ”‚ QQuery 33    โ”‚  6763.33 ms โ”‚  6654.45 ms โ”‚     no change โ”‚
โ”‚ QQuery 34    โ”‚  7016.63 ms โ”‚  6971.15 ms โ”‚     no change โ”‚
โ”‚ QQuery 35    โ”‚  2308.46 ms โ”‚  2308.33 ms โ”‚     no change โ”‚
โ”‚ QQuery 36    โ”‚   167.09 ms โ”‚   170.41 ms โ”‚     no change โ”‚
โ”‚ QQuery 37    โ”‚    86.96 ms โ”‚    87.12 ms โ”‚     no change โ”‚
โ”‚ QQuery 38    โ”‚   167.31 ms โ”‚   172.42 ms โ”‚     no change โ”‚
โ”‚ QQuery 39    โ”‚   268.56 ms โ”‚   269.12 ms โ”‚     no change โ”‚
โ”‚ QQuery 40    โ”‚    75.72 ms โ”‚    76.78 ms โ”‚     no change โ”‚
โ”‚ QQuery 41    โ”‚    73.17 ms โ”‚    69.69 ms โ”‚     no change โ”‚
โ”‚ QQuery 42    โ”‚    61.68 ms โ”‚    59.77 ms โ”‚     no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ             โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 107430.99ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 107666.23ms โ”‚
โ”‚ Average Time (baseline) โ”‚   2498.40ms โ”‚
โ”‚ Average Time (branch)   โ”‚   2503.87ms โ”‚
โ”‚ Queries Faster          โ”‚           1 โ”‚
โ”‚ Queries Slower          โ”‚           1 โ”‚
โ”‚ Queries with No Change  โ”‚          41 โ”‚
โ”‚ Queries with Failure    โ”‚           0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
--------------------
Benchmark tpch_mem_sf1.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ  baseline โ”ƒ    branch โ”ƒ        Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 1     โ”‚ 253.93 ms โ”‚ 213.68 ms โ”‚ +1.19x faster โ”‚
โ”‚ QQuery 2     โ”‚  41.31 ms โ”‚  35.04 ms โ”‚ +1.18x faster โ”‚
โ”‚ QQuery 3     โ”‚  70.88 ms โ”‚  56.32 ms โ”‚ +1.26x faster โ”‚
โ”‚ QQuery 4     โ”‚  39.62 ms โ”‚  35.32 ms โ”‚ +1.12x faster โ”‚
โ”‚ QQuery 5     โ”‚ 114.89 ms โ”‚  89.39 ms โ”‚ +1.29x faster โ”‚
โ”‚ QQuery 6     โ”‚  26.55 ms โ”‚  20.38 ms โ”‚ +1.30x faster โ”‚
โ”‚ QQuery 7     โ”‚ 190.78 ms โ”‚ 175.94 ms โ”‚ +1.08x faster โ”‚
โ”‚ QQuery 8     โ”‚  39.49 ms โ”‚  39.91 ms โ”‚     no change โ”‚
โ”‚ QQuery 9     โ”‚ 113.43 ms โ”‚ 113.57 ms โ”‚     no change โ”‚
โ”‚ QQuery 10    โ”‚  82.14 ms โ”‚  78.50 ms โ”‚     no change โ”‚
โ”‚ QQuery 11    โ”‚  18.26 ms โ”‚  17.51 ms โ”‚     no change โ”‚
โ”‚ QQuery 12    โ”‚  90.59 ms โ”‚  93.53 ms โ”‚     no change โ”‚
โ”‚ QQuery 13    โ”‚  55.18 ms โ”‚  51.19 ms โ”‚ +1.08x faster โ”‚
โ”‚ QQuery 14    โ”‚  17.07 ms โ”‚  15.67 ms โ”‚ +1.09x faster โ”‚
โ”‚ QQuery 15    โ”‚  35.12 ms โ”‚  33.25 ms โ”‚ +1.06x faster โ”‚
โ”‚ QQuery 16    โ”‚  38.82 ms โ”‚  37.71 ms โ”‚     no change โ”‚
โ”‚ QQuery 17    โ”‚ 143.93 ms โ”‚ 142.22 ms โ”‚     no change โ”‚
โ”‚ QQuery 18    โ”‚ 417.37 ms โ”‚ 442.36 ms โ”‚  1.06x slower โ”‚
โ”‚ QQuery 19    โ”‚  43.16 ms โ”‚  43.78 ms โ”‚     no change โ”‚
โ”‚ QQuery 20    โ”‚  71.70 ms โ”‚  72.96 ms โ”‚     no change โ”‚
โ”‚ QQuery 21    โ”‚ 297.31 ms โ”‚ 296.28 ms โ”‚     no change โ”‚
โ”‚ QQuery 22    โ”‚  41.19 ms โ”‚  41.35 ms โ”‚     no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ           โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 2242.73ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 2145.86ms โ”‚
โ”‚ Average Time (baseline) โ”‚  101.94ms โ”‚
โ”‚ Average Time (branch)   โ”‚   97.54ms โ”‚
โ”‚ Queries Faster          โ”‚        10 โ”‚
โ”‚ Queries Slower          โ”‚         1 โ”‚
โ”‚ Queries with No Change  โ”‚        11 โ”‚
โ”‚ Queries with Failure    โ”‚         0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

pepijnve avatar Jun 11 '25 09:06 pepijnve

I did a second identical run because those result seemed just too good to be true to me. This is much closer to what I was expecting: more or less status quo. That does mean I'm back to getting wildly differing results which I can't really explain. This is on an old repurposed PowerEdge r730 running in a Ubuntu 24.04 VM on esxi. It's the only VM on the machine so can't be noisy neighbors. Maybe the hardware is just starting to get flaky.

Fastest time comparison

Comparing baseline and branch
--------------------
Benchmark clickbench_extended.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ    baseline โ”ƒ      branch โ”ƒ    Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 0     โ”‚  2802.58 ms โ”‚  2835.58 ms โ”‚ no change โ”‚
โ”‚ QQuery 1     โ”‚  1267.40 ms โ”‚  1254.16 ms โ”‚ no change โ”‚
โ”‚ QQuery 2     โ”‚  2425.18 ms โ”‚  2431.64 ms โ”‚ no change โ”‚
โ”‚ QQuery 3     โ”‚  1049.51 ms โ”‚  1096.84 ms โ”‚ no change โ”‚
โ”‚ QQuery 4     โ”‚  2799.22 ms โ”‚  2812.48 ms โ”‚ no change โ”‚
โ”‚ QQuery 5     โ”‚ 33146.06 ms โ”‚ 32438.14 ms โ”‚ no change โ”‚
โ”‚ QQuery 6     โ”‚  3581.51 ms โ”‚  3608.01 ms โ”‚ no change โ”‚
โ”‚ QQuery 7     โ”‚  4244.94 ms โ”‚  4316.87 ms โ”‚ no change โ”‚
โ”‚ QQuery 8     โ”‚  1549.39 ms โ”‚  1566.28 ms โ”‚ no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ            โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 52865.81ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 52360.00ms โ”‚
โ”‚ Average Time (baseline) โ”‚  5873.98ms โ”‚
โ”‚ Average Time (branch)   โ”‚  5817.78ms โ”‚
โ”‚ Queries Faster          โ”‚          0 โ”‚
โ”‚ Queries Slower          โ”‚          0 โ”‚
โ”‚ Queries with No Change  โ”‚          9 โ”‚
โ”‚ Queries with Failure    โ”‚          0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
--------------------
Benchmark clickbench_partitioned.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ    baseline โ”ƒ      branch โ”ƒ        Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 0     โ”‚    28.51 ms โ”‚    28.65 ms โ”‚     no change โ”‚
โ”‚ QQuery 1     โ”‚    66.92 ms โ”‚    67.47 ms โ”‚     no change โ”‚
โ”‚ QQuery 2     โ”‚   157.60 ms โ”‚   158.95 ms โ”‚     no change โ”‚
โ”‚ QQuery 3     โ”‚   149.93 ms โ”‚   149.32 ms โ”‚     no change โ”‚
โ”‚ QQuery 4     โ”‚  1168.56 ms โ”‚  1192.96 ms โ”‚     no change โ”‚
โ”‚ QQuery 5     โ”‚  1513.84 ms โ”‚  1522.57 ms โ”‚     no change โ”‚
โ”‚ QQuery 6     โ”‚    40.48 ms โ”‚    41.31 ms โ”‚     no change โ”‚
โ”‚ QQuery 7     โ”‚    82.32 ms โ”‚    77.97 ms โ”‚ +1.06x faster โ”‚
โ”‚ QQuery 8     โ”‚  1821.87 ms โ”‚  1835.17 ms โ”‚     no change โ”‚
โ”‚ QQuery 9     โ”‚  2179.03 ms โ”‚  2154.90 ms โ”‚     no change โ”‚
โ”‚ QQuery 10    โ”‚   535.16 ms โ”‚   531.71 ms โ”‚     no change โ”‚
โ”‚ QQuery 11    โ”‚   604.14 ms โ”‚   595.35 ms โ”‚     no change โ”‚
โ”‚ QQuery 12    โ”‚  1697.18 ms โ”‚  1636.90 ms โ”‚     no change โ”‚
โ”‚ QQuery 13    โ”‚  2807.76 ms โ”‚  2802.55 ms โ”‚     no change โ”‚
โ”‚ QQuery 14    โ”‚  1569.36 ms โ”‚  1613.79 ms โ”‚     no change โ”‚
โ”‚ QQuery 15    โ”‚  1627.10 ms โ”‚  1627.11 ms โ”‚     no change โ”‚
โ”‚ QQuery 16    โ”‚  3269.69 ms โ”‚  3315.99 ms โ”‚     no change โ”‚
โ”‚ QQuery 17    โ”‚  2856.85 ms โ”‚  2846.55 ms โ”‚     no change โ”‚
โ”‚ QQuery 18    โ”‚  6091.55 ms โ”‚  5958.27 ms โ”‚     no change โ”‚
โ”‚ QQuery 19    โ”‚   140.87 ms โ”‚   138.93 ms โ”‚     no change โ”‚
โ”‚ QQuery 20    โ”‚  1887.14 ms โ”‚  1893.19 ms โ”‚     no change โ”‚
โ”‚ QQuery 21    โ”‚  2269.57 ms โ”‚  2281.36 ms โ”‚     no change โ”‚
โ”‚ QQuery 22    โ”‚  3931.31 ms โ”‚  3954.27 ms โ”‚     no change โ”‚
โ”‚ QQuery 23    โ”‚ 15449.02 ms โ”‚ 15582.96 ms โ”‚     no change โ”‚
โ”‚ QQuery 24    โ”‚   854.06 ms โ”‚   869.83 ms โ”‚     no change โ”‚
โ”‚ QQuery 25    โ”‚   737.82 ms โ”‚   728.33 ms โ”‚     no change โ”‚
โ”‚ QQuery 26    โ”‚   958.68 ms โ”‚   991.79 ms โ”‚     no change โ”‚
โ”‚ QQuery 27    โ”‚  2704.35 ms โ”‚  2695.40 ms โ”‚     no change โ”‚
โ”‚ QQuery 28    โ”‚ 22518.40 ms โ”‚ 22488.05 ms โ”‚     no change โ”‚
โ”‚ QQuery 29    โ”‚  1172.40 ms โ”‚  1178.97 ms โ”‚     no change โ”‚
โ”‚ QQuery 30    โ”‚  1647.91 ms โ”‚  1643.26 ms โ”‚     no change โ”‚
โ”‚ QQuery 31    โ”‚  1716.99 ms โ”‚  1726.10 ms โ”‚     no change โ”‚
โ”‚ QQuery 32    โ”‚  5534.67 ms โ”‚  5685.19 ms โ”‚     no change โ”‚
โ”‚ QQuery 33    โ”‚  6824.90 ms โ”‚  6887.88 ms โ”‚     no change โ”‚
โ”‚ QQuery 34    โ”‚  7005.46 ms โ”‚  7040.82 ms โ”‚     no change โ”‚
โ”‚ QQuery 35    โ”‚  2293.87 ms โ”‚  2313.10 ms โ”‚     no change โ”‚
โ”‚ QQuery 36    โ”‚   165.05 ms โ”‚   163.79 ms โ”‚     no change โ”‚
โ”‚ QQuery 37    โ”‚    87.79 ms โ”‚    84.71 ms โ”‚     no change โ”‚
โ”‚ QQuery 38    โ”‚   165.88 ms โ”‚   171.22 ms โ”‚     no change โ”‚
โ”‚ QQuery 39    โ”‚   272.32 ms โ”‚   275.14 ms โ”‚     no change โ”‚
โ”‚ QQuery 40    โ”‚    77.26 ms โ”‚    78.16 ms โ”‚     no change โ”‚
โ”‚ QQuery 41    โ”‚    67.84 ms โ”‚    67.96 ms โ”‚     no change โ”‚
โ”‚ QQuery 42    โ”‚    61.56 ms โ”‚    60.86 ms โ”‚     no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ             โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 106812.96ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 107158.75ms โ”‚
โ”‚ Average Time (baseline) โ”‚   2484.02ms โ”‚
โ”‚ Average Time (branch)   โ”‚   2492.06ms โ”‚
โ”‚ Queries Faster          โ”‚           1 โ”‚
โ”‚ Queries Slower          โ”‚           0 โ”‚
โ”‚ Queries with No Change  โ”‚          42 โ”‚
โ”‚ Queries with Failure    โ”‚           0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
--------------------
Benchmark tpch_mem_sf1.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ  baseline โ”ƒ    branch โ”ƒ       Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 1     โ”‚ 213.35 ms โ”‚ 202.86 ms โ”‚    no change โ”‚
โ”‚ QQuery 2     โ”‚  35.88 ms โ”‚  36.49 ms โ”‚    no change โ”‚
โ”‚ QQuery 3     โ”‚  56.60 ms โ”‚  54.00 ms โ”‚    no change โ”‚
โ”‚ QQuery 4     โ”‚  35.63 ms โ”‚  35.54 ms โ”‚    no change โ”‚
โ”‚ QQuery 5     โ”‚  90.15 ms โ”‚  87.55 ms โ”‚    no change โ”‚
โ”‚ QQuery 6     โ”‚  20.33 ms โ”‚  20.00 ms โ”‚    no change โ”‚
โ”‚ QQuery 7     โ”‚ 192.07 ms โ”‚ 185.72 ms โ”‚    no change โ”‚
โ”‚ QQuery 8     โ”‚  38.70 ms โ”‚  39.42 ms โ”‚    no change โ”‚
โ”‚ QQuery 9     โ”‚ 115.00 ms โ”‚ 114.61 ms โ”‚    no change โ”‚
โ”‚ QQuery 10    โ”‚  77.92 ms โ”‚  79.01 ms โ”‚    no change โ”‚
โ”‚ QQuery 11    โ”‚  17.05 ms โ”‚  17.88 ms โ”‚    no change โ”‚
โ”‚ QQuery 12    โ”‚  91.61 ms โ”‚  92.90 ms โ”‚    no change โ”‚
โ”‚ QQuery 13    โ”‚  54.55 ms โ”‚  52.40 ms โ”‚    no change โ”‚
โ”‚ QQuery 14    โ”‚  15.72 ms โ”‚  16.13 ms โ”‚    no change โ”‚
โ”‚ QQuery 15    โ”‚  33.06 ms โ”‚  32.31 ms โ”‚    no change โ”‚
โ”‚ QQuery 16    โ”‚  35.86 ms โ”‚  38.55 ms โ”‚ 1.07x slower โ”‚
โ”‚ QQuery 17    โ”‚ 147.53 ms โ”‚ 142.63 ms โ”‚    no change โ”‚
โ”‚ QQuery 18    โ”‚ 461.84 ms โ”‚ 468.67 ms โ”‚    no change โ”‚
โ”‚ QQuery 19    โ”‚  43.45 ms โ”‚  43.48 ms โ”‚    no change โ”‚
โ”‚ QQuery 20    โ”‚  71.49 ms โ”‚  73.57 ms โ”‚    no change โ”‚
โ”‚ QQuery 21    โ”‚ 298.95 ms โ”‚ 284.75 ms โ”‚    no change โ”‚
โ”‚ QQuery 22    โ”‚  41.49 ms โ”‚  41.23 ms โ”‚    no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ           โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 2188.25ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 2159.69ms โ”‚
โ”‚ Average Time (baseline) โ”‚   99.47ms โ”‚
โ”‚ Average Time (branch)   โ”‚   98.17ms โ”‚
โ”‚ Queries Faster          โ”‚         0 โ”‚
โ”‚ Queries Slower          โ”‚         1 โ”‚
โ”‚ Queries with No Change  โ”‚        21 โ”‚
โ”‚ Queries with Failure    โ”‚         0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Average time comparison

Comparing baseline and branch
--------------------
Benchmark clickbench_extended.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ                                  baseline โ”ƒ                                    branch โ”ƒ    Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 0     โ”‚    2802.58 / 2963.09 ยฑ251.63 / 4691.94 ms โ”‚     2835.58 / 2934.12 ยฑ47.94 / 3064.52 ms โ”‚ no change โ”‚
โ”‚ QQuery 1     โ”‚    1267.40 / 1414.57 ยฑ262.53 / 2614.65 ms โ”‚    1254.16 / 1354.54 ยฑ131.10 / 1709.84 ms โ”‚ no change โ”‚
โ”‚ QQuery 2     โ”‚    2425.18 / 2631.18 ยฑ177.69 / 3527.31 ms โ”‚    2431.64 / 2659.94 ยฑ160.09 / 3378.51 ms โ”‚ no change โ”‚
โ”‚ QQuery 3     โ”‚    1049.51 / 1198.24 ยฑ291.07 / 3179.01 ms โ”‚     1096.84 / 1214.67 ยฑ92.19 / 1556.04 ms โ”‚ no change โ”‚
โ”‚ QQuery 4     โ”‚    2799.22 / 3020.58 ยฑ678.96 / 7729.45 ms โ”‚     2812.48 / 2930.29 ยฑ68.70 / 3063.49 ms โ”‚ no change โ”‚
โ”‚ QQuery 5     โ”‚ 33146.06 / 34617.23 ยฑ911.91 / 37087.63 ms โ”‚ 32438.14 / 33904.73 ยฑ827.35 / 36644.43 ms โ”‚ no change โ”‚
โ”‚ QQuery 6     โ”‚  3581.51 / 3868.17 ยฑ1263.59 / 12702.02 ms โ”‚    3608.01 / 3826.89 ยฑ666.62 / 8443.93 ms โ”‚ no change โ”‚
โ”‚ QQuery 7     โ”‚    4244.94 / 4507.18 ยฑ155.52 / 4910.67 ms โ”‚    4316.87 / 4619.75 ยฑ230.84 / 5297.05 ms โ”‚ no change โ”‚
โ”‚ QQuery 8     โ”‚    1549.39 / 1685.38 ยฑ166.38 / 2652.95 ms โ”‚     1566.28 / 1674.93 ยฑ87.68 / 2071.30 ms โ”‚ no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ            โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 55905.60ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 55119.86ms โ”‚
โ”‚ Average Time (baseline) โ”‚  6211.73ms โ”‚
โ”‚ Average Time (branch)   โ”‚  6124.43ms โ”‚
โ”‚ Queries Faster          โ”‚          0 โ”‚
โ”‚ Queries Slower          โ”‚          0 โ”‚
โ”‚ Queries with No Change  โ”‚          9 โ”‚
โ”‚ Queries with Failure    โ”‚          0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
--------------------
Benchmark clickbench_partitioned.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ                                   baseline โ”ƒ                                     branch โ”ƒ        Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 0     โ”‚             28.51 / 29.89 ยฑ1.27 / 36.56 ms โ”‚           28.65 / 31.36 ยฑ10.27 / 103.01 ms โ”‚     no change โ”‚
โ”‚ QQuery 1     โ”‚             66.92 / 70.21 ยฑ2.25 / 80.92 ms โ”‚            67.47 / 71.60 ยฑ6.13 / 112.58 ms โ”‚     no change โ”‚
โ”‚ QQuery 2     โ”‚          157.60 / 165.04 ยฑ4.49 / 182.03 ms โ”‚          158.95 / 165.73 ยฑ4.68 / 179.32 ms โ”‚     no change โ”‚
โ”‚ QQuery 3     โ”‚         149.93 / 174.33 ยฑ74.25 / 688.45 ms โ”‚         149.32 / 174.21 ยฑ36.04 / 407.10 ms โ”‚     no change โ”‚
โ”‚ QQuery 4     โ”‚      1168.56 / 1199.94 ยฑ16.32 / 1257.49 ms โ”‚      1192.96 / 1236.15 ยฑ38.04 / 1470.41 ms โ”‚     no change โ”‚
โ”‚ QQuery 5     โ”‚      1513.84 / 1633.65 ยฑ47.17 / 1790.47 ms โ”‚      1522.57 / 1644.26 ยฑ68.90 / 1955.04 ms โ”‚     no change โ”‚
โ”‚ QQuery 6     โ”‚             40.48 / 43.91 ยฑ5.54 / 81.38 ms โ”‚             41.31 / 44.17 ยฑ4.56 / 72.76 ms โ”‚     no change โ”‚
โ”‚ QQuery 7     โ”‚            82.32 / 86.93 ยฑ4.39 / 111.41 ms โ”‚             77.97 / 87.38 ยฑ3.57 / 95.62 ms โ”‚     no change โ”‚
โ”‚ QQuery 8     โ”‚      1821.87 / 1900.89 ยฑ45.92 / 2001.93 ms โ”‚      1835.17 / 1898.51 ยฑ39.20 / 1992.75 ms โ”‚     no change โ”‚
โ”‚ QQuery 9     โ”‚     2179.03 / 2339.45 ยฑ105.69 / 2647.09 ms โ”‚     2154.90 / 2369.20 ยฑ107.72 / 2644.63 ms โ”‚     no change โ”‚
โ”‚ QQuery 10    โ”‚         535.16 / 580.19 ยฑ26.31 / 693.60 ms โ”‚         531.71 / 571.51 ยฑ20.44 / 631.13 ms โ”‚     no change โ”‚
โ”‚ QQuery 11    โ”‚         604.14 / 643.68 ยฑ20.76 / 697.50 ms โ”‚         595.35 / 644.37 ยฑ20.77 / 684.46 ms โ”‚     no change โ”‚
โ”‚ QQuery 12    โ”‚      1697.18 / 1798.76 ยฑ62.88 / 1931.04 ms โ”‚      1636.90 / 1794.33 ยฑ65.68 / 1923.18 ms โ”‚     no change โ”‚
โ”‚ QQuery 13    โ”‚     2807.76 / 3041.73 ยฑ226.03 / 3915.84 ms โ”‚      2802.55 / 2950.12 ยฑ74.95 / 3140.34 ms โ”‚     no change โ”‚
โ”‚ QQuery 14    โ”‚      1569.36 / 1733.54 ยฑ95.18 / 1932.89 ms โ”‚      1613.79 / 1737.33 ยฑ67.77 / 1904.11 ms โ”‚     no change โ”‚
โ”‚ QQuery 15    โ”‚      1627.10 / 1695.71 ยฑ40.49 / 1826.53 ms โ”‚      1627.11 / 1688.73 ยฑ31.56 / 1769.50 ms โ”‚     no change โ”‚
โ”‚ QQuery 16    โ”‚     3269.69 / 3469.53 ยฑ102.04 / 3837.76 ms โ”‚      3315.99 / 3444.72 ยฑ64.53 / 3608.20 ms โ”‚     no change โ”‚
โ”‚ QQuery 17    โ”‚     2856.85 / 2980.43 ยฑ117.00 / 3357.01 ms โ”‚      2846.55 / 2926.42 ยฑ53.44 / 3145.16 ms โ”‚     no change โ”‚
โ”‚ QQuery 18    โ”‚     6091.55 / 6319.86 ยฑ258.78 / 7569.19 ms โ”‚     5958.27 / 6190.21 ยฑ189.22 / 7217.12 ms โ”‚     no change โ”‚
โ”‚ QQuery 19    โ”‚         140.87 / 155.08 ยฑ12.33 / 194.49 ms โ”‚          138.93 / 153.28 ยฑ7.48 / 181.61 ms โ”‚     no change โ”‚
โ”‚ QQuery 20    โ”‚     1887.14 / 2104.13 ยฑ982.87 / 8971.27 ms โ”‚      1893.19 / 1949.39 ยฑ31.69 / 2057.54 ms โ”‚ +1.08x faster โ”‚
โ”‚ QQuery 21    โ”‚      2269.57 / 2416.94 ยฑ83.76 / 2696.47 ms โ”‚     2281.36 / 2428.54 ยฑ127.15 / 2981.81 ms โ”‚     no change โ”‚
โ”‚ QQuery 22    โ”‚     3931.31 / 4209.84 ยฑ667.99 / 8797.19 ms โ”‚     3954.27 / 4107.10 ยฑ109.18 / 4530.78 ms โ”‚     no change โ”‚
โ”‚ QQuery 23    โ”‚ 15449.02 / 16371.15 ยฑ1439.53 / 26073.33 ms โ”‚ 15582.96 / 16394.40 ยฑ1437.94 / 23730.98 ms โ”‚     no change โ”‚
โ”‚ QQuery 24    โ”‚        854.06 / 924.57 ยฑ33.87 / 1063.17 ms โ”‚        869.83 / 930.07 ยฑ38.06 / 1040.90 ms โ”‚     no change โ”‚
โ”‚ QQuery 25    โ”‚         737.82 / 792.69 ยฑ38.67 / 920.59 ms โ”‚         728.33 / 796.36 ยฑ29.59 / 865.62 ms โ”‚     no change โ”‚
โ”‚ QQuery 26    โ”‚       958.68 / 1057.55 ยฑ48.26 / 1142.72 ms โ”‚       991.79 / 1050.74 ยฑ38.57 / 1167.79 ms โ”‚     no change โ”‚
โ”‚ QQuery 27    โ”‚     2704.35 / 2935.20 ยฑ175.93 / 3555.23 ms โ”‚      2695.40 / 2879.40 ยฑ72.44 / 3031.48 ms โ”‚     no change โ”‚
โ”‚ QQuery 28    โ”‚  22518.40 / 23686.71 ยฑ730.27 / 26633.39 ms โ”‚  22488.05 / 23441.76 ยฑ643.62 / 25994.75 ms โ”‚     no change โ”‚
โ”‚ QQuery 29    โ”‚      1172.40 / 1218.68 ยฑ75.71 / 1553.79 ms โ”‚      1178.97 / 1200.93 ยฑ25.99 / 1291.04 ms โ”‚     no change โ”‚
โ”‚ QQuery 30    โ”‚      1647.91 / 1722.73 ยฑ42.27 / 1813.07 ms โ”‚      1643.26 / 1773.18 ยฑ74.69 / 1979.09 ms โ”‚     no change โ”‚
โ”‚ QQuery 31    โ”‚      1716.99 / 1786.66 ยฑ43.92 / 1894.28 ms โ”‚      1726.10 / 1826.32 ยฑ50.00 / 1950.78 ms โ”‚     no change โ”‚
โ”‚ QQuery 32    โ”‚     5534.67 / 5820.60 ยฑ218.84 / 6989.35 ms โ”‚     5685.19 / 6000.02 ยฑ400.88 / 8277.02 ms โ”‚     no change โ”‚
โ”‚ QQuery 33    โ”‚     6824.90 / 7282.43 ยฑ295.14 / 8580.30 ms โ”‚     6887.88 / 7262.52 ยฑ211.72 / 8010.74 ms โ”‚     no change โ”‚
โ”‚ QQuery 34    โ”‚     7005.46 / 7299.12 ยฑ188.16 / 8074.88 ms โ”‚     7040.82 / 7296.55 ยฑ212.93 / 7995.89 ms โ”‚     no change โ”‚
โ”‚ QQuery 35    โ”‚      2293.87 / 2411.59 ยฑ90.03 / 2719.31 ms โ”‚      2313.10 / 2434.75 ยฑ78.32 / 2795.40 ms โ”‚     no change โ”‚
โ”‚ QQuery 36    โ”‚         165.05 / 186.82 ยฑ13.85 / 241.42 ms โ”‚          163.79 / 187.45 ยฑ9.87 / 219.34 ms โ”‚     no change โ”‚
โ”‚ QQuery 37    โ”‚            87.79 / 99.94 ยฑ8.32 / 132.57 ms โ”‚           84.71 / 101.09 ยฑ6.30 / 113.19 ms โ”‚     no change โ”‚
โ”‚ QQuery 38    โ”‚         165.88 / 186.07 ยฑ11.11 / 221.26 ms โ”‚          171.22 / 183.28 ยฑ8.06 / 215.94 ms โ”‚     no change โ”‚
โ”‚ QQuery 39    โ”‚         272.32 / 299.01 ยฑ17.41 / 386.48 ms โ”‚         275.14 / 303.11 ยฑ21.58 / 401.13 ms โ”‚     no change โ”‚
โ”‚ QQuery 40    โ”‚           77.26 / 94.63 ยฑ14.71 / 175.02 ms โ”‚            78.16 / 93.84 ยฑ8.34 / 117.48 ms โ”‚     no change โ”‚
โ”‚ QQuery 41    โ”‚            67.84 / 82.90 ยฑ6.63 / 102.68 ms โ”‚            67.96 / 81.97 ยฑ6.47 / 100.79 ms โ”‚     no change โ”‚
โ”‚ QQuery 42    โ”‚             61.56 / 69.46 ยฑ5.49 / 93.13 ms โ”‚             60.86 / 69.14 ยฑ5.02 / 86.23 ms โ”‚     no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ             โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 113122.12ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 112615.51ms โ”‚
โ”‚ Average Time (baseline) โ”‚   2630.75ms โ”‚
โ”‚ Average Time (branch)   โ”‚   2618.97ms โ”‚
โ”‚ Queries Faster          โ”‚           1 โ”‚
โ”‚ Queries Slower          โ”‚           0 โ”‚
โ”‚ Queries with No Change  โ”‚          42 โ”‚
โ”‚ Queries with Failure    โ”‚           0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
--------------------
Benchmark tpch_mem_sf1.json
--------------------
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Query        โ”ƒ                           baseline โ”ƒ                             branch โ”ƒ        Change โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ QQuery 1     โ”‚ 213.35 / 233.36 ยฑ39.56 / 505.52 ms โ”‚ 202.86 / 228.40 ยฑ21.40 / 372.45 ms โ”‚     no change โ”‚
โ”‚ QQuery 2     โ”‚     35.88 / 42.48 ยฑ5.34 / 73.45 ms โ”‚     36.49 / 39.68 ยฑ2.13 / 47.68 ms โ”‚ +1.07x faster โ”‚
โ”‚ QQuery 3     โ”‚     56.60 / 61.36 ยฑ2.47 / 67.91 ms โ”‚     54.00 / 61.27 ยฑ2.57 / 68.00 ms โ”‚     no change โ”‚
โ”‚ QQuery 4     โ”‚     35.63 / 39.46 ยฑ2.45 / 48.66 ms โ”‚     35.54 / 40.02 ยฑ2.62 / 46.40 ms โ”‚     no change โ”‚
โ”‚ QQuery 5     โ”‚    90.15 / 96.80 ยฑ5.15 / 114.22 ms โ”‚    87.55 / 96.56 ยฑ5.00 / 109.80 ms โ”‚     no change โ”‚
โ”‚ QQuery 6     โ”‚     20.33 / 21.73 ยฑ3.23 / 42.72 ms โ”‚     20.00 / 21.56 ยฑ2.78 / 34.98 ms โ”‚     no change โ”‚
โ”‚ QQuery 7     โ”‚ 192.07 / 217.62 ยฑ13.44 / 249.42 ms โ”‚ 185.72 / 210.55 ยฑ12.24 / 238.83 ms โ”‚     no change โ”‚
โ”‚ QQuery 8     โ”‚     38.70 / 42.91 ยฑ3.50 / 53.08 ms โ”‚     39.42 / 41.89 ยฑ2.39 / 52.00 ms โ”‚     no change โ”‚
โ”‚ QQuery 9     โ”‚  115.00 / 125.20 ยฑ5.39 / 138.33 ms โ”‚  114.61 / 121.78 ยฑ4.36 / 141.53 ms โ”‚     no change โ”‚
โ”‚ QQuery 10    โ”‚     77.92 / 86.79 ยฑ3.93 / 98.53 ms โ”‚     79.01 / 85.09 ยฑ3.83 / 95.31 ms โ”‚     no change โ”‚
โ”‚ QQuery 11    โ”‚     17.05 / 19.27 ยฑ1.34 / 23.65 ms โ”‚     17.88 / 20.25 ยฑ1.32 / 24.47 ms โ”‚  1.05x slower โ”‚
โ”‚ QQuery 12    โ”‚   91.61 / 103.12 ยฑ5.13 / 117.49 ms โ”‚   92.90 / 100.37 ยฑ4.42 / 107.90 ms โ”‚     no change โ”‚
โ”‚ QQuery 13    โ”‚     54.55 / 58.94 ยฑ2.66 / 66.49 ms โ”‚     52.40 / 57.94 ยฑ2.79 / 65.33 ms โ”‚     no change โ”‚
โ”‚ QQuery 14    โ”‚     15.72 / 17.86 ยฑ1.46 / 22.60 ms โ”‚     16.13 / 17.94 ยฑ1.84 / 24.08 ms โ”‚     no change โ”‚
โ”‚ QQuery 15    โ”‚     33.06 / 35.80 ยฑ2.17 / 48.02 ms โ”‚     32.31 / 36.61 ยฑ2.03 / 42.38 ms โ”‚     no change โ”‚
โ”‚ QQuery 16    โ”‚     35.86 / 42.12 ยฑ2.67 / 49.40 ms โ”‚     38.55 / 43.11 ยฑ2.40 / 47.93 ms โ”‚     no change โ”‚
โ”‚ QQuery 17    โ”‚  147.53 / 155.81 ยฑ4.46 / 170.19 ms โ”‚  142.63 / 150.01 ยฑ4.00 / 164.66 ms โ”‚     no change โ”‚
โ”‚ QQuery 18    โ”‚ 461.84 / 568.46 ยฑ29.48 / 622.19 ms โ”‚ 468.67 / 576.62 ยฑ33.56 / 657.56 ms โ”‚     no change โ”‚
โ”‚ QQuery 19    โ”‚    43.45 / 47.74 ยฑ8.66 / 103.29 ms โ”‚     43.48 / 46.56 ยฑ6.18 / 87.64 ms โ”‚     no change โ”‚
โ”‚ QQuery 20    โ”‚     71.49 / 84.43 ยฑ6.07 / 97.98 ms โ”‚     73.57 / 82.47 ยฑ4.76 / 94.35 ms โ”‚     no change โ”‚
โ”‚ QQuery 21    โ”‚ 298.95 / 327.64 ยฑ13.72 / 361.05 ms โ”‚ 284.75 / 319.27 ยฑ14.01 / 364.19 ms โ”‚     no change โ”‚
โ”‚ QQuery 22    โ”‚     41.49 / 47.43 ยฑ5.02 / 66.52 ms โ”‚     41.23 / 46.38 ยฑ4.95 / 62.58 ms โ”‚     no change โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ณโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”“
โ”ƒ Benchmark Summary       โ”ƒ           โ”ƒ
โ”กโ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ•‡โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”โ”ฉ
โ”‚ Total Time (baseline)   โ”‚ 2476.32ms โ”‚
โ”‚ Total Time (branch)     โ”‚ 2444.34ms โ”‚
โ”‚ Average Time (baseline) โ”‚  112.56ms โ”‚
โ”‚ Average Time (branch)   โ”‚  111.11ms โ”‚
โ”‚ Queries Faster          โ”‚         1 โ”‚
โ”‚ Queries Slower          โ”‚         1 โ”‚
โ”‚ Queries with No Change  โ”‚        20 โ”‚
โ”‚ Queries with Failure    โ”‚         0 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

pepijnve avatar Jun 11 '25 18:06 pepijnve

๐Ÿคฆโ€โ™‚๏ธ that's not very useful now is it. I need a better machine to test on

min/avg/max

1887.14 / 2104.13 ยฑ982.87 / 8971.27 ms โ”‚      1893.19 / 1949.39 ยฑ31.69 / 2057.54 ms

pepijnve avatar Jun 11 '25 18:06 pepijnve

Thank you for your contribution. Unfortunately, this pull request is stale because it has been open 60 days with no activity. Please remove the stale label or comment or this will be closed in 7 days.

github-actions[bot] avatar Aug 23 '25 02:08 github-actions[bot]