Skip to content

feat: cost-based join order enumeration - #24456

Draft
Dandandan wants to merge 20 commits into
apache:mainfrom
Dandandan:perf/join-order-enumeration
Draft

Dandandan wants to merge 20 commits into
apache:mainfrom
Dandandan:perf/join-order-enumeration

Conversation

@Dandandan

@Dandandan Dandandan commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

Depends on:

Currently DataFusion only reorders joins locally, limiting the performance of deeply nested joins.
We can add a pass that optimizes thw order to make them generally run faster, especially at scale.

See benchmarks below:

  • TPC-H improves 5-10% (overall, scaling with SF)
  • TPC-DS improves ~33% overall for hash join, -43% for sortmerge join.
  • The worst join plans benefit the most (up to 35.91x faster)

Benchmark results:

Details
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃     HEAD ┃ perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.66 ms │                    38.91 ms │     no change │
│ QQuery 2  │ 19.21 ms │                    16.72 ms │ +1.15x faster │
│ QQuery 3  │ 30.74 ms │                    28.56 ms │ +1.08x faster │
│ QQuery 4  │ 17.45 ms │                    17.57 ms │     no change │
│ QQuery 5  │ 37.79 ms │                    32.18 ms │ +1.17x faster │
│ QQuery 6  │ 16.01 ms │                    16.25 ms │     no change │
│ QQuery 7  │ 44.11 ms │                    33.88 ms │ +1.30x faster │
│ QQuery 8  │ 42.11 ms │                    39.96 ms │ +1.05x faster │
│ QQuery 9  │ 49.72 ms │                    47.12 ms │ +1.06x faster │
│ QQuery 10 │ 42.46 ms │                    42.81 ms │     no change │
│ QQuery 11 │ 13.45 ms │                    13.85 ms │     no change │
│ QQuery 12 │ 23.93 ms │                    23.12 ms │     no change │
│ QQuery 13 │ 32.19 ms │                    31.77 ms │     no change │
│ QQuery 14 │ 23.34 ms │                    24.45 ms │     no change │
│ QQuery 15 │ 31.07 ms │                    30.91 ms │     no change │
│ QQuery 16 │ 13.77 ms │                    13.75 ms │     no change │
│ QQuery 17 │ 71.90 ms │                    71.24 ms │     no change │
│ QQuery 18 │ 59.74 ms │                    59.19 ms │     no change │
│ QQuery 19 │ 32.81 ms │                    34.32 ms │     no change │
│ QQuery 20 │ 31.93 ms │                    31.66 ms │     no change │
│ QQuery 21 │ 55.65 ms │                    52.67 ms │ +1.06x faster │
│ QQuery 22 │ 13.96 ms │                    13.88 ms │     no change │
└───────────┴──────────┴─────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 6593.16ms │
│ Total Time (perf_join-order-enumeration)   │ 6049.43ms │
│ Average Time (HEAD)                        │  299.69ms │
│ Average Time (perf_join-order-enumeration) │  274.97ms │
│ Queries Faster                             │        10 │
│ Queries Slower                             │         1 │
│ Queries with No Change                     │        11 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

--------------------
Benchmark tpch_sf10.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 310.06 ms │                   310.19 ms │     no change │
│ QQuery 2  │ 103.96 ms │                    70.20 ms │ +1.48x faster │
│ QQuery 3  │ 224.29 ms │                   213.38 ms │     no change │
│ QQuery 4  │ 112.15 ms │                   113.23 ms │     no change │
│ QQuery 5  │ 352.47 ms │                   277.67 ms │ +1.27x faster │
│ QQuery 6  │ 122.28 ms │                   122.41 ms │     no change │
│ QQuery 7  │ 477.52 ms │                   248.26 ms │ +1.92x faster │
│ QQuery 8  │ 374.56 ms │                   347.49 ms │ +1.08x faster │
│ QQuery 9  │ 562.15 ms │                   517.46 ms │ +1.09x faster │
│ QQuery 10 │ 297.92 ms │                   300.01 ms │     no change │
│ QQuery 11 │  88.83 ms │                    57.43 ms │ +1.55x faster │
│ QQuery 12 │ 175.58 ms │                   167.40 ms │     no change │
│ QQuery 13 │ 290.70 ms │                   297.23 ms │     no change │
│ QQuery 14 │ 171.44 ms │                   170.29 ms │     no change │
│ QQuery 15 │ 296.06 ms │                   294.32 ms │     no change │
│ QQuery 16 │  64.44 ms │                    56.09 ms │ +1.15x faster │
│ QQuery 17 │ 614.46 ms │                   545.66 ms │ +1.13x faster │
│ QQuery 18 │ 714.30 ms │                   674.92 ms │ +1.06x faster │
│ QQuery 19 │ 243.69 ms │                   255.38 ms │     no change │
│ QQuery 20 │ 280.98 ms │                   251.14 ms │ +1.12x faster │
│ QQuery 21 │ 655.35 ms │                   700.53 ms │  1.07x slower │
│ QQuery 22 │  59.97 ms │                    58.75 ms │     no change │
└───────────┴───────────┴─────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 6593.16ms │
│ Total Time (perf_join-order-enumeration)   │ 6049.43ms │
│ Average Time (HEAD)                        │  299.69ms │
│ Average Time (perf_join-order-enumeration) │  274.97ms │
│ Queries Faster                             │        10 │
│ Queries Slower                             │         1 │
│ Queries with No Change                     │        11 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘


--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ perf_join-order-enumeration ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 1  │    5.59 ms │                     5.79 ms │      no change │
│ QQuery 2  │   81.34 ms │                    80.83 ms │      no change │
│ QQuery 3  │   29.41 ms │                    26.30 ms │  +1.12x faster │
│ QQuery 4  │  492.39 ms │                   497.61 ms │      no change │
│ QQuery 5  │   52.43 ms │                    52.36 ms │      no change │
│ QQuery 6  │   36.55 ms │                    36.45 ms │      no change │
│ QQuery 7  │   93.56 ms │                    77.61 ms │  +1.21x faster │
│ QQuery 8  │   37.36 ms │                    36.63 ms │      no change │
│ QQuery 9  │   51.32 ms │                    50.52 ms │      no change │
│ QQuery 10 │   63.04 ms │                    57.61 ms │  +1.09x faster │
│ QQuery 11 │  307.35 ms │                   245.02 ms │  +1.25x faster │
│ QQuery 12 │   28.89 ms │                    28.88 ms │      no change │
│ QQuery 13 │  118.01 ms │                   119.52 ms │      no change │
│ QQuery 14 │  418.99 ms │                   357.43 ms │  +1.17x faster │
│ QQuery 15 │   58.18 ms │                    20.82 ms │  +2.79x faster │
│ QQuery 16 │    6.82 ms │                     6.88 ms │      no change │
│ QQuery 17 │   79.44 ms │                    60.66 ms │  +1.31x faster │
│ QQuery 18 │  122.33 ms │                   117.58 ms │      no change │
│ QQuery 19 │   41.81 ms │                    42.44 ms │      no change │
│ QQuery 20 │   35.73 ms │                    35.49 ms │      no change │
│ QQuery 21 │   17.63 ms │                    13.17 ms │  +1.34x faster │
│ QQuery 22 │   64.10 ms │                    62.98 ms │      no change │
│ QQuery 23 │  347.31 ms │                   268.91 ms │  +1.29x faster │
│ QQuery 24 │  224.46 ms │                   163.03 ms │  +1.38x faster │
│ QQuery 25 │  109.67 ms │                    78.93 ms │  +1.39x faster │
│ QQuery 26 │   58.79 ms │                    53.61 ms │  +1.10x faster │
│ QQuery 27 │    6.54 ms │                     6.40 ms │      no change │
│ QQuery 28 │   57.29 ms │                    57.56 ms │      no change │
│ QQuery 29 │   96.87 ms │                    65.91 ms │  +1.47x faster │
│ QQuery 30 │   33.34 ms │                    32.86 ms │      no change │
│ QQuery 31 │  112.72 ms │                   110.52 ms │      no change │
│ QQuery 32 │   21.08 ms │                    20.24 ms │      no change │
│ QQuery 33 │   38.87 ms │                    38.53 ms │      no change │
│ QQuery 34 │   10.15 ms │                     6.02 ms │  +1.69x faster │
│ QQuery 35 │   73.44 ms │                    66.06 ms │  +1.11x faster │
│ QQuery 36 │    5.99 ms │                     5.96 ms │      no change │
│ QQuery 37 │    6.92 ms │                     6.95 ms │      no change │
│ QQuery 38 │   63.23 ms │                    62.42 ms │      no change │
│ QQuery 39 │   92.59 ms │                    79.57 ms │  +1.16x faster │
│ QQuery 40 │   23.57 ms │                    21.58 ms │  +1.09x faster │
│ QQuery 41 │   11.74 ms │                    11.29 ms │      no change │
│ QQuery 42 │   24.28 ms │                    26.49 ms │   1.09x slower │
│ QQuery 43 │    5.25 ms │                     5.10 ms │      no change │
│ QQuery 44 │    9.67 ms │                     9.38 ms │      no change │
│ QQuery 45 │   39.35 ms │                    23.36 ms │  +1.68x faster │
│ QQuery 46 │   12.08 ms │                     7.06 ms │  +1.71x faster │
│ QQuery 47 │  235.01 ms │                   227.30 ms │      no change │
│ QQuery 48 │   95.81 ms │                    98.01 ms │      no change │
│ QQuery 49 │   77.45 ms │                    72.89 ms │  +1.06x faster │
│ QQuery 50 │   59.95 ms │                    52.18 ms │  +1.15x faster │
│ QQuery 51 │   91.82 ms │                    92.69 ms │      no change │
│ QQuery 52 │   24.36 ms │                    26.78 ms │   1.10x slower │
│ QQuery 53 │   29.41 ms │                    29.02 ms │      no change │
│ QQuery 54 │   55.37 ms │                    24.91 ms │  +2.22x faster │
│ QQuery 55 │   24.02 ms │                    25.30 ms │   1.05x slower │
│ QQuery 56 │   39.62 ms │                    43.14 ms │   1.09x slower │
│ QQuery 57 │  178.52 ms │                   176.81 ms │      no change │
│ QQuery 58 │  115.72 ms │                    52.20 ms │  +2.22x faster │
│ QQuery 59 │  117.60 ms │                   116.77 ms │      no change │
│ QQuery 60 │   39.62 ms │                    38.47 ms │      no change │
│ QQuery 61 │   12.46 ms │                    11.64 ms │  +1.07x faster │
│ QQuery 62 │   46.82 ms │                    30.70 ms │  +1.52x faster │
│ QQuery 63 │   29.54 ms │                    29.10 ms │      no change │
│ QQuery 64 │  410.49 ms │                   231.82 ms │  +1.77x faster │
│ QQuery 65 │  122.98 ms │                   122.17 ms │      no change │
│ QQuery 66 │   82.17 ms │                    65.47 ms │  +1.26x faster │
│ QQuery 67 │  249.61 ms │                   247.52 ms │      no change │
│ QQuery 68 │   12.18 ms │                     7.70 ms │  +1.58x faster │
│ QQuery 69 │   58.21 ms │                    63.13 ms │   1.08x slower │
│ QQuery 70 │  108.53 ms │                    78.31 ms │  +1.39x faster │
│ QQuery 71 │   35.79 ms │                    35.31 ms │      no change │
│ QQuery 72 │ 1995.41 ms │                    77.04 ms │ +25.90x faster │
│ QQuery 73 │    9.75 ms │                     6.01 ms │  +1.62x faster │
│ QQuery 74 │  175.23 ms │                   174.30 ms │      no change │
│ QQuery 75 │  149.83 ms │                   148.17 ms │      no change │
│ QQuery 76 │   36.11 ms │                    35.35 ms │      no change │
│ QQuery 77 │   61.10 ms │                    61.51 ms │      no change │
│ QQuery 78 │  196.83 ms │                   215.51 ms │   1.09x slower │
│ QQuery 79 │   66.48 ms │                    69.28 ms │      no change │
│ QQuery 80 │  101.21 ms │                    97.47 ms │      no change │
│ QQuery 81 │   26.18 ms │                    25.43 ms │      no change │
│ QQuery 82 │   16.58 ms │                    16.46 ms │      no change │
│ QQuery 83 │   40.07 ms │                    23.14 ms │  +1.73x faster │
│ QQuery 84 │   30.19 ms │                    38.27 ms │   1.27x slower │
│ QQuery 85 │  107.29 ms │                    98.41 ms │  +1.09x faster │
│ QQuery 86 │   25.89 ms │                    25.55 ms │      no change │
│ QQuery 87 │   62.76 ms │                    62.27 ms │      no change │
│ QQuery 88 │   64.06 ms │                    59.72 ms │  +1.07x faster │
│ QQuery 89 │   35.73 ms │                    35.89 ms │      no change │
│ QQuery 90 │   17.50 ms │                    14.88 ms │  +1.18x faster │
│ QQuery 91 │   46.05 ms │                    41.90 ms │  +1.10x faster │
│ QQuery 92 │   29.88 ms │                    29.55 ms │      no change │
│ QQuery 93 │   50.16 ms │                    49.57 ms │      no change │
│ QQuery 94 │   38.12 ms │                    37.77 ms │      no change │
│ QQuery 95 │   80.73 ms │                    80.83 ms │      no change │
│ QQuery 96 │   24.40 ms │                    20.72 ms │  +1.18x faster │
│ QQuery 97 │   46.92 ms │                    51.89 ms │   1.11x slower │
│ QQuery 98 │   42.61 ms │                    42.90 ms │      no change │
│ QQuery 99 │   70.37 ms │                    45.50 ms │  +1.55x faster │
└───────────┴────────────┴─────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 9727.95ms │
│ Total Time (perf_join-order-enumeration)   │ 6944.96ms │
│ Average Time (HEAD)                        │   98.26ms │
│ Average Time (perf_join-order-enumeration) │   70.15ms │
│ Queries Faster                             │        38 │
│ Queries Slower                             │         8 │
│ Queries with No Change                     │        53 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

Benchmarks SMJ

Details
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃     HEAD ┃ perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.38 ms │                    38.77 ms │     no change │
│ QQuery 2  │ 19.12 ms │                    16.41 ms │ +1.16x faster │
│ QQuery 3  │ 32.54 ms │                    28.09 ms │ +1.16x faster │
│ QQuery 4  │ 17.57 ms │                    17.22 ms │     no change │
│ QQuery 5  │ 37.07 ms │                    31.32 ms │ +1.18x faster │
│ QQuery 6  │ 15.92 ms │                    15.94 ms │     no change │
│ QQuery 7  │ 44.44 ms │                    33.24 ms │ +1.34x faster │
│ QQuery 8  │ 42.01 ms │                    46.16 ms │  1.10x slower │
│ QQuery 9  │ 49.29 ms │                    48.02 ms │     no change │
│ QQuery 10 │ 41.97 ms │                    41.79 ms │     no change │
│ QQuery 11 │ 13.16 ms │                    13.25 ms │     no change │
│ QQuery 12 │ 23.89 ms │                    23.09 ms │     no change │
│ QQuery 13 │ 32.27 ms │                    31.72 ms │     no change │
│ QQuery 14 │ 23.25 ms │                    23.80 ms │     no change │
│ QQuery 15 │ 30.78 ms │                    30.48 ms │     no change │
│ QQuery 16 │ 14.58 ms │                    13.61 ms │ +1.07x faster │
│ QQuery 17 │ 78.66 ms │                    69.50 ms │ +1.13x faster │
│ QQuery 18 │ 63.95 ms │                    58.42 ms │ +1.09x faster │
│ QQuery 19 │ 34.42 ms │                    34.08 ms │     no change │
│ QQuery 20 │ 32.00 ms │                    30.81 ms │     no change │
│ QQuery 21 │ 54.36 ms │                    52.83 ms │     no change │
│ QQuery 22 │ 13.55 ms │                    13.45 ms │     no change │
└───────────┴──────────┴─────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                          ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 753.21ms │
│ Total Time (perf_join-order-enumeration)   │ 712.00ms │
│ Average Time (HEAD)                        │  34.24ms │
│ Average Time (perf_join-order-enumeration) │  32.36ms │
│ Queries Faster                             │        7 │
│ Queries Slower                             │        1 │
│ Queries with No Change                     │       14 │
│ Queries with Failure                       │        0 │
└────────────────────────────────────────────┴──────────┘


--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃                                   HEAD ┃        perf_join-order-enumeration ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 1  │         24.12 / 25.11 ±1.07 / 27.18 ms │     24.01 / 24.69 ±0.98 / 26.64 ms │      no change │
│ QQuery 2  │         80.07 / 80.62 ±0.64 / 81.87 ms │     79.49 / 80.06 ±0.52 / 80.93 ms │      no change │
│ QQuery 3  │         50.83 / 51.35 ±0.37 / 51.92 ms │     44.50 / 44.92 ±0.24 / 45.23 ms │  +1.14x faster │
│ QQuery 4  │     795.61 / 811.78 ±10.19 / 824.27 ms │  595.34 / 601.09 ±4.68 / 606.25 ms │  +1.35x faster │
│ QQuery 5  │      106.32 / 114.16 ±4.84 / 118.59 ms │  104.49 / 109.55 ±5.41 / 116.92 ms │      no change │
│ QQuery 6  │         70.36 / 70.49 ±0.19 / 70.85 ms │     70.26 / 70.51 ±0.19 / 70.83 ms │      no change │
│ QQuery 7  │      123.23 / 125.75 ±2.49 / 129.26 ms │  122.34 / 123.80 ±2.40 / 128.59 ms │      no change │
│ QQuery 8  │         66.32 / 66.67 ±0.31 / 67.16 ms │     66.40 / 66.78 ±0.39 / 67.51 ms │      no change │
│ QQuery 9  │         53.04 / 54.43 ±1.26 / 56.50 ms │     51.40 / 52.52 ±0.65 / 53.24 ms │      no change │
│ QQuery 10 │      135.50 / 142.62 ±7.98 / 157.98 ms │  136.36 / 139.25 ±2.32 / 142.68 ms │      no change │
│ QQuery 11 │      421.61 / 433.39 ±8.45 / 444.27 ms │  295.34 / 297.71 ±1.22 / 298.68 ms │  +1.46x faster │
│ QQuery 12 │         33.11 / 37.91 ±5.24 / 47.50 ms │     32.46 / 32.96 ±0.41 / 33.60 ms │  +1.15x faster │
│ QQuery 13 │      124.61 / 126.19 ±1.23 / 127.97 ms │  122.44 / 122.99 ±0.30 / 123.27 ms │      no change │
│ QQuery 14 │      831.76 / 842.29 ±8.51 / 854.18 ms │  659.24 / 666.16 ±4.75 / 671.78 ms │  +1.26x faster │
│ QQuery 15 │         57.58 / 62.21 ±3.57 / 67.09 ms │     40.81 / 41.09 ±0.47 / 42.03 ms │  +1.51x faster │
│ QQuery 16 │         78.32 / 81.76 ±2.17 / 84.17 ms │     78.13 / 80.75 ±5.02 / 90.78 ms │      no change │
│ QQuery 17 │      169.83 / 172.96 ±2.82 / 176.40 ms │  159.92 / 161.54 ±1.49 / 163.88 ms │  +1.07x faster │
│ QQuery 18 │      154.57 / 161.58 ±7.33 / 174.51 ms │  173.37 / 175.64 ±1.24 / 176.72 ms │   1.09x slower │
│ QQuery 19 │         76.13 / 77.40 ±1.37 / 79.92 ms │     75.16 / 76.93 ±1.84 / 79.64 ms │      no change │
│ QQuery 20 │         45.53 / 46.60 ±1.13 / 48.51 ms │     45.62 / 46.10 ±0.29 / 46.42 ms │      no change │
│ QQuery 21 │      405.58 / 412.30 ±7.12 / 424.30 ms │     81.08 / 81.99 ±0.74 / 82.97 ms │  +5.03x faster │
│ QQuery 22 │      100.46 / 103.62 ±3.68 / 110.03 ms │   99.71 / 102.56 ±5.07 / 112.69 ms │      no change │
│ QQuery 23 │     557.52 / 574.02 ±12.52 / 594.00 ms │  471.25 / 482.42 ±7.55 / 494.49 ms │  +1.19x faster │
│ QQuery 24 │      347.41 / 354.50 ±6.39 / 365.83 ms │  399.63 / 406.43 ±4.88 / 414.12 ms │   1.15x slower │
│ QQuery 25 │      190.01 / 195.92 ±9.50 / 214.84 ms │  155.95 / 163.07 ±4.58 / 169.88 ms │  +1.20x faster │
│ QQuery 26 │      103.21 / 108.54 ±5.52 / 119.02 ms │  101.96 / 102.47 ±0.53 / 103.29 ms │  +1.06x faster │
│ QQuery 27 │      124.22 / 128.39 ±3.97 / 135.95 ms │  123.10 / 125.46 ±3.44 / 132.28 ms │      no change │
│ QQuery 28 │         57.39 / 59.62 ±2.50 / 63.01 ms │     58.38 / 60.22 ±2.10 / 62.79 ms │      no change │
│ QQuery 29 │      168.64 / 175.50 ±8.64 / 191.95 ms │  137.17 / 139.24 ±3.22 / 145.64 ms │  +1.26x faster │
│ QQuery 30 │         47.32 / 48.51 ±1.14 / 50.29 ms │     46.24 / 47.34 ±0.66 / 48.11 ms │      no change │
│ QQuery 31 │      239.03 / 241.13 ±2.75 / 246.44 ms │  237.84 / 240.29 ±4.62 / 249.53 ms │      no change │
│ QQuery 32 │         67.99 / 73.52 ±5.57 / 83.52 ms │     67.77 / 68.87 ±0.78 / 69.97 ms │  +1.07x faster │
│ QQuery 33 │         71.86 / 74.91 ±2.10 / 77.29 ms │     69.62 / 72.29 ±2.04 / 75.60 ms │      no change │
│ QQuery 34 │         69.68 / 70.43 ±0.57 / 71.43 ms │     69.52 / 73.61 ±3.98 / 79.69 ms │      no change │
│ QQuery 35 │      124.48 / 128.90 ±4.18 / 135.70 ms │  124.57 / 125.29 ±1.15 / 127.58 ms │      no change │
│ QQuery 36 │         86.25 / 88.07 ±1.68 / 90.88 ms │     86.46 / 87.03 ±0.43 / 87.75 ms │      no change │
│ QQuery 37 │         32.76 / 35.17 ±3.80 / 42.73 ms │     32.69 / 33.36 ±0.72 / 34.62 ms │  +1.05x faster │
│ QQuery 38 │         97.88 / 98.35 ±0.29 / 98.76 ms │     97.56 / 98.33 ±0.51 / 98.99 ms │      no change │
│ QQuery 39 │  1618.09 / 1639.54 ±14.72 / 1658.59 ms │  340.25 / 344.34 ±5.85 / 355.61 ms │  +4.76x faster │
│ QQuery 40 │      106.21 / 111.59 ±7.65 / 126.55 ms │     67.84 / 68.19 ±0.23 / 68.43 ms │  +1.64x faster │
│ QQuery 41 │         11.42 / 11.63 ±0.29 / 12.20 ms │     11.37 / 11.63 ±0.25 / 12.05 ms │      no change │
│ QQuery 42 │         50.14 / 50.57 ±0.33 / 51.02 ms │     50.37 / 54.09 ±5.95 / 65.91 ms │   1.07x slower │
│ QQuery 43 │         56.60 / 56.98 ±0.49 / 57.93 ms │     56.61 / 57.44 ±1.13 / 59.64 ms │      no change │
│ QQuery 44 │         12.62 / 12.90 ±0.30 / 13.47 ms │     12.35 / 12.74 ±0.38 / 13.40 ms │      no change │
│ QQuery 45 │         47.27 / 50.22 ±2.56 / 54.27 ms │     37.14 / 37.46 ±0.32 / 37.94 ms │  +1.34x faster │
│ QQuery 46 │      119.98 / 122.47 ±3.38 / 129.06 ms │  121.23 / 122.99 ±1.35 / 125.40 ms │      no change │
│ QQuery 47 │     361.95 / 375.10 ±12.40 / 395.47 ms │ 359.61 / 372.69 ±12.06 / 389.04 ms │      no change │
│ QQuery 48 │      123.95 / 134.84 ±9.12 / 151.71 ms │  127.43 / 130.84 ±2.86 / 134.81 ms │      no change │
│ QQuery 49 │         80.65 / 82.65 ±2.31 / 87.13 ms │     81.64 / 85.79 ±5.83 / 97.30 ms │      no change │
│ QQuery 50 │        89.76 / 93.56 ±5.53 / 104.29 ms │     91.51 / 92.77 ±0.72 / 93.50 ms │      no change │
│ QQuery 51 │      122.13 / 123.35 ±0.70 / 124.04 ms │  123.57 / 126.42 ±3.33 / 132.76 ms │      no change │
│ QQuery 52 │         49.65 / 52.78 ±3.45 / 58.24 ms │     49.90 / 50.35 ±0.37 / 50.89 ms │      no change │
│ QQuery 53 │         54.25 / 55.48 ±0.71 / 56.18 ms │     54.27 / 54.79 ±0.50 / 55.63 ms │      no change │
│ QQuery 54 │        97.44 / 98.87 ±1.06 / 100.20 ms │    97.82 / 99.72 ±2.34 / 104.12 ms │      no change │
│ QQuery 55 │         47.45 / 50.49 ±4.49 / 59.20 ms │     47.67 / 47.87 ±0.31 / 48.49 ms │  +1.05x faster │
│ QQuery 56 │         72.81 / 74.08 ±1.37 / 76.09 ms │     74.07 / 75.61 ±1.29 / 77.64 ms │      no change │
│ QQuery 57 │      223.86 / 228.92 ±7.73 / 244.26 ms │ 221.88 / 230.15 ±12.25 / 254.29 ms │      no change │
│ QQuery 58 │      188.14 / 194.38 ±5.56 / 203.16 ms │  120.45 / 121.74 ±0.98 / 123.49 ms │  +1.60x faster │
│ QQuery 59 │      121.31 / 124.13 ±3.70 / 131.24 ms │  121.15 / 124.93 ±4.36 / 132.95 ms │      no change │
│ QQuery 60 │         73.05 / 74.42 ±1.12 / 75.51 ms │     72.07 / 73.09 ±0.77 / 74.40 ms │      no change │
│ QQuery 61 │     100.60 / 112.96 ±13.43 / 138.78 ms │    93.60 / 99.63 ±6.53 / 110.68 ms │  +1.13x faster │
│ QQuery 62 │         66.79 / 67.40 ±0.52 / 68.21 ms │     38.91 / 39.84 ±0.79 / 41.31 ms │  +1.69x faster │
│ QQuery 63 │         54.59 / 55.30 ±0.45 / 55.97 ms │     54.46 / 55.07 ±0.51 / 55.97 ms │      no change │
│ QQuery 64 │     675.44 / 684.83 ±13.99 / 712.21 ms │ 695.86 / 709.47 ±10.31 / 726.10 ms │      no change │
│ QQuery 65 │      111.87 / 113.01 ±0.74 / 113.84 ms │  112.04 / 112.34 ±0.24 / 112.76 ms │      no change │
│ QQuery 66 │      172.54 / 176.98 ±5.44 / 187.17 ms │ 109.92 / 118.64 ±13.65 / 145.83 ms │  +1.49x faster │
│ QQuery 67 │      135.52 / 140.80 ±4.73 / 148.25 ms │  137.07 / 140.42 ±4.04 / 148.19 ms │      no change │
│ QQuery 68 │      126.81 / 128.95 ±1.53 / 131.47 ms │  128.85 / 130.55 ±2.07 / 134.58 ms │      no change │
│ QQuery 69 │     129.87 / 140.11 ±16.36 / 172.63 ms │ 128.42 / 138.34 ±12.48 / 161.68 ms │      no change │
│ QQuery 70 │      204.78 / 208.44 ±4.27 / 215.97 ms │  179.37 / 183.12 ±4.35 / 191.11 ms │  +1.14x faster │
│ QQuery 71 │         65.39 / 66.65 ±0.98 / 68.19 ms │     66.80 / 67.57 ±0.50 / 68.16 ms │      no change │
│ QQuery 72 │ 6531.20 / 6783.20 ±170.02 / 6989.68 ms │  188.92 / 193.54 ±5.20 / 203.05 ms │ +35.05x faster │
│ QQuery 73 │     69.59 / 194.27 ±127.72 / 376.46 ms │    67.17 / 73.45 ±10.50 / 94.23 ms │  +2.64x faster │
│ QQuery 74 │      280.14 / 288.17 ±6.28 / 296.92 ms │  206.31 / 212.37 ±6.81 / 223.08 ms │  +1.36x faster │
│ QQuery 75 │      217.84 / 223.91 ±6.00 / 234.09 ms │ 206.70 / 217.41 ±10.86 / 237.82 ms │      no change │
│ QQuery 76 │         38.84 / 39.51 ±0.46 / 40.28 ms │     38.02 / 38.51 ±0.32 / 38.87 ms │      no change │
│ QQuery 77 │      104.80 / 112.36 ±4.65 / 119.23 ms │  104.30 / 107.26 ±2.08 / 110.34 ms │      no change │
│ QQuery 78 │      301.98 / 311.07 ±9.99 / 330.02 ms │ 268.35 / 278.43 ±12.89 / 303.40 ms │  +1.12x faster │
│ QQuery 79 │      118.73 / 124.56 ±6.27 / 136.00 ms │  115.14 / 115.86 ±0.62 / 116.91 ms │  +1.08x faster │
│ QQuery 80 │      235.09 / 241.34 ±5.05 / 247.28 ms │  221.53 / 232.08 ±9.40 / 246.67 ms │      no change │
│ QQuery 81 │         45.06 / 46.86 ±2.57 / 51.94 ms │     44.40 / 52.54 ±9.92 / 71.35 ms │   1.12x slower │
│ QQuery 82 │         45.25 / 48.73 ±3.62 / 54.85 ms │     45.30 / 45.88 ±0.64 / 47.08 ms │  +1.06x faster │
│ QQuery 83 │         54.95 / 56.07 ±1.28 / 58.54 ms │     47.96 / 48.75 ±0.52 / 49.50 ms │  +1.15x faster │
│ QQuery 84 │         45.82 / 50.05 ±4.37 / 58.46 ms │     44.44 / 44.75 ±0.24 / 45.16 ms │  +1.12x faster │
│ QQuery 85 │      135.14 / 138.75 ±2.77 / 143.10 ms │  127.61 / 132.53 ±4.06 / 138.49 ms │      no change │
│ QQuery 86 │         26.88 / 28.13 ±1.08 / 30.07 ms │     26.84 / 27.47 ±0.50 / 28.10 ms │      no change │
│ QQuery 87 │      100.34 / 105.16 ±3.86 / 111.83 ms │   98.24 / 100.98 ±3.81 / 108.48 ms │      no change │
│ QQuery 88 │      166.58 / 171.26 ±3.85 / 177.14 ms │  159.84 / 162.05 ±2.00 / 165.79 ms │  +1.06x faster │
│ QQuery 89 │         61.18 / 63.07 ±2.31 / 67.58 ms │    59.75 / 67.62 ±13.70 / 94.98 ms │   1.07x slower │
│ QQuery 90 │         27.06 / 28.48 ±1.99 / 32.42 ms │     25.17 / 25.44 ±0.17 / 25.64 ms │  +1.12x faster │
│ QQuery 91 │         53.70 / 58.86 ±6.57 / 70.76 ms │     48.49 / 48.75 ±0.19 / 49.08 ms │  +1.21x faster │
│ QQuery 92 │         49.11 / 52.05 ±3.38 / 58.31 ms │     47.10 / 48.15 ±0.57 / 48.64 ms │  +1.08x faster │
│ QQuery 93 │     222.60 / 233.74 ±11.04 / 252.58 ms │  203.57 / 206.55 ±2.28 / 210.21 ms │  +1.13x faster │
│ QQuery 94 │         61.78 / 68.27 ±4.37 / 75.25 ms │     59.15 / 66.45 ±7.66 / 80.29 ms │      no change │
│ QQuery 95 │     163.40 / 181.43 ±15.56 / 208.08 ms │  159.54 / 164.71 ±4.47 / 171.67 ms │  +1.10x faster │
│ QQuery 96 │         45.50 / 47.11 ±1.49 / 49.45 ms │     45.31 / 46.32 ±1.46 / 49.19 ms │      no change │
│ QQuery 97 │         79.81 / 82.90 ±3.53 / 89.75 ms │     78.23 / 79.12 ±0.46 / 79.47 ms │      no change │
│ QQuery 98 │         66.77 / 70.25 ±2.28 / 73.40 ms │     64.15 / 65.65 ±1.37 / 68.13 ms │  +1.07x faster │
│ QQuery 99 │     142.17 / 150.38 ±11.08 / 172.00 ms │     66.32 / 66.97 ±0.43 / 67.50 ms │  +2.25x faster │
└───────────┴────────────────────────────────────────┴────────────────────────────────────┴────────────────┘

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 21454.34ms │
│ Total Time (perf_join-order-enumeration)   │ 12390.92ms │
│ Average Time (HEAD)                        │   216.71ms │
│ Average Time (perf_join-order-enumeration) │   125.16ms │
│ Queries Faster                             │         29 │
│ Queries Slower                             │          2 │
│ Queries with No Change                     │         68 │
│ Queries with Failure                       │          0 │
└────────────────────────────────────────────┴────────────┘

What changes are included in this PR?

A dynamic algorithm for join enumeration/optimization (up to some maximum depth).

Are these changes tested?

Yes, existing, new tests.

Are there any user-facing changes?

  • A new JoinEnumeration pass (DPHyp).

`JoinSelection` only made local decisions -- the build side and partition
mode of one join at a time -- so the shape of the join tree stayed
whatever the logical planner produced. For a query written as a flat list
of relations that is a left-deep tree in `FROM`-clause order, which
ignores how much each join reduces or inflates its inputs.

Add a dynamic programming enumerator that flattens a subtree of
reorderable joins into a graph of opaque relations plus the predicates
between them, searches every connected order (bushy as well as left-deep)
under a `C_out` cost model built from the same cardinality estimates the
rest of the rule uses, and rebuilds the subtree only when the winner is
strictly cheaper than the planner's order.

Semi and anti joins take part as reducers: they are filters on their
output side, so their quantified side becomes a relation that may be
applied at any node covering the columns its keys reference. Non-equi
join filters are re-attached at their lowest common ancestor, so a join
carrying one no longer blocks reordering.

Controlled by `datafusion.optimizer.join_enumeration` (default on) and
`datafusion.optimizer.join_enumeration_limit`.

TPC-H SF1, best of 5 interleaved runs: q18 0.67x, q7 0.72x, q2 0.87x,
q21 0.87x, q8 0.94x, q9 0.94x, and nothing regressed beyond the noise
floor measured on join-free control queries. All 22 queries return
byte-identical results with the flag on and off.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Dandandan

Copy link
Copy Markdown
Contributor Author

run benchmarks

@Dandandan

Copy link
Copy Markdown
Contributor Author

run bencmark tpch10

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

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5328427832-1648-8rrnd 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

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

Comparing perf/join-order-enumeration (a329cf3) to bb038a6 (merge-base) diff

Run configuration
run benchmark clickbench_partitioned

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5328427832-1649-9bwjh 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

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

Comparing perf/join-order-enumeration (a329cf3) to bb038a6 (merge-base) diff

Run configuration
run benchmark tpcds

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5328427832-1650-8pmn4 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

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

Comparing perf/join-order-enumeration (a329cf3) to bb038a6 (merge-base) diff

Run configuration
run benchmark tpch

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing perf/join-order-enumeration (a329cf3) to bb038a6 (merge-base) diff

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃     HEAD ┃ perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.03 ms │                    38.16 ms │     no change │
│ QQuery 2  │ 19.34 ms │                    16.47 ms │ +1.17x faster │
│ QQuery 3  │ 30.84 ms │                    30.55 ms │     no change │
│ QQuery 4  │ 17.48 ms │                    17.34 ms │     no change │
│ QQuery 5  │ 37.31 ms │                    39.07 ms │     no change │
│ QQuery 6  │ 15.99 ms │                    15.79 ms │     no change │
│ QQuery 7  │ 45.22 ms │                    33.03 ms │ +1.37x faster │
│ QQuery 8  │ 42.10 ms │                    39.53 ms │ +1.07x faster │
│ QQuery 9  │ 49.60 ms │                    47.57 ms │     no change │
│ QQuery 10 │ 41.92 ms │                    42.27 ms │     no change │
│ QQuery 11 │ 13.21 ms │                    13.42 ms │     no change │
│ QQuery 12 │ 24.04 ms │                    23.43 ms │     no change │
│ QQuery 13 │ 32.07 ms │                    32.02 ms │     no change │
│ QQuery 14 │ 22.95 ms │                    22.89 ms │     no change │
│ QQuery 15 │ 30.55 ms │                    30.16 ms │     no change │
│ QQuery 16 │ 13.68 ms │                    13.58 ms │     no change │
│ QQuery 17 │ 68.98 ms │                    68.86 ms │     no change │
│ QQuery 18 │ 57.55 ms │                    41.16 ms │ +1.40x faster │
│ QQuery 19 │ 32.40 ms │                    32.25 ms │     no change │
│ QQuery 20 │ 31.39 ms │                    31.28 ms │     no change │
│ QQuery 21 │ 55.44 ms │                    52.03 ms │ +1.07x faster │
│ QQuery 22 │ 13.79 ms │                    13.65 ms │     no change │
└───────────┴──────────┴─────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                          ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 733.89ms │
│ Total Time (perf_join-order-enumeration)   │ 694.54ms │
│ Average Time (HEAD)                        │  33.36ms │
│ Average Time (perf_join-order-enumeration) │  31.57ms │
│ Queries Faster                             │        5 │
│ Queries Slower                             │        0 │
│ Queries with No Change                     │       17 │
│ Queries with Failure                       │        0 │
└────────────────────────────────────────────┴──────────┘

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃    perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.03 / 38.76 ±0.97 / 40.67 ms │ 38.16 / 38.88 ±0.75 / 40.34 ms │     no change │
│ QQuery 2  │ 19.34 / 20.11 ±0.93 / 21.80 ms │ 16.47 / 16.58 ±0.13 / 16.81 ms │ +1.21x faster │
│ QQuery 3  │ 30.84 / 32.42 ±1.10 / 33.60 ms │ 30.55 / 32.61 ±1.04 / 33.31 ms │     no change │
│ QQuery 4  │ 17.48 / 17.84 ±0.47 / 18.74 ms │ 17.34 / 17.86 ±0.61 / 18.92 ms │     no change │
│ QQuery 5  │ 37.31 / 38.90 ±1.26 / 40.30 ms │ 39.07 / 41.86 ±1.84 / 44.82 ms │  1.08x slower │
│ QQuery 6  │ 15.99 / 16.35 ±0.40 / 17.12 ms │ 15.79 / 16.31 ±0.90 / 18.10 ms │     no change │
│ QQuery 7  │ 45.22 / 45.90 ±0.63 / 47.02 ms │ 33.03 / 34.46 ±0.88 / 35.79 ms │ +1.33x faster │
│ QQuery 8  │ 42.10 / 42.25 ±0.20 / 42.63 ms │ 39.53 / 40.67 ±1.62 / 43.83 ms │     no change │
│ QQuery 9  │ 49.60 / 49.98 ±0.36 / 50.61 ms │ 47.57 / 49.40 ±1.57 / 51.18 ms │     no change │
│ QQuery 10 │ 41.92 / 42.83 ±1.43 / 45.69 ms │ 42.27 / 43.85 ±1.34 / 45.98 ms │     no change │
│ QQuery 11 │ 13.21 / 13.44 ±0.22 / 13.85 ms │ 13.42 / 13.63 ±0.14 / 13.82 ms │     no change │
│ QQuery 12 │ 24.04 / 24.38 ±0.45 / 25.26 ms │ 23.43 / 24.25 ±0.77 / 25.72 ms │     no change │
│ QQuery 13 │ 32.07 / 34.55 ±2.09 / 37.82 ms │ 32.02 / 33.72 ±1.04 / 34.78 ms │     no change │
│ QQuery 14 │ 22.95 / 23.19 ±0.17 / 23.40 ms │ 22.89 / 23.26 ±0.26 / 23.59 ms │     no change │
│ QQuery 15 │ 30.55 / 30.84 ±0.27 / 31.27 ms │ 30.16 / 30.65 ±0.27 / 30.98 ms │     no change │
│ QQuery 16 │ 13.68 / 13.82 ±0.18 / 14.17 ms │ 13.58 / 13.82 ±0.18 / 14.02 ms │     no change │
│ QQuery 17 │ 68.98 / 70.68 ±1.67 / 73.04 ms │ 68.86 / 69.62 ±0.42 / 70.15 ms │     no change │
│ QQuery 18 │ 57.55 / 59.61 ±1.42 / 61.74 ms │ 41.16 / 43.35 ±1.12 / 44.15 ms │ +1.38x faster │
│ QQuery 19 │ 32.40 / 32.88 ±0.52 / 33.79 ms │ 32.25 / 33.26 ±1.39 / 35.99 ms │     no change │
│ QQuery 20 │ 31.39 / 31.82 ±0.38 / 32.41 ms │ 31.28 / 31.47 ±0.18 / 31.78 ms │     no change │
│ QQuery 21 │ 55.44 / 56.75 ±1.16 / 58.60 ms │ 52.03 / 53.40 ±0.78 / 54.44 ms │ +1.06x faster │
│ QQuery 22 │ 13.79 / 13.93 ±0.14 / 14.12 ms │ 13.65 / 13.87 ±0.15 / 14.09 ms │     no change │
└───────────┴────────────────────────────────┴────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                          ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 751.22ms │
│ Total Time (perf_join-order-enumeration)   │ 716.79ms │
│ Average Time (HEAD)                        │  34.15ms │
│ Average Time (perf_join-order-enumeration) │  32.58ms │
│ Queries Faster                             │        4 │
│ Queries Slower                             │        1 │
│ Queries with No Change                     │       17 │
│ Queries with Failure                       │        0 │
└────────────────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

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

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.1 GiB
Avg memory 479.0 MiB
CPU user 19.6s
CPU sys 1.7s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing perf/join-order-enumeration (a329cf3) to bb038a6 (merge-base) diff

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ perf_join-order-enumeration ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 1  │    5.66 ms │                     5.71 ms │      no change │
│ QQuery 2  │   80.37 ms │                    80.45 ms │      no change │
│ QQuery 3  │   29.22 ms │                    25.92 ms │  +1.13x faster │
│ QQuery 4  │  479.65 ms │                   484.73 ms │      no change │
│ QQuery 5  │   52.15 ms │                    52.43 ms │      no change │
│ QQuery 6  │   36.26 ms │                    53.22 ms │   1.47x slower │
│ QQuery 7  │   93.58 ms │                    80.52 ms │  +1.16x faster │
│ QQuery 8  │   36.93 ms │                    36.68 ms │      no change │
│ QQuery 9  │   52.30 ms │                    50.72 ms │      no change │
│ QQuery 10 │   62.62 ms │                    62.33 ms │      no change │
│ QQuery 11 │  299.17 ms │                   236.90 ms │  +1.26x faster │
│ QQuery 12 │   31.37 ms │                    18.19 ms │  +1.73x faster │
│ QQuery 13 │  123.57 ms │                   117.18 ms │  +1.05x faster │
│ QQuery 14 │  441.75 ms │                   354.59 ms │  +1.25x faster │
│ QQuery 15 │   63.14 ms │                    20.87 ms │  +3.03x faster │
│ QQuery 16 │    7.26 ms │                     6.83 ms │  +1.06x faster │
│ QQuery 17 │   82.71 ms │                    91.04 ms │   1.10x slower │
│ QQuery 18 │  123.87 ms │                   109.04 ms │  +1.14x faster │
│ QQuery 19 │   41.26 ms │                    42.17 ms │      no change │
│ QQuery 20 │   35.54 ms │                    23.93 ms │  +1.49x faster │
│ QQuery 21 │   17.25 ms │                    14.51 ms │  +1.19x faster │
│ QQuery 22 │   63.07 ms │                    71.77 ms │   1.14x slower │
│ QQuery 23 │  339.64 ms │                   336.43 ms │      no change │
│ QQuery 24 │  222.52 ms │                   166.73 ms │  +1.33x faster │
│ QQuery 25 │  109.60 ms │                    81.30 ms │  +1.35x faster │
│ QQuery 26 │   57.03 ms │                    58.66 ms │      no change │
│ QQuery 27 │    6.29 ms │                     6.59 ms │      no change │
│ QQuery 28 │   56.11 ms │                    57.81 ms │      no change │
│ QQuery 29 │   96.38 ms │                    65.23 ms │  +1.48x faster │
│ QQuery 30 │   32.28 ms │                    32.06 ms │      no change │
│ QQuery 31 │  110.20 ms │                   110.57 ms │      no change │
│ QQuery 32 │   20.03 ms │                    19.91 ms │      no change │
│ QQuery 33 │   38.04 ms │                    38.07 ms │      no change │
│ QQuery 34 │    9.87 ms │                     9.75 ms │      no change │
│ QQuery 35 │   72.89 ms │                    76.10 ms │      no change │
│ QQuery 36 │    6.04 ms │                     6.40 ms │   1.06x slower │
│ QQuery 37 │    6.91 ms │                     6.53 ms │  +1.06x faster │
│ QQuery 38 │   61.76 ms │                    61.55 ms │      no change │
│ QQuery 39 │   90.05 ms │                    78.49 ms │  +1.15x faster │
│ QQuery 40 │   23.24 ms │                    22.22 ms │      no change │
│ QQuery 41 │   11.37 ms │                    11.32 ms │      no change │
│ QQuery 42 │   24.02 ms │                    25.98 ms │   1.08x slower │
│ QQuery 43 │    5.13 ms │                     5.18 ms │      no change │
│ QQuery 44 │   10.14 ms │                     9.42 ms │  +1.08x faster │
│ QQuery 45 │   46.75 ms │                    23.38 ms │  +2.00x faster │
│ QQuery 46 │   13.41 ms │                    14.44 ms │   1.08x slower │
│ QQuery 47 │  275.67 ms │                   226.57 ms │  +1.22x faster │
│ QQuery 48 │  100.82 ms │                    94.38 ms │  +1.07x faster │
│ QQuery 49 │   82.24 ms │                    72.12 ms │  +1.14x faster │
│ QQuery 50 │   61.76 ms │                    53.80 ms │  +1.15x faster │
│ QQuery 51 │   92.68 ms │                    90.45 ms │      no change │
│ QQuery 52 │   23.93 ms │                    26.40 ms │   1.10x slower │
│ QQuery 53 │   29.39 ms │                    29.38 ms │      no change │
│ QQuery 54 │   56.87 ms │                    25.14 ms │  +2.26x faster │
│ QQuery 55 │   24.36 ms │                    24.99 ms │      no change │
│ QQuery 56 │   40.63 ms │                    38.01 ms │  +1.07x faster │
│ QQuery 57 │  174.91 ms │                   173.44 ms │      no change │
│ QQuery 58 │  113.03 ms │                    52.03 ms │  +2.17x faster │
│ QQuery 59 │  117.07 ms │                   116.38 ms │      no change │
│ QQuery 60 │   39.48 ms │                    38.29 ms │      no change │
│ QQuery 61 │   12.23 ms │                    10.72 ms │  +1.14x faster │
│ QQuery 62 │   46.22 ms │                    30.53 ms │  +1.51x faster │
│ QQuery 63 │   29.26 ms │                    29.38 ms │      no change │
│ QQuery 64 │  404.50 ms │                   362.28 ms │  +1.12x faster │
│ QQuery 65 │  121.76 ms │                   124.46 ms │      no change │
│ QQuery 66 │   81.29 ms │                    69.19 ms │  +1.17x faster │
│ QQuery 67 │  239.42 ms │                   286.69 ms │   1.20x slower │
│ QQuery 68 │   11.83 ms │                    15.70 ms │   1.33x slower │
│ QQuery 69 │   56.99 ms │                    65.75 ms │   1.15x slower │
│ QQuery 70 │  105.87 ms │                    82.56 ms │  +1.28x faster │
│ QQuery 71 │   34.91 ms │                    35.38 ms │      no change │
│ QQuery 72 │ 2017.69 ms │                    79.77 ms │ +25.29x faster │
│ QQuery 73 │    9.81 ms │                     9.72 ms │      no change │
│ QQuery 74 │  168.69 ms │                   180.65 ms │   1.07x slower │
│ QQuery 75 │  149.42 ms │                   109.37 ms │  +1.37x faster │
│ QQuery 76 │   35.17 ms │                    35.33 ms │      no change │
│ QQuery 77 │   61.52 ms │                    61.57 ms │      no change │
│ QQuery 78 │  195.32 ms │                   194.76 ms │      no change │
│ QQuery 79 │   66.71 ms │                    80.64 ms │   1.21x slower │
│ QQuery 80 │   99.01 ms │                    98.68 ms │      no change │
│ QQuery 81 │   25.78 ms │                    25.31 ms │      no change │
│ QQuery 82 │   16.21 ms │                    17.82 ms │   1.10x slower │
│ QQuery 83 │   39.92 ms │                    26.74 ms │  +1.49x faster │
│ QQuery 84 │   29.99 ms │                    37.97 ms │   1.27x slower │
│ QQuery 85 │  105.72 ms │                   102.64 ms │      no change │
│ QQuery 86 │   25.64 ms │                    25.42 ms │      no change │
│ QQuery 87 │   63.04 ms │                    62.17 ms │      no change │
│ QQuery 88 │   63.78 ms │                    58.87 ms │  +1.08x faster │
│ QQuery 89 │   35.43 ms │                    31.77 ms │  +1.12x faster │
│ QQuery 90 │   17.17 ms │                    14.66 ms │  +1.17x faster │
│ QQuery 91 │   46.14 ms │                    41.04 ms │  +1.12x faster │
│ QQuery 92 │   29.52 ms │                    29.47 ms │      no change │
│ QQuery 93 │   49.74 ms │                    49.69 ms │      no change │
│ QQuery 94 │   37.76 ms │                    37.60 ms │      no change │
│ QQuery 95 │   79.83 ms │                    79.29 ms │      no change │
│ QQuery 96 │   24.00 ms │                    20.74 ms │  +1.16x faster │
│ QQuery 97 │   46.95 ms │                    46.98 ms │      no change │
│ QQuery 98 │   43.18 ms │                    27.49 ms │  +1.57x faster │
│ QQuery 99 │   71.12 ms │                    44.88 ms │  +1.58x faster │
└───────────┴────────────┴─────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 9759.80ms │
│ Total Time (perf_join-order-enumeration)   │ 7168.88ms │
│ Average Time (HEAD)                        │   98.58ms │
│ Average Time (perf_join-order-enumeration) │   72.41ms │
│ Queries Faster                             │        40 │
│ Queries Slower                             │        14 │
│ Queries with No Change                     │        45 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃       perf_join-order-enumeration ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 1  │           5.66 / 6.12 ±0.82 / 7.76 ms │       5.71 / 6.23 ±0.89 / 8.01 ms │      no change │
│ QQuery 2  │        80.37 / 80.75 ±0.32 / 81.31 ms │    80.45 / 80.76 ±0.18 / 80.99 ms │      no change │
│ QQuery 3  │        29.22 / 29.33 ±0.11 / 29.53 ms │    25.92 / 26.16 ±0.23 / 26.60 ms │  +1.12x faster │
│ QQuery 4  │     479.65 / 486.70 ±5.62 / 495.66 ms │ 484.73 / 489.67 ±4.44 / 495.66 ms │      no change │
│ QQuery 5  │        52.15 / 52.80 ±0.45 / 53.46 ms │    52.43 / 52.99 ±0.33 / 53.44 ms │      no change │
│ QQuery 6  │        36.26 / 36.96 ±0.39 / 37.38 ms │    53.22 / 54.44 ±0.64 / 54.91 ms │   1.47x slower │
│ QQuery 7  │        93.58 / 94.45 ±0.56 / 95.13 ms │    80.52 / 80.84 ±0.26 / 81.18 ms │  +1.17x faster │
│ QQuery 8  │        36.93 / 38.42 ±2.21 / 42.82 ms │    36.68 / 37.36 ±0.70 / 38.60 ms │      no change │
│ QQuery 9  │        52.30 / 54.23 ±1.05 / 55.34 ms │    50.72 / 52.07 ±1.42 / 54.43 ms │      no change │
│ QQuery 10 │        62.62 / 63.03 ±0.25 / 63.33 ms │    62.33 / 62.76 ±0.34 / 63.31 ms │      no change │
│ QQuery 11 │     299.17 / 308.03 ±7.38 / 318.64 ms │ 236.90 / 239.24 ±1.76 / 242.26 ms │  +1.29x faster │
│ QQuery 12 │        31.37 / 31.74 ±0.27 / 31.98 ms │    18.19 / 18.42 ±0.32 / 19.05 ms │  +1.72x faster │
│ QQuery 13 │     123.57 / 125.49 ±1.81 / 128.51 ms │ 117.18 / 118.61 ±2.46 / 123.53 ms │  +1.06x faster │
│ QQuery 14 │     441.75 / 443.53 ±2.25 / 447.90 ms │ 354.59 / 357.90 ±2.39 / 361.62 ms │  +1.24x faster │
│ QQuery 15 │        63.14 / 64.90 ±1.11 / 66.61 ms │    20.87 / 21.19 ±0.21 / 21.45 ms │  +3.06x faster │
│ QQuery 16 │           7.26 / 7.41 ±0.20 / 7.80 ms │       6.83 / 6.99 ±0.18 / 7.33 ms │  +1.06x faster │
│ QQuery 17 │        82.71 / 84.53 ±1.84 / 87.21 ms │    91.04 / 93.67 ±2.09 / 96.32 ms │   1.11x slower │
│ QQuery 18 │     123.87 / 125.91 ±1.31 / 127.40 ms │ 109.04 / 110.49 ±1.68 / 113.78 ms │  +1.14x faster │
│ QQuery 19 │        41.26 / 42.15 ±0.93 / 43.75 ms │    42.17 / 42.84 ±0.64 / 44.01 ms │      no change │
│ QQuery 20 │        35.54 / 36.43 ±1.05 / 37.89 ms │    23.93 / 25.50 ±1.97 / 29.31 ms │  +1.43x faster │
│ QQuery 21 │        17.25 / 17.48 ±0.26 / 17.97 ms │    14.51 / 14.75 ±0.22 / 15.12 ms │  +1.19x faster │
│ QQuery 22 │        63.07 / 63.75 ±0.53 / 64.49 ms │    71.77 / 72.76 ±0.95 / 74.13 ms │   1.14x slower │
│ QQuery 23 │    339.64 / 351.00 ±11.89 / 373.57 ms │ 336.43 / 343.88 ±3.84 / 346.89 ms │      no change │
│ QQuery 24 │     222.52 / 224.61 ±1.76 / 227.16 ms │ 166.73 / 171.51 ±2.80 / 175.28 ms │  +1.31x faster │
│ QQuery 25 │     109.60 / 110.28 ±0.57 / 111.28 ms │    81.30 / 82.02 ±0.53 / 82.72 ms │  +1.34x faster │
│ QQuery 26 │        57.03 / 57.65 ±0.58 / 58.51 ms │    58.66 / 59.19 ±0.33 / 59.54 ms │      no change │
│ QQuery 27 │           6.29 / 6.45 ±0.17 / 6.77 ms │       6.59 / 6.66 ±0.07 / 6.79 ms │      no change │
│ QQuery 28 │        56.11 / 59.36 ±2.39 / 61.61 ms │    57.81 / 61.38 ±2.91 / 65.90 ms │      no change │
│ QQuery 29 │       96.38 / 98.81 ±3.13 / 104.85 ms │    65.23 / 66.06 ±0.96 / 67.92 ms │  +1.50x faster │
│ QQuery 30 │        32.28 / 33.26 ±0.96 / 35.06 ms │    32.06 / 32.50 ±0.39 / 33.03 ms │      no change │
│ QQuery 31 │     110.20 / 111.26 ±0.78 / 112.42 ms │ 110.57 / 112.28 ±2.08 / 116.13 ms │      no change │
│ QQuery 32 │        20.03 / 20.28 ±0.25 / 20.71 ms │    19.91 / 20.66 ±0.68 / 21.85 ms │      no change │
│ QQuery 33 │        38.04 / 39.06 ±1.03 / 40.90 ms │    38.07 / 38.60 ±0.34 / 38.99 ms │      no change │
│ QQuery 34 │         9.87 / 10.34 ±0.48 / 11.27 ms │     9.75 / 10.13 ±0.44 / 10.91 ms │      no change │
│ QQuery 35 │        72.89 / 73.41 ±0.30 / 73.81 ms │    76.10 / 76.78 ±0.41 / 77.25 ms │      no change │
│ QQuery 36 │           6.04 / 6.16 ±0.16 / 6.48 ms │       6.40 / 6.55 ±0.17 / 6.88 ms │   1.06x slower │
│ QQuery 37 │           6.91 / 6.98 ±0.05 / 7.05 ms │       6.53 / 6.77 ±0.21 / 7.08 ms │      no change │
│ QQuery 38 │        61.76 / 62.07 ±0.28 / 62.60 ms │    61.55 / 63.41 ±2.05 / 67.15 ms │      no change │
│ QQuery 39 │        90.05 / 91.63 ±1.79 / 95.10 ms │    78.49 / 79.22 ±0.78 / 80.72 ms │  +1.16x faster │
│ QQuery 40 │        23.24 / 23.51 ±0.19 / 23.77 ms │    22.22 / 22.40 ±0.19 / 22.75 ms │      no change │
│ QQuery 41 │        11.37 / 11.57 ±0.20 / 11.94 ms │    11.32 / 11.48 ±0.13 / 11.71 ms │      no change │
│ QQuery 42 │        24.02 / 24.25 ±0.17 / 24.53 ms │    25.98 / 26.48 ±0.35 / 26.95 ms │   1.09x slower │
│ QQuery 43 │           5.13 / 5.37 ±0.20 / 5.64 ms │       5.18 / 5.29 ±0.16 / 5.60 ms │      no change │
│ QQuery 44 │        10.14 / 10.23 ±0.05 / 10.26 ms │     9.42 / 10.69 ±2.45 / 15.58 ms │      no change │
│ QQuery 45 │        46.75 / 49.31 ±2.73 / 54.41 ms │    23.38 / 23.93 ±0.39 / 24.61 ms │  +2.06x faster │
│ QQuery 46 │        13.41 / 13.88 ±0.42 / 14.47 ms │    14.44 / 14.87 ±0.43 / 15.66 ms │   1.07x slower │
│ QQuery 47 │     275.67 / 283.53 ±5.17 / 290.28 ms │ 226.57 / 231.95 ±6.37 / 243.48 ms │  +1.22x faster │
│ QQuery 48 │     100.82 / 101.03 ±0.19 / 101.29 ms │    94.38 / 95.06 ±0.35 / 95.32 ms │  +1.06x faster │
│ QQuery 49 │        82.24 / 83.04 ±0.52 / 83.52 ms │    72.12 / 73.40 ±1.33 / 75.91 ms │  +1.13x faster │
│ QQuery 50 │        61.76 / 62.31 ±0.58 / 63.17 ms │    53.80 / 53.94 ±0.15 / 54.18 ms │  +1.16x faster │
│ QQuery 51 │        92.68 / 94.89 ±1.78 / 97.04 ms │    90.45 / 92.02 ±1.07 / 93.66 ms │      no change │
│ QQuery 52 │        23.93 / 24.48 ±0.46 / 25.29 ms │    26.40 / 27.14 ±0.72 / 28.46 ms │   1.11x slower │
│ QQuery 53 │        29.39 / 30.03 ±0.37 / 30.39 ms │    29.38 / 29.79 ±0.38 / 30.48 ms │      no change │
│ QQuery 54 │        56.87 / 57.10 ±0.15 / 57.34 ms │    25.14 / 25.26 ±0.19 / 25.65 ms │  +2.26x faster │
│ QQuery 55 │        24.36 / 24.72 ±0.28 / 25.22 ms │    24.99 / 25.39 ±0.27 / 25.71 ms │      no change │
│ QQuery 56 │        40.63 / 41.10 ±0.46 / 41.80 ms │    38.01 / 38.56 ±0.46 / 39.33 ms │  +1.07x faster │
│ QQuery 57 │     174.91 / 176.75 ±3.19 / 183.12 ms │ 173.44 / 177.50 ±3.07 / 182.95 ms │      no change │
│ QQuery 58 │     113.03 / 114.86 ±2.98 / 120.80 ms │    52.03 / 52.56 ±0.43 / 53.19 ms │  +2.19x faster │
│ QQuery 59 │     117.07 / 119.10 ±2.15 / 122.88 ms │ 116.38 / 117.98 ±1.44 / 120.54 ms │      no change │
│ QQuery 60 │        39.48 / 39.91 ±0.36 / 40.39 ms │    38.29 / 39.20 ±0.53 / 39.67 ms │      no change │
│ QQuery 61 │        12.23 / 12.39 ±0.18 / 12.72 ms │    10.72 / 10.91 ±0.16 / 11.14 ms │  +1.14x faster │
│ QQuery 62 │        46.22 / 46.79 ±0.38 / 47.22 ms │    30.53 / 30.76 ±0.17 / 30.96 ms │  +1.52x faster │
│ QQuery 63 │        29.26 / 29.50 ±0.28 / 30.04 ms │    29.38 / 29.54 ±0.14 / 29.76 ms │      no change │
│ QQuery 64 │     404.50 / 410.07 ±4.70 / 416.15 ms │ 362.28 / 366.70 ±2.67 / 370.61 ms │  +1.12x faster │
│ QQuery 65 │     121.76 / 125.70 ±3.05 / 130.96 ms │ 124.46 / 130.73 ±5.41 / 138.32 ms │      no change │
│ QQuery 66 │        81.29 / 81.75 ±0.40 / 82.36 ms │    69.19 / 69.90 ±0.44 / 70.53 ms │  +1.17x faster │
│ QQuery 67 │     239.42 / 242.92 ±3.69 / 248.42 ms │ 286.69 / 293.79 ±5.81 / 300.47 ms │   1.21x slower │
│ QQuery 68 │        11.83 / 12.17 ±0.26 / 12.60 ms │    15.70 / 16.08 ±0.29 / 16.49 ms │   1.32x slower │
│ QQuery 69 │        56.99 / 57.39 ±0.62 / 58.61 ms │    65.75 / 66.01 ±0.27 / 66.53 ms │   1.15x slower │
│ QQuery 70 │     105.87 / 108.42 ±2.07 / 112.05 ms │    82.56 / 84.85 ±4.27 / 93.38 ms │  +1.28x faster │
│ QQuery 71 │        34.91 / 37.84 ±4.85 / 47.52 ms │    35.38 / 36.38 ±0.86 / 37.48 ms │      no change │
│ QQuery 72 │ 2017.69 / 2135.68 ±97.20 / 2252.91 ms │    79.77 / 80.76 ±1.02 / 82.64 ms │ +26.45x faster │
│ QQuery 73 │          9.81 / 9.97 ±0.19 / 10.32 ms │     9.72 / 10.05 ±0.23 / 10.28 ms │      no change │
│ QQuery 74 │     168.69 / 172.70 ±3.12 / 177.70 ms │ 180.65 / 196.37 ±8.69 / 206.25 ms │   1.14x slower │
│ QQuery 75 │     149.42 / 152.38 ±4.92 / 162.18 ms │ 109.37 / 113.76 ±5.40 / 124.02 ms │  +1.34x faster │
│ QQuery 76 │        35.17 / 35.73 ±0.48 / 36.32 ms │    35.33 / 35.65 ±0.22 / 36.01 ms │      no change │
│ QQuery 77 │        61.52 / 62.21 ±0.50 / 63.04 ms │    61.57 / 62.03 ±0.35 / 62.36 ms │      no change │
│ QQuery 78 │     195.32 / 197.88 ±1.94 / 199.96 ms │ 194.76 / 199.53 ±4.59 / 208.10 ms │      no change │
│ QQuery 79 │        66.71 / 68.31 ±1.33 / 70.26 ms │    80.64 / 83.01 ±3.00 / 88.76 ms │   1.22x slower │
│ QQuery 80 │      99.01 / 100.81 ±1.64 / 103.18 ms │  98.68 / 100.49 ±1.24 / 102.56 ms │      no change │
│ QQuery 81 │        25.78 / 25.97 ±0.17 / 26.27 ms │    25.31 / 25.65 ±0.17 / 25.78 ms │      no change │
│ QQuery 82 │        16.21 / 17.52 ±2.13 / 21.76 ms │    17.82 / 18.38 ±0.69 / 19.70 ms │      no change │
│ QQuery 83 │        39.92 / 41.78 ±2.23 / 45.68 ms │    26.74 / 27.38 ±0.61 / 28.44 ms │  +1.53x faster │
│ QQuery 84 │        29.99 / 30.21 ±0.19 / 30.55 ms │    37.97 / 40.98 ±3.37 / 47.01 ms │   1.36x slower │
│ QQuery 85 │     105.72 / 106.77 ±1.03 / 108.59 ms │ 102.64 / 103.35 ±0.87 / 105.07 ms │      no change │
│ QQuery 86 │        25.64 / 27.19 ±2.36 / 31.87 ms │    25.42 / 25.53 ±0.14 / 25.81 ms │  +1.06x faster │
│ QQuery 87 │        63.04 / 63.96 ±0.93 / 65.46 ms │    62.17 / 65.03 ±3.41 / 71.65 ms │      no change │
│ QQuery 88 │        63.78 / 64.47 ±0.58 / 65.52 ms │    58.87 / 59.30 ±0.46 / 60.01 ms │  +1.09x faster │
│ QQuery 89 │        35.43 / 35.57 ±0.12 / 35.76 ms │    31.77 / 32.16 ±0.24 / 32.45 ms │  +1.11x faster │
│ QQuery 90 │        17.17 / 17.37 ±0.19 / 17.72 ms │    14.66 / 14.88 ±0.16 / 15.07 ms │  +1.17x faster │
│ QQuery 91 │        46.14 / 47.37 ±1.83 / 51.00 ms │    41.04 / 41.29 ±0.22 / 41.68 ms │  +1.15x faster │
│ QQuery 92 │        29.52 / 30.40 ±0.66 / 31.53 ms │    29.47 / 29.69 ±0.21 / 30.08 ms │      no change │
│ QQuery 93 │        49.74 / 50.92 ±1.03 / 52.40 ms │    49.69 / 51.63 ±2.73 / 56.98 ms │      no change │
│ QQuery 94 │        37.76 / 38.23 ±0.59 / 39.35 ms │    37.60 / 38.07 ±0.27 / 38.33 ms │      no change │
│ QQuery 95 │        79.83 / 81.88 ±2.71 / 87.15 ms │    79.29 / 80.30 ±0.57 / 80.81 ms │      no change │
│ QQuery 96 │        24.00 / 24.65 ±1.00 / 26.60 ms │    20.74 / 20.93 ±0.15 / 21.17 ms │  +1.18x faster │
│ QQuery 97 │        46.95 / 47.40 ±0.31 / 47.86 ms │    46.98 / 49.43 ±2.73 / 54.48 ms │      no change │
│ QQuery 98 │        43.18 / 43.72 ±0.59 / 44.80 ms │    27.49 / 27.85 ±0.23 / 28.08 ms │  +1.57x faster │
│ QQuery 99 │        71.12 / 75.18 ±3.92 / 82.38 ms │    44.88 / 45.41 ±0.48 / 46.17 ms │  +1.66x faster │
└───────────┴───────────────────────────────────────┴───────────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 10018.87ms │
│ Total Time (perf_join-order-enumeration)   │  7312.59ms │
│ Average Time (HEAD)                        │   101.20ms │
│ Average Time (perf_join-order-enumeration) │    73.86ms │
│ Queries Faster                             │         39 │
│ Queries Slower                             │         13 │
│ Queries with No Change                     │         47 │
│ Queries with Failure                       │          0 │
└────────────────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 55.0s
Peak memory 2.2 GiB
Avg memory 1.5 GiB
CPU user 224.2s
CPU sys 6.2s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 40.0s
Peak memory 2.1 GiB
Avg memory 1.3 GiB
CPU user 102.2s
CPU sys 5.2s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing perf/join-order-enumeration (a329cf3) to bb038a6 (merge-base) diff

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │    1.27 ms │                     1.32 ms │     no change │
│ QQuery 1  │   11.84 ms │                    12.31 ms │     no change │
│ QQuery 2  │   37.28 ms │                    37.26 ms │     no change │
│ QQuery 3  │   31.35 ms │                    32.12 ms │     no change │
│ QQuery 4  │  232.77 ms │                   244.64 ms │  1.05x slower │
│ QQuery 5  │  279.72 ms │                   295.40 ms │  1.06x slower │
│ QQuery 6  │    1.30 ms │                     1.32 ms │     no change │
│ QQuery 7  │   13.70 ms │                    13.94 ms │     no change │
│ QQuery 8  │  340.69 ms │                   338.79 ms │     no change │
│ QQuery 9  │  472.51 ms │                   496.11 ms │     no change │
│ QQuery 10 │   70.94 ms │                    72.48 ms │     no change │
│ QQuery 11 │   82.64 ms │                    83.89 ms │     no change │
│ QQuery 12 │  277.04 ms │                   285.69 ms │     no change │
│ QQuery 13 │  390.43 ms │                   393.04 ms │     no change │
│ QQuery 14 │  296.27 ms │                   302.22 ms │     no change │
│ QQuery 15 │  289.89 ms │                   308.38 ms │  1.06x slower │
│ QQuery 16 │  646.89 ms │                   661.06 ms │     no change │
│ QQuery 17 │  657.87 ms │                   663.87 ms │     no change │
│ QQuery 18 │ 1368.75 ms │                  1367.19 ms │     no change │
│ QQuery 19 │   28.50 ms │                    29.64 ms │     no change │
│ QQuery 20 │  527.36 ms │                   526.14 ms │     no change │
│ QQuery 21 │  526.04 ms │                   525.54 ms │     no change │
│ QQuery 22 │ 1014.69 ms │                  1015.70 ms │     no change │
│ QQuery 23 │ 3175.23 ms │                  3193.14 ms │     no change │
│ QQuery 24 │   42.08 ms │                    42.50 ms │     no change │
│ QQuery 25 │  114.20 ms │                   115.00 ms │     no change │
│ QQuery 26 │   42.12 ms │                    41.48 ms │     no change │
│ QQuery 27 │  522.90 ms │                   534.30 ms │     no change │
│ QQuery 28 │ 2980.98 ms │                  3002.02 ms │     no change │
│ QQuery 29 │   42.52 ms │                    42.36 ms │     no change │
│ QQuery 30 │  314.54 ms │                   319.24 ms │     no change │
│ QQuery 31 │  295.68 ms │                   307.55 ms │     no change │
│ QQuery 32 │ 1010.57 ms │                  1004.36 ms │     no change │
│ QQuery 33 │ 1582.97 ms │                  1582.34 ms │     no change │
│ QQuery 34 │ 1565.64 ms │                  1624.10 ms │     no change │
│ QQuery 35 │  306.13 ms │                   327.12 ms │  1.07x slower │
│ QQuery 36 │   75.16 ms │                    70.43 ms │ +1.07x faster │
│ QQuery 37 │   37.34 ms │                    37.27 ms │     no change │
│ QQuery 38 │   42.54 ms │                    41.57 ms │     no change │
│ QQuery 39 │  157.43 ms │                   159.10 ms │     no change │
│ QQuery 40 │   15.10 ms │                    14.89 ms │     no change │
│ QQuery 41 │   14.55 ms │                    14.85 ms │     no change │
│ QQuery 42 │   14.08 ms │                    14.41 ms │     no change │
└───────────┴────────────┴─────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 19951.53ms │
│ Total Time (perf_join-order-enumeration)   │ 20196.12ms │
│ Average Time (HEAD)                        │   463.99ms │
│ Average Time (perf_join-order-enumeration) │   469.68ms │
│ Queries Faster                             │          1 │
│ Queries Slower                             │          4 │
│ Queries with No Change                     │         38 │
│ Queries with Failure                       │          0 │
└────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃           perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.27 / 4.09 ±5.50 / 15.08 ms │          1.32 / 4.34 ±5.83 / 15.99 ms │  1.06x slower │
│ QQuery 1  │        11.84 / 12.41 ±0.32 / 12.79 ms │        12.31 / 12.74 ±0.28 / 13.18 ms │     no change │
│ QQuery 2  │        37.28 / 37.57 ±0.26 / 38.02 ms │        37.26 / 37.62 ±0.38 / 38.35 ms │     no change │
│ QQuery 3  │        31.35 / 32.13 ±0.62 / 33.00 ms │        32.12 / 32.66 ±0.44 / 33.36 ms │     no change │
│ QQuery 4  │     232.77 / 237.18 ±3.05 / 241.44 ms │     244.64 / 247.53 ±2.45 / 251.34 ms │     no change │
│ QQuery 5  │     279.72 / 286.93 ±4.68 / 292.12 ms │     295.40 / 297.85 ±2.66 / 301.45 ms │     no change │
│ QQuery 6  │           1.30 / 1.44 ±0.21 / 1.85 ms │           1.32 / 1.47 ±0.23 / 1.93 ms │     no change │
│ QQuery 7  │        13.70 / 14.26 ±0.43 / 14.98 ms │        13.94 / 14.06 ±0.16 / 14.38 ms │     no change │
│ QQuery 8  │     340.69 / 350.18 ±7.79 / 364.04 ms │    338.79 / 359.30 ±16.87 / 381.05 ms │     no change │
│ QQuery 9  │    472.51 / 488.51 ±11.63 / 507.96 ms │     496.11 / 505.33 ±6.88 / 515.88 ms │     no change │
│ QQuery 10 │        70.94 / 71.73 ±0.64 / 72.61 ms │        72.48 / 73.33 ±0.45 / 73.80 ms │     no change │
│ QQuery 11 │        82.64 / 84.34 ±1.72 / 86.82 ms │        83.89 / 85.63 ±2.37 / 90.32 ms │     no change │
│ QQuery 12 │     277.04 / 285.59 ±9.78 / 303.91 ms │    285.69 / 309.70 ±17.21 / 335.80 ms │  1.08x slower │
│ QQuery 13 │     390.43 / 399.82 ±8.10 / 411.52 ms │    393.04 / 408.38 ±12.89 / 424.36 ms │     no change │
│ QQuery 14 │    296.27 / 308.07 ±12.79 / 332.33 ms │     302.22 / 310.34 ±6.17 / 318.69 ms │     no change │
│ QQuery 15 │     289.89 / 298.38 ±8.93 / 313.57 ms │     308.38 / 313.38 ±3.65 / 319.24 ms │  1.05x slower │
│ QQuery 16 │    646.89 / 673.00 ±24.96 / 709.45 ms │    661.06 / 673.65 ±10.13 / 688.06 ms │     no change │
│ QQuery 17 │    657.87 / 681.46 ±14.19 / 698.50 ms │    663.87 / 677.24 ±16.68 / 709.49 ms │     no change │
│ QQuery 18 │ 1368.75 / 1388.17 ±15.23 / 1402.52 ms │ 1367.19 / 1384.11 ±18.56 / 1408.91 ms │     no change │
│ QQuery 19 │       28.50 / 36.71 ±10.66 / 55.15 ms │        29.64 / 36.37 ±7.76 / 48.22 ms │     no change │
│ QQuery 20 │    527.36 / 545.33 ±18.96 / 580.04 ms │     526.14 / 528.29 ±1.69 / 530.39 ms │     no change │
│ QQuery 21 │     526.04 / 530.58 ±5.18 / 538.20 ms │     525.54 / 530.81 ±5.05 / 538.14 ms │     no change │
│ QQuery 22 │  1014.69 / 1026.33 ±7.27 / 1036.85 ms │  1015.70 / 1024.95 ±9.25 / 1038.66 ms │     no change │
│ QQuery 23 │ 3175.23 / 3227.74 ±27.97 / 3251.84 ms │ 3193.14 / 3238.91 ±35.29 / 3285.22 ms │     no change │
│ QQuery 24 │        42.08 / 51.74 ±9.64 / 68.66 ms │        42.50 / 45.14 ±3.45 / 51.52 ms │ +1.15x faster │
│ QQuery 25 │     114.20 / 116.90 ±3.37 / 123.55 ms │    115.00 / 125.21 ±14.24 / 152.14 ms │  1.07x slower │
│ QQuery 26 │        42.12 / 43.44 ±0.94 / 45.00 ms │        41.48 / 42.23 ±0.50 / 42.81 ms │     no change │
│ QQuery 27 │     522.90 / 532.46 ±6.17 / 539.95 ms │     534.30 / 539.95 ±3.41 / 544.24 ms │     no change │
│ QQuery 28 │ 2980.98 / 3011.80 ±24.68 / 3041.19 ms │ 3002.02 / 3039.22 ±27.39 / 3070.36 ms │     no change │
│ QQuery 29 │       42.52 / 48.84 ±12.39 / 73.61 ms │        42.36 / 49.85 ±9.06 / 62.01 ms │     no change │
│ QQuery 30 │    314.54 / 326.79 ±12.02 / 347.96 ms │    319.24 / 334.80 ±10.31 / 348.92 ms │     no change │
│ QQuery 31 │     295.68 / 305.11 ±7.32 / 313.43 ms │    307.55 / 321.55 ±15.52 / 349.95 ms │  1.05x slower │
│ QQuery 32 │ 1010.57 / 1069.71 ±35.77 / 1107.02 ms │ 1004.36 / 1049.57 ±25.79 / 1079.39 ms │     no change │
│ QQuery 33 │ 1582.97 / 1616.87 ±27.89 / 1652.86 ms │ 1582.34 / 1609.95 ±15.91 / 1626.58 ms │     no change │
│ QQuery 34 │ 1565.64 / 1616.37 ±28.15 / 1641.08 ms │ 1624.10 / 1646.47 ±33.70 / 1712.45 ms │     no change │
│ QQuery 35 │    306.13 / 339.86 ±32.64 / 397.11 ms │    327.12 / 334.45 ±10.80 / 355.96 ms │     no change │
│ QQuery 36 │       75.16 / 85.22 ±8.65 / 100.69 ms │        70.43 / 76.50 ±5.40 / 84.37 ms │ +1.11x faster │
│ QQuery 37 │        37.34 / 41.49 ±6.66 / 54.78 ms │        37.27 / 39.69 ±1.34 / 40.83 ms │     no change │
│ QQuery 38 │        42.54 / 44.22 ±0.94 / 45.28 ms │        41.57 / 44.59 ±2.38 / 48.36 ms │     no change │
│ QQuery 39 │     157.43 / 170.48 ±7.17 / 177.00 ms │     159.10 / 168.85 ±6.23 / 177.03 ms │     no change │
│ QQuery 40 │        15.10 / 15.40 ±0.31 / 15.89 ms │        14.89 / 15.91 ±1.07 / 17.86 ms │     no change │
│ QQuery 41 │        14.55 / 14.68 ±0.08 / 14.79 ms │        14.85 / 15.08 ±0.19 / 15.37 ms │     no change │
│ QQuery 42 │        14.08 / 14.29 ±0.12 / 14.40 ms │        14.41 / 14.61 ±0.23 / 15.06 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 20487.57ms │
│ Total Time (perf_join-order-enumeration)   │ 20621.59ms │
│ Average Time (HEAD)                        │   476.46ms │
│ Average Time (perf_join-order-enumeration) │   479.57ms │
│ Queries Faster                             │          2 │
│ Queries Slower                             │          5 │
│ Queries with No Change                     │         36 │
│ Queries with Failure                       │          0 │
└────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 105.0s
Peak memory 11.5 GiB
Avg memory 4.2 GiB
CPU user 1045.3s
CPU sys 76.4s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 105.0s
Peak memory 11.6 GiB
Avg memory 4.4 GiB
CPU user 1049.3s
CPU sys 81.7s
Peak spill 0 B

File an issue against this benchmark runner

TPC-DS q6 got 37% slower. Its `date_dim` is filtered by a subquery and
DataFusion estimates that subplan at 14,610 rows against 31 real ones, so
no join in the query appears to reduce anything, every order ties, and the
winner is picked essentially arbitrarily -- a coin flip that costs 37%.

Only replace the planner's order when the enumerated one is cheaper by a
clear margin, configured by
`datafusion.optimizer.join_enumeration_min_improvement` (default 10%).
Measured: q6's "gain" was under 1%, while every TPC-H win survives a margin
of 10% or more.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 18, 2026

Copy link
Copy Markdown

Thank you for opening this pull request!

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

Details
     Cloning apache/main
    Building datafusion v55.0.0 (current)
       Built [  62.220s] (current)
     Parsing datafusion v55.0.0 (current)
      Parsed [   0.037s] (current)
    Building datafusion v55.0.0 (baseline)
       Built [  58.075s] (baseline)
     Parsing datafusion v55.0.0 (baseline)
      Parsed [   0.038s] (baseline)
    Checking datafusion v55.0.0 -> v55.0.0 (no change; assume patch)
     Checked [   0.966s] 223 checks: 223 pass, 31 skip
     Summary no semver update required
    Finished [ 123.205s] datafusion
    Building datafusion-common v55.0.0 (current)
       Built [  33.935s] (current)
     Parsing datafusion-common v55.0.0 (current)
      Parsed [   0.067s] (current)
    Building datafusion-common v55.0.0 (baseline)
       Built [  34.067s] (baseline)
     Parsing datafusion-common v55.0.0 (baseline)
      Parsed [   0.067s] (baseline)
    Checking datafusion-common v55.0.0 -> v55.0.0 (no change; assume patch)
     Checked [   1.048s] 223 checks: 222 pass, 1 fail, 0 warn, 31 skip

--- failure constructible_struct_adds_field: struct exhaustively constructible through public API adds field ---

Description:
A pub struct that could be exhaustively constructed with a literal using only public API has a new pub field, breaking existing exhaustive literals.
        ref: https://doc.rust-lang.org/reference/expressions/struct-expr.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.50.0/src/lints/constructible_struct_adds_field.ron

Failed in:
  field OptimizerOptions.join_enumeration in /home/runner/work/datafusion/datafusion/datafusion/common/src/config.rs:1550
  field OptimizerOptions.join_enumeration_limit in /home/runner/work/datafusion/datafusion/datafusion/common/src/config.rs:1550

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  70.249s] datafusion-common
    Building datafusion-physical-optimizer v55.0.0 (current)
       Built [  40.317s] (current)
     Parsing datafusion-physical-optimizer v55.0.0 (current)
      Parsed [   0.034s] (current)
    Building datafusion-physical-optimizer v55.0.0 (baseline)
       Built [  40.350s] (baseline)
     Parsing datafusion-physical-optimizer v55.0.0 (baseline)
      Parsed [   0.024s] (baseline)
    Checking datafusion-physical-optimizer v55.0.0 -> v55.0.0 (no change; assume patch)
     Checked [   0.157s] 223 checks: 223 pass, 31 skip
     Summary no semver update required
    Finished [  82.351s] datafusion-physical-optimizer
    Building datafusion-physical-plan v55.0.0 (current)
       Built [  37.877s] (current)
     Parsing datafusion-physical-plan v55.0.0 (current)
      Parsed [   0.158s] (current)
    Building datafusion-physical-plan v55.0.0 (baseline)
       Built [  37.851s] (baseline)
     Parsing datafusion-physical-plan v55.0.0 (baseline)
      Parsed [   0.159s] (baseline)
    Checking datafusion-physical-plan v55.0.0 -> v55.0.0 (no change; assume patch)
     Checked [   1.062s] 223 checks: 223 pass, 31 skip
     Summary no semver update required
    Finished [  78.794s] datafusion-physical-plan
    Building datafusion-sqllogictest v55.0.0 (current)
       Built [ 100.660s] (current)
     Parsing datafusion-sqllogictest v55.0.0 (current)
      Parsed [   0.025s] (current)
    Building datafusion-sqllogictest v55.0.0 (baseline)
       Built [ 100.639s] (baseline)
     Parsing datafusion-sqllogictest v55.0.0 (baseline)
      Parsed [   0.024s] (baseline)
    Checking datafusion-sqllogictest v55.0.0 -> v55.0.0 (no change; assume patch)
     Checked [   0.122s] 223 checks: 223 pass, 31 skip
     Summary no semver update required
    Finished [ 204.719s] datafusion-sqllogictest

@github-actions github-actions Bot added the auto detected api change Auto detected API change label Aug 18, 2026
Interval analysis rejects a predicate outright if any part of it is out of
reach, and `OR` is out of reach -- which an `IN` list becomes once the
planner expands it. So a predicate that is mostly analyzable fell back to
the flat default selectivity for all of it. TPC-DS q68 filters `date_dim`
by `d_dom between 1 and 2 AND d_year IN (1999, 2000, 2001)`, which was
estimated at 20% of the table, 14,610 rows, against 72 that survive.

Split the predicate into top-level conjuncts, analyze the ones interval
arithmetic supports, and estimate an `IN` list -- or the chain of `OR`ed
equalities a short list expands into -- as the fraction of the column's
values it selects, the same reasoning `col = literal` gets from `1 / NDV`.
An unrecognized conjunct still contributes the default, once, as the whole
predicate used to. The predicate is passed through untouched when nothing
was split off it, because rebuilding the conjunction re-associates it and
interval propagation is sensitive to the shape of the tree it walks.

That `date_dim` filter is now estimated at 71 rows. Better estimates also
mean better plans: TPC-DS q17 goes from 1.05x slower to 0.74x with join
enumeration on, q6 to 0.99x and q68 to 1.02x, while every TPC-H win holds
and q7 improves to 0.65x. The baseline gains too, independently of
enumeration: q22 drops from 147ms to 116ms.

One expectation moves: a cross join whose filtered side is now correctly
estimated smaller swaps its inputs, which reorders the rows of a query that
does not ask for an order.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Dandandan

Copy link
Copy Markdown
Contributor Author

run benchmarks

@Dandandan

Copy link
Copy Markdown
Contributor Author

run benchmark tpcds

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5330114082-1651-hmwww 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

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

Comparing perf/join-order-enumeration (de80dd7) to bb038a6 (merge-base) diff

Run configuration
run benchmark clickbench_partitioned

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5330115270-1654-8qh9g 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

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

Comparing perf/join-order-enumeration (de80dd7) to bb038a6 (merge-base) diff

Run configuration
run benchmark tpcds

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5330114082-1652-thpnq 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

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

Comparing perf/join-order-enumeration (de80dd7) to bb038a6 (merge-base) diff

Run configuration
run benchmark tpcds

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5330114082-1653-49dm6 6.12.85+ #1 SMP Wed Jun 17 20:31:55 UTC 2026 aarch64 GNU/Linux

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

Comparing perf/join-order-enumeration (de80dd7) to bb038a6 (merge-base) diff

Run configuration
run benchmark tpch

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing perf/join-order-enumeration (de80dd7) to bb038a6 (merge-base) diff

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃     HEAD ┃ perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.06 ms │                    37.90 ms │     no change │
│ QQuery 2  │ 19.19 ms │                    16.74 ms │ +1.15x faster │
│ QQuery 3  │ 30.55 ms │                    32.70 ms │  1.07x slower │
│ QQuery 4  │ 17.35 ms │                    17.26 ms │     no change │
│ QQuery 5  │ 39.23 ms │                    39.72 ms │     no change │
│ QQuery 6  │ 15.84 ms │                    16.00 ms │     no change │
│ QQuery 7  │ 44.19 ms │                    32.52 ms │ +1.36x faster │
│ QQuery 8  │ 41.68 ms │                    39.30 ms │ +1.06x faster │
│ QQuery 9  │ 48.52 ms │                    47.89 ms │     no change │
│ QQuery 10 │ 41.78 ms │                    41.80 ms │     no change │
│ QQuery 11 │ 12.98 ms │                    13.52 ms │     no change │
│ QQuery 12 │ 23.68 ms │                    22.86 ms │     no change │
│ QQuery 13 │ 31.43 ms │                    32.41 ms │     no change │
│ QQuery 14 │ 22.79 ms │                    23.04 ms │     no change │
│ QQuery 15 │ 30.26 ms │                    30.25 ms │     no change │
│ QQuery 16 │ 13.64 ms │                    13.71 ms │     no change │
│ QQuery 17 │ 69.61 ms │                    69.21 ms │     no change │
│ QQuery 18 │ 58.75 ms │                    43.43 ms │ +1.35x faster │
│ QQuery 19 │ 32.30 ms │                    33.55 ms │     no change │
│ QQuery 20 │ 30.84 ms │                    31.51 ms │     no change │
│ QQuery 21 │ 55.14 ms │                    51.99 ms │ +1.06x faster │
│ QQuery 22 │ 13.71 ms │                    13.94 ms │     no change │
└───────────┴──────────┴─────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                          ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 731.54ms │
│ Total Time (perf_join-order-enumeration)   │ 701.25ms │
│ Average Time (HEAD)                        │  33.25ms │
│ Average Time (perf_join-order-enumeration) │  31.87ms │
│ Queries Faster                             │        5 │
│ Queries Slower                             │        1 │
│ Queries with No Change                     │       16 │
│ Queries with Failure                       │        0 │
└────────────────────────────────────────────┴──────────┘

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃    perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.06 / 39.13 ±1.67 / 42.42 ms │ 37.90 / 38.60 ±1.22 / 41.04 ms │     no change │
│ QQuery 2  │ 19.19 / 19.83 ±0.71 / 21.07 ms │ 16.74 / 17.09 ±0.61 / 18.30 ms │ +1.16x faster │
│ QQuery 3  │ 30.55 / 31.81 ±1.18 / 33.50 ms │ 32.70 / 33.22 ±0.37 / 33.66 ms │     no change │
│ QQuery 4  │ 17.35 / 18.27 ±0.77 / 19.43 ms │ 17.26 / 17.48 ±0.24 / 17.89 ms │     no change │
│ QQuery 5  │ 39.23 / 39.91 ±0.40 / 40.45 ms │ 39.72 / 42.50 ±1.94 / 45.80 ms │  1.06x slower │
│ QQuery 6  │ 15.84 / 16.64 ±0.90 / 18.30 ms │ 16.00 / 16.66 ±0.54 / 17.49 ms │     no change │
│ QQuery 7  │ 44.19 / 45.20 ±0.85 / 46.60 ms │ 32.52 / 32.76 ±0.14 / 32.97 ms │ +1.38x faster │
│ QQuery 8  │ 41.68 / 42.02 ±0.19 / 42.17 ms │ 39.30 / 40.01 ±0.90 / 41.71 ms │     no change │
│ QQuery 9  │ 48.52 / 49.90 ±0.87 / 51.11 ms │ 47.89 / 50.13 ±1.35 / 51.97 ms │     no change │
│ QQuery 10 │ 41.78 / 41.95 ±0.13 / 42.10 ms │ 41.80 / 42.13 ±0.26 / 42.44 ms │     no change │
│ QQuery 11 │ 12.98 / 13.26 ±0.17 / 13.45 ms │ 13.52 / 13.71 ±0.15 / 13.95 ms │     no change │
│ QQuery 12 │ 23.68 / 24.06 ±0.36 / 24.73 ms │ 22.86 / 23.02 ±0.09 / 23.12 ms │     no change │
│ QQuery 13 │ 31.43 / 33.28 ±1.17 / 34.61 ms │ 32.41 / 33.21 ±1.02 / 35.19 ms │     no change │
│ QQuery 14 │ 22.79 / 23.12 ±0.20 / 23.36 ms │ 23.04 / 23.31 ±0.21 / 23.64 ms │     no change │
│ QQuery 15 │ 30.26 / 31.04 ±0.66 / 31.99 ms │ 30.25 / 30.50 ±0.28 / 31.03 ms │     no change │
│ QQuery 16 │ 13.64 / 13.73 ±0.10 / 13.91 ms │ 13.71 / 13.99 ±0.27 / 14.33 ms │     no change │
│ QQuery 17 │ 69.61 / 70.89 ±1.11 / 72.83 ms │ 69.21 / 70.70 ±1.26 / 72.80 ms │     no change │
│ QQuery 18 │ 58.75 / 59.81 ±0.92 / 61.26 ms │ 43.43 / 43.72 ±0.21 / 44.03 ms │ +1.37x faster │
│ QQuery 19 │ 32.30 / 32.81 ±0.71 / 34.20 ms │ 33.55 / 33.97 ±0.28 / 34.38 ms │     no change │
│ QQuery 20 │ 30.84 / 31.52 ±0.61 / 32.68 ms │ 31.51 / 31.95 ±0.46 / 32.80 ms │     no change │
│ QQuery 21 │ 55.14 / 56.83 ±1.52 / 59.22 ms │ 51.99 / 52.88 ±0.77 / 54.18 ms │ +1.07x faster │
│ QQuery 22 │ 13.71 / 14.10 ±0.45 / 14.97 ms │ 13.94 / 14.14 ±0.20 / 14.52 ms │     no change │
└───────────┴────────────────────────────────┴────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                          ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 749.11ms │
│ Total Time (perf_join-order-enumeration)   │ 715.67ms │
│ Average Time (HEAD)                        │  34.05ms │
│ Average Time (perf_join-order-enumeration) │  32.53ms │
│ Queries Faster                             │        4 │
│ Queries Slower                             │        1 │
│ Queries with No Change                     │       17 │
│ Queries with Failure                       │        0 │
└────────────────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

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

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1016.5 MiB
Avg memory 447.2 MiB
CPU user 19.7s
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 perf/join-order-enumeration (de80dd7) to bb038a6 (merge-base) diff

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ perf_join-order-enumeration ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 1  │    5.55 ms │                     5.78 ms │      no change │
│ QQuery 2  │   79.93 ms │                    80.39 ms │      no change │
│ QQuery 3  │   28.97 ms │                    25.92 ms │  +1.12x faster │
│ QQuery 4  │  476.37 ms │                   483.94 ms │      no change │
│ QQuery 5  │   52.10 ms │                    52.47 ms │      no change │
│ QQuery 6  │   36.47 ms │                    36.84 ms │      no change │
│ QQuery 7  │   94.27 ms │                    80.90 ms │  +1.17x faster │
│ QQuery 8  │   36.35 ms │                    36.87 ms │      no change │
│ QQuery 9  │   52.17 ms │                    51.34 ms │      no change │
│ QQuery 10 │   62.26 ms │                    63.12 ms │      no change │
│ QQuery 11 │  293.73 ms │                   237.69 ms │  +1.24x faster │
│ QQuery 12 │   28.45 ms │                    28.40 ms │      no change │
│ QQuery 13 │  117.70 ms │                   118.39 ms │      no change │
│ QQuery 14 │  415.83 ms │                   368.55 ms │  +1.13x faster │
│ QQuery 15 │   57.10 ms │                    20.78 ms │  +2.75x faster │
│ QQuery 16 │    6.72 ms │                     7.03 ms │      no change │
│ QQuery 17 │   79.46 ms │                    60.33 ms │  +1.32x faster │
│ QQuery 18 │  123.31 ms │                   118.64 ms │      no change │
│ QQuery 19 │   41.39 ms │                    42.40 ms │      no change │
│ QQuery 20 │   35.33 ms │                    35.61 ms │      no change │
│ QQuery 21 │   17.31 ms │                    13.21 ms │  +1.31x faster │
│ QQuery 22 │   62.93 ms │                    62.62 ms │      no change │
│ QQuery 23 │  343.32 ms │                   289.55 ms │  +1.19x faster │
│ QQuery 24 │  222.55 ms │                   162.12 ms │  +1.37x faster │
│ QQuery 25 │  109.29 ms │                    78.65 ms │  +1.39x faster │
│ QQuery 26 │   57.38 ms │                    57.14 ms │      no change │
│ QQuery 27 │    6.33 ms │                     6.46 ms │      no change │
│ QQuery 28 │   58.25 ms │                    57.23 ms │      no change │
│ QQuery 29 │   96.89 ms │                    66.07 ms │  +1.47x faster │
│ QQuery 30 │   32.22 ms │                    33.08 ms │      no change │
│ QQuery 31 │  111.05 ms │                   111.34 ms │      no change │
│ QQuery 32 │   19.93 ms │                    20.54 ms │      no change │
│ QQuery 33 │   37.49 ms │                    38.42 ms │      no change │
│ QQuery 34 │    9.94 ms │                     6.15 ms │  +1.62x faster │
│ QQuery 35 │   71.96 ms │                    73.79 ms │      no change │
│ QQuery 36 │    5.88 ms │                     5.92 ms │      no change │
│ QQuery 37 │    6.81 ms │                     6.89 ms │      no change │
│ QQuery 38 │   61.40 ms │                    62.20 ms │      no change │
│ QQuery 39 │   90.45 ms │                    78.67 ms │  +1.15x faster │
│ QQuery 40 │   23.34 ms │                    22.19 ms │      no change │
│ QQuery 41 │   11.25 ms │                    11.21 ms │      no change │
│ QQuery 42 │   23.63 ms │                    26.56 ms │   1.12x slower │
│ QQuery 43 │    5.15 ms │                     5.09 ms │      no change │
│ QQuery 44 │    9.33 ms │                     9.59 ms │      no change │
│ QQuery 45 │   37.57 ms │                    23.16 ms │  +1.62x faster │
│ QQuery 46 │   11.86 ms │                     8.24 ms │  +1.44x faster │
│ QQuery 47 │  225.14 ms │                   228.81 ms │      no change │
│ QQuery 48 │   94.79 ms │                    97.10 ms │      no change │
│ QQuery 49 │   76.32 ms │                    72.56 ms │      no change │
│ QQuery 50 │   58.18 ms │                    53.81 ms │  +1.08x faster │
│ QQuery 51 │   91.87 ms │                    91.11 ms │      no change │
│ QQuery 52 │   24.10 ms │                    26.57 ms │   1.10x slower │
│ QQuery 53 │   28.96 ms │                    29.27 ms │      no change │
│ QQuery 54 │   54.22 ms │                    24.74 ms │  +2.19x faster │
│ QQuery 55 │   23.54 ms │                    25.75 ms │   1.09x slower │
│ QQuery 56 │   39.50 ms │                    41.78 ms │   1.06x slower │
│ QQuery 57 │  176.96 ms │                   177.33 ms │      no change │
│ QQuery 58 │  111.60 ms │                    51.64 ms │  +2.16x faster │
│ QQuery 59 │  117.01 ms │                   116.96 ms │      no change │
│ QQuery 60 │   39.18 ms │                    39.81 ms │      no change │
│ QQuery 61 │   12.14 ms │                    10.82 ms │  +1.12x faster │
│ QQuery 62 │   46.11 ms │                    30.62 ms │  +1.51x faster │
│ QQuery 63 │   29.25 ms │                    29.18 ms │      no change │
│ QQuery 64 │  406.30 ms │                   237.03 ms │  +1.71x faster │
│ QQuery 65 │  124.84 ms │                   122.97 ms │      no change │
│ QQuery 66 │   81.86 ms │                    67.68 ms │  +1.21x faster │
│ QQuery 67 │  240.77 ms │                   240.35 ms │      no change │
│ QQuery 68 │   11.95 ms │                     7.83 ms │  +1.53x faster │
│ QQuery 69 │   56.64 ms │                    62.03 ms │   1.10x slower │
│ QQuery 70 │  106.02 ms │                    77.63 ms │  +1.37x faster │
│ QQuery 71 │   34.97 ms │                    34.85 ms │      no change │
│ QQuery 72 │ 2022.39 ms │                    80.16 ms │ +25.23x faster │
│ QQuery 73 │    9.55 ms │                     6.07 ms │  +1.57x faster │
│ QQuery 74 │  167.40 ms │                   171.82 ms │      no change │
│ QQuery 75 │  149.61 ms │                   148.91 ms │      no change │
│ QQuery 76 │   35.31 ms │                    35.51 ms │      no change │
│ QQuery 77 │   61.86 ms │                    62.21 ms │      no change │
│ QQuery 78 │  197.76 ms │                   196.10 ms │      no change │
│ QQuery 79 │   66.60 ms │                    69.02 ms │      no change │
│ QQuery 80 │   99.83 ms │                    99.70 ms │      no change │
│ QQuery 81 │   26.12 ms │                    25.60 ms │      no change │
│ QQuery 82 │   16.44 ms │                    16.37 ms │      no change │
│ QQuery 83 │   40.20 ms │                    23.09 ms │  +1.74x faster │
│ QQuery 84 │   30.12 ms │                    37.89 ms │   1.26x slower │
│ QQuery 85 │  106.59 ms │                   104.87 ms │      no change │
│ QQuery 86 │   25.45 ms │                    25.00 ms │      no change │
│ QQuery 87 │   62.95 ms │                    61.61 ms │      no change │
│ QQuery 88 │   62.62 ms │                    57.80 ms │  +1.08x faster │
│ QQuery 89 │   35.28 ms │                    35.43 ms │      no change │
│ QQuery 90 │   17.10 ms │                    14.69 ms │  +1.16x faster │
│ QQuery 91 │   45.44 ms │                    40.89 ms │  +1.11x faster │
│ QQuery 92 │   29.37 ms │                    28.81 ms │      no change │
│ QQuery 93 │   49.20 ms │                    49.61 ms │      no change │
│ QQuery 94 │   37.09 ms │                    38.25 ms │      no change │
│ QQuery 95 │   79.20 ms │                    81.50 ms │      no change │
│ QQuery 96 │   23.82 ms │                    21.34 ms │  +1.12x faster │
│ QQuery 97 │   46.98 ms │                    47.05 ms │      no change │
│ QQuery 98 │   42.58 ms │                    42.51 ms │      no change │
│ QQuery 99 │   70.02 ms │                    45.25 ms │  +1.55x faster │
└───────────┴────────────┴─────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 9636.10ms │
│ Total Time (perf_join-order-enumeration)   │ 6956.74ms │
│ Average Time (HEAD)                        │   97.33ms │
│ Average Time (perf_join-order-enumeration) │   70.27ms │
│ Queries Faster                             │        32 │
│ Queries Slower                             │         6 │
│ Queries with No Change                     │        61 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃       perf_join-order-enumeration ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 1  │           5.55 / 6.10 ±0.95 / 8.00 ms │       5.78 / 6.26 ±0.90 / 8.06 ms │      no change │
│ QQuery 2  │        79.93 / 80.18 ±0.38 / 80.94 ms │    80.39 / 80.63 ±0.26 / 81.11 ms │      no change │
│ QQuery 3  │        28.97 / 29.26 ±0.15 / 29.41 ms │    25.92 / 26.31 ±0.27 / 26.56 ms │  +1.11x faster │
│ QQuery 4  │     476.37 / 483.55 ±4.04 / 488.82 ms │ 483.94 / 486.75 ±2.17 / 489.15 ms │      no change │
│ QQuery 5  │        52.10 / 55.27 ±4.48 / 64.15 ms │    52.47 / 54.66 ±2.98 / 60.54 ms │      no change │
│ QQuery 6  │        36.47 / 36.97 ±0.42 / 37.68 ms │    36.84 / 37.13 ±0.29 / 37.69 ms │      no change │
│ QQuery 7  │        94.27 / 94.75 ±0.57 / 95.85 ms │    80.90 / 81.35 ±0.31 / 81.84 ms │  +1.16x faster │
│ QQuery 8  │        36.35 / 37.75 ±2.08 / 41.87 ms │    36.87 / 38.53 ±2.28 / 43.07 ms │      no change │
│ QQuery 9  │        52.17 / 53.68 ±1.60 / 56.56 ms │    51.34 / 53.43 ±1.47 / 55.87 ms │      no change │
│ QQuery 10 │        62.26 / 62.65 ±0.35 / 63.31 ms │    63.12 / 63.78 ±0.41 / 64.22 ms │      no change │
│ QQuery 11 │     293.73 / 299.46 ±6.05 / 310.78 ms │ 237.69 / 242.99 ±4.42 / 249.55 ms │  +1.23x faster │
│ QQuery 12 │        28.45 / 29.20 ±0.52 / 29.96 ms │    28.40 / 28.83 ±0.37 / 29.39 ms │      no change │
│ QQuery 13 │     117.70 / 118.33 ±0.66 / 119.57 ms │ 118.39 / 119.86 ±1.50 / 122.73 ms │      no change │
│ QQuery 14 │     415.83 / 420.26 ±3.87 / 426.78 ms │ 368.55 / 371.52 ±2.91 / 376.35 ms │  +1.13x faster │
│ QQuery 15 │        57.10 / 58.06 ±0.79 / 59.00 ms │    20.78 / 21.01 ±0.19 / 21.25 ms │  +2.76x faster │
│ QQuery 16 │           6.72 / 6.93 ±0.20 / 7.30 ms │       7.03 / 7.17 ±0.14 / 7.43 ms │      no change │
│ QQuery 17 │        79.46 / 80.38 ±0.69 / 81.26 ms │    60.33 / 61.84 ±1.70 / 65.14 ms │  +1.30x faster │
│ QQuery 18 │     123.31 / 126.53 ±2.90 / 130.37 ms │ 118.64 / 121.17 ±2.39 / 124.62 ms │      no change │
│ QQuery 19 │        41.39 / 41.55 ±0.15 / 41.78 ms │    42.40 / 43.19 ±1.16 / 45.50 ms │      no change │
│ QQuery 20 │        35.33 / 36.13 ±0.47 / 36.52 ms │    35.61 / 36.64 ±0.73 / 37.88 ms │      no change │
│ QQuery 21 │        17.31 / 17.53 ±0.13 / 17.69 ms │    13.21 / 13.60 ±0.41 / 14.25 ms │  +1.29x faster │
│ QQuery 22 │        62.93 / 63.63 ±0.62 / 64.55 ms │    62.62 / 63.40 ±0.97 / 65.23 ms │      no change │
│ QQuery 23 │     343.32 / 346.29 ±2.30 / 349.86 ms │ 289.55 / 291.59 ±1.69 / 293.69 ms │  +1.19x faster │
│ QQuery 24 │     222.55 / 224.09 ±1.30 / 226.18 ms │ 162.12 / 163.37 ±0.93 / 164.46 ms │  +1.37x faster │
│ QQuery 25 │     109.29 / 110.60 ±1.51 / 113.49 ms │    78.65 / 80.41 ±2.65 / 85.68 ms │  +1.38x faster │
│ QQuery 26 │        57.38 / 58.89 ±1.98 / 62.76 ms │    57.14 / 57.78 ±0.86 / 59.49 ms │      no change │
│ QQuery 27 │           6.33 / 6.48 ±0.17 / 6.81 ms │       6.46 / 6.63 ±0.19 / 6.99 ms │      no change │
│ QQuery 28 │        58.25 / 61.00 ±1.71 / 63.54 ms │    57.23 / 60.48 ±2.29 / 62.93 ms │      no change │
│ QQuery 29 │       96.89 / 97.76 ±1.19 / 100.11 ms │    66.07 / 67.72 ±2.34 / 72.36 ms │  +1.44x faster │
│ QQuery 30 │        32.22 / 33.82 ±2.99 / 39.81 ms │    33.08 / 34.24 ±1.03 / 36.03 ms │      no change │
│ QQuery 31 │     111.05 / 112.25 ±0.86 / 113.71 ms │ 111.34 / 112.02 ±0.54 / 112.80 ms │      no change │
│ QQuery 32 │        19.93 / 20.27 ±0.32 / 20.85 ms │    20.54 / 21.44 ±1.50 / 24.42 ms │   1.06x slower │
│ QQuery 33 │        37.49 / 37.93 ±0.26 / 38.17 ms │    38.42 / 39.22 ±0.67 / 40.41 ms │      no change │
│ QQuery 34 │         9.94 / 10.15 ±0.15 / 10.38 ms │       6.15 / 6.29 ±0.20 / 6.70 ms │  +1.61x faster │
│ QQuery 35 │        71.96 / 73.14 ±1.20 / 75.27 ms │    73.79 / 74.63 ±0.98 / 76.49 ms │      no change │
│ QQuery 36 │           5.88 / 6.05 ±0.18 / 6.40 ms │       5.92 / 6.09 ±0.19 / 6.45 ms │      no change │
│ QQuery 37 │           6.81 / 6.89 ±0.06 / 6.96 ms │       6.89 / 7.05 ±0.11 / 7.20 ms │      no change │
│ QQuery 38 │        61.40 / 62.38 ±0.77 / 63.67 ms │    62.20 / 62.83 ±0.46 / 63.43 ms │      no change │
│ QQuery 39 │        90.45 / 92.58 ±1.96 / 95.51 ms │    78.67 / 80.05 ±1.80 / 83.58 ms │  +1.16x faster │
│ QQuery 40 │        23.34 / 24.53 ±1.23 / 26.83 ms │    22.19 / 22.51 ±0.32 / 23.07 ms │  +1.09x faster │
│ QQuery 41 │        11.25 / 11.36 ±0.12 / 11.59 ms │    11.21 / 11.35 ±0.15 / 11.61 ms │      no change │
│ QQuery 42 │        23.63 / 24.50 ±0.71 / 25.72 ms │    26.56 / 26.73 ±0.16 / 26.93 ms │   1.09x slower │
│ QQuery 43 │           5.15 / 5.24 ±0.08 / 5.39 ms │       5.09 / 5.27 ±0.17 / 5.59 ms │      no change │
│ QQuery 44 │           9.33 / 9.52 ±0.14 / 9.72 ms │       9.59 / 9.67 ±0.07 / 9.74 ms │      no change │
│ QQuery 45 │        37.57 / 38.08 ±0.40 / 38.61 ms │    23.16 / 23.60 ±0.32 / 23.97 ms │  +1.61x faster │
│ QQuery 46 │        11.86 / 12.33 ±0.58 / 13.44 ms │       8.24 / 8.36 ±0.14 / 8.63 ms │  +1.48x faster │
│ QQuery 47 │     225.14 / 229.06 ±2.66 / 232.76 ms │ 228.81 / 233.64 ±4.42 / 240.20 ms │      no change │
│ QQuery 48 │        94.79 / 96.03 ±0.97 / 97.42 ms │    97.10 / 97.96 ±0.87 / 99.52 ms │      no change │
│ QQuery 49 │        76.32 / 77.30 ±0.55 / 77.92 ms │    72.56 / 73.16 ±0.42 / 73.68 ms │  +1.06x faster │
│ QQuery 50 │        58.18 / 60.41 ±3.06 / 66.42 ms │    53.81 / 55.53 ±2.20 / 59.68 ms │  +1.09x faster │
│ QQuery 51 │        91.87 / 94.06 ±1.47 / 96.36 ms │    91.11 / 94.00 ±2.78 / 99.12 ms │      no change │
│ QQuery 52 │        24.10 / 24.33 ±0.21 / 24.64 ms │    26.57 / 26.87 ±0.18 / 27.11 ms │   1.10x slower │
│ QQuery 53 │        28.96 / 29.13 ±0.11 / 29.30 ms │    29.27 / 29.34 ±0.08 / 29.49 ms │      no change │
│ QQuery 54 │        54.22 / 56.82 ±4.58 / 65.98 ms │    24.74 / 26.14 ±2.25 / 30.63 ms │  +2.17x faster │
│ QQuery 55 │        23.54 / 24.04 ±0.50 / 24.78 ms │    25.75 / 26.17 ±0.42 / 26.79 ms │   1.09x slower │
│ QQuery 56 │        39.50 / 39.94 ±0.39 / 40.62 ms │    41.78 / 42.89 ±1.61 / 46.07 ms │   1.07x slower │
│ QQuery 57 │     176.96 / 178.84 ±2.78 / 184.28 ms │ 177.33 / 178.94 ±1.19 / 180.58 ms │      no change │
│ QQuery 58 │     111.60 / 113.51 ±1.11 / 114.87 ms │    51.64 / 52.82 ±0.98 / 54.63 ms │  +2.15x faster │
│ QQuery 59 │     117.01 / 118.74 ±1.47 / 120.87 ms │ 116.96 / 118.39 ±1.97 / 122.24 ms │      no change │
│ QQuery 60 │        39.18 / 39.61 ±0.28 / 40.05 ms │    39.81 / 40.96 ±1.04 / 42.88 ms │      no change │
│ QQuery 61 │        12.14 / 12.35 ±0.16 / 12.59 ms │    10.82 / 11.01 ±0.23 / 11.44 ms │  +1.12x faster │
│ QQuery 62 │        46.11 / 46.36 ±0.30 / 46.88 ms │    30.62 / 30.79 ±0.11 / 30.90 ms │  +1.51x faster │
│ QQuery 63 │        29.25 / 31.03 ±2.68 / 36.36 ms │    29.18 / 29.48 ±0.29 / 29.89 ms │      no change │
│ QQuery 64 │     406.30 / 408.83 ±1.70 / 411.43 ms │ 237.03 / 240.77 ±2.80 / 244.47 ms │  +1.70x faster │
│ QQuery 65 │     124.84 / 127.20 ±2.34 / 131.49 ms │ 122.97 / 125.67 ±2.30 / 129.20 ms │      no change │
│ QQuery 66 │        81.86 / 83.81 ±3.21 / 90.22 ms │    67.68 / 68.12 ±0.36 / 68.71 ms │  +1.23x faster │
│ QQuery 67 │     240.77 / 244.62 ±4.25 / 252.30 ms │ 240.35 / 243.49 ±2.56 / 247.55 ms │      no change │
│ QQuery 68 │        11.95 / 12.10 ±0.20 / 12.50 ms │       7.83 / 8.10 ±0.33 / 8.74 ms │  +1.49x faster │
│ QQuery 69 │        56.64 / 56.81 ±0.19 / 57.16 ms │    62.03 / 64.76 ±4.00 / 72.55 ms │   1.14x slower │
│ QQuery 70 │     106.02 / 112.51 ±8.46 / 128.81 ms │    77.63 / 78.13 ±0.43 / 78.64 ms │  +1.44x faster │
│ QQuery 71 │        34.97 / 35.34 ±0.31 / 35.78 ms │    34.85 / 35.84 ±1.43 / 38.68 ms │      no change │
│ QQuery 72 │ 2022.39 / 2052.21 ±17.50 / 2075.36 ms │    80.16 / 82.12 ±1.98 / 85.43 ms │ +24.99x faster │
│ QQuery 73 │          9.55 / 9.83 ±0.26 / 10.31 ms │       6.07 / 6.18 ±0.19 / 6.55 ms │  +1.59x faster │
│ QQuery 74 │     167.40 / 170.70 ±2.45 / 174.96 ms │ 171.82 / 173.51 ±2.02 / 177.07 ms │      no change │
│ QQuery 75 │     149.61 / 152.69 ±4.27 / 160.91 ms │ 148.91 / 151.37 ±2.93 / 156.88 ms │      no change │
│ QQuery 76 │        35.31 / 35.75 ±0.35 / 36.28 ms │    35.51 / 36.27 ±1.35 / 38.96 ms │      no change │
│ QQuery 77 │        61.86 / 62.39 ±0.33 / 62.71 ms │    62.21 / 62.61 ±0.26 / 63.02 ms │      no change │
│ QQuery 78 │     197.76 / 200.79 ±3.01 / 204.46 ms │ 196.10 / 198.98 ±2.32 / 202.45 ms │      no change │
│ QQuery 79 │        66.60 / 68.63 ±2.62 / 73.80 ms │    69.02 / 69.64 ±0.46 / 70.44 ms │      no change │
│ QQuery 80 │      99.83 / 100.60 ±0.91 / 102.18 ms │  99.70 / 101.96 ±2.02 / 105.07 ms │      no change │
│ QQuery 81 │        26.12 / 26.39 ±0.15 / 26.59 ms │    25.60 / 25.83 ±0.17 / 26.10 ms │      no change │
│ QQuery 82 │        16.44 / 17.98 ±2.08 / 22.09 ms │    16.37 / 16.66 ±0.21 / 16.87 ms │  +1.08x faster │
│ QQuery 83 │        40.20 / 43.82 ±4.58 / 52.04 ms │    23.09 / 23.28 ±0.16 / 23.56 ms │  +1.88x faster │
│ QQuery 84 │        30.12 / 30.70 ±0.59 / 31.79 ms │    37.89 / 38.10 ±0.29 / 38.67 ms │   1.24x slower │
│ QQuery 85 │     106.59 / 107.19 ±0.58 / 107.93 ms │ 104.87 / 108.41 ±2.62 / 112.37 ms │      no change │
│ QQuery 86 │        25.45 / 25.84 ±0.28 / 26.17 ms │    25.00 / 25.35 ±0.22 / 25.65 ms │      no change │
│ QQuery 87 │        62.95 / 64.13 ±1.21 / 66.33 ms │    61.61 / 62.54 ±0.85 / 63.97 ms │      no change │
│ QQuery 88 │        62.62 / 63.27 ±0.47 / 64.06 ms │    57.80 / 58.88 ±0.57 / 59.41 ms │  +1.07x faster │
│ QQuery 89 │        35.28 / 35.86 ±0.30 / 36.08 ms │    35.43 / 36.44 ±0.80 / 37.48 ms │      no change │
│ QQuery 90 │        17.10 / 17.36 ±0.24 / 17.73 ms │    14.69 / 14.90 ±0.19 / 15.22 ms │  +1.17x faster │
│ QQuery 91 │        45.44 / 47.13 ±2.75 / 52.61 ms │    40.89 / 41.25 ±0.23 / 41.58 ms │  +1.14x faster │
│ QQuery 92 │        29.37 / 30.42 ±0.63 / 31.32 ms │    28.81 / 29.34 ±0.37 / 29.95 ms │      no change │
│ QQuery 93 │        49.20 / 50.98 ±1.12 / 52.18 ms │    49.61 / 51.11 ±2.24 / 55.57 ms │      no change │
│ QQuery 94 │        37.09 / 37.90 ±0.49 / 38.34 ms │    38.25 / 39.06 ±0.77 / 40.27 ms │      no change │
│ QQuery 95 │        79.20 / 81.50 ±2.40 / 86.05 ms │    81.50 / 82.55 ±0.94 / 84.01 ms │      no change │
│ QQuery 96 │        23.82 / 24.83 ±1.29 / 27.37 ms │    21.34 / 21.45 ±0.08 / 21.58 ms │  +1.16x faster │
│ QQuery 97 │        46.98 / 47.77 ±0.79 / 49.24 ms │    47.05 / 48.02 ±0.95 / 49.84 ms │      no change │
│ QQuery 98 │        42.58 / 42.99 ±0.30 / 43.46 ms │    42.51 / 43.59 ±0.77 / 44.50 ms │      no change │
│ QQuery 99 │        70.02 / 72.37 ±3.67 / 79.67 ms │    45.25 / 45.80 ±0.59 / 46.87 ms │  +1.58x faster │
└───────────┴───────────────────────────────────────┴───────────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 9799.08ms │
│ Total Time (perf_join-order-enumeration)   │ 7067.59ms │
│ Average Time (HEAD)                        │   98.98ms │
│ Average Time (perf_join-order-enumeration) │   71.39ms │
│ Queries Faster                             │        35 │
│ Queries Slower                             │         7 │
│ Queries with No Change                     │        57 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 50.0s
Peak memory 1.9 GiB
Avg memory 1.4 GiB
CPU user 216.8s
CPU sys 6.0s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 40.0s
Peak memory 2.4 GiB
Avg memory 1.4 GiB
CPU user 100.2s
CPU sys 4.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 perf/join-order-enumeration (de80dd7) to bb038a6 (merge-base) diff

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ perf_join-order-enumeration ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 1  │    5.52 ms │                     5.71 ms │      no change │
│ QQuery 2  │   81.34 ms │                    81.54 ms │      no change │
│ QQuery 3  │   28.94 ms │                    25.98 ms │  +1.11x faster │
│ QQuery 4  │  486.49 ms │                   483.93 ms │      no change │
│ QQuery 5  │   52.70 ms │                    52.48 ms │      no change │
│ QQuery 6  │   35.86 ms │                    36.27 ms │      no change │
│ QQuery 7  │   93.24 ms │                    80.67 ms │  +1.16x faster │
│ QQuery 8  │   36.52 ms │                    36.66 ms │      no change │
│ QQuery 9  │   52.25 ms │                    52.67 ms │      no change │
│ QQuery 10 │   62.65 ms │                    63.11 ms │      no change │
│ QQuery 11 │  302.10 ms │                   240.40 ms │  +1.26x faster │
│ QQuery 12 │   28.87 ms │                    28.83 ms │      no change │
│ QQuery 13 │  117.17 ms │                   119.66 ms │      no change │
│ QQuery 14 │  417.96 ms │                   366.48 ms │  +1.14x faster │
│ QQuery 15 │   57.41 ms │                    20.98 ms │  +2.74x faster │
│ QQuery 16 │    6.78 ms │                     7.02 ms │      no change │
│ QQuery 17 │   79.71 ms │                    60.59 ms │  +1.32x faster │
│ QQuery 18 │  121.55 ms │                   119.98 ms │      no change │
│ QQuery 19 │   41.15 ms │                    43.00 ms │      no change │
│ QQuery 20 │   35.56 ms │                    35.35 ms │      no change │
│ QQuery 21 │   17.40 ms │                    13.21 ms │  +1.32x faster │
│ QQuery 22 │   63.20 ms │                    62.62 ms │      no change │
│ QQuery 23 │  339.88 ms │                   289.95 ms │  +1.17x faster │
│ QQuery 24 │  222.03 ms │                   161.70 ms │  +1.37x faster │
│ QQuery 25 │  108.56 ms │                    78.39 ms │  +1.38x faster │
│ QQuery 26 │   57.73 ms │                    57.01 ms │      no change │
│ QQuery 27 │    6.39 ms │                     6.42 ms │      no change │
│ QQuery 28 │   60.49 ms │                    61.99 ms │      no change │
│ QQuery 29 │   96.28 ms │                    65.87 ms │  +1.46x faster │
│ QQuery 30 │   32.56 ms │                    32.93 ms │      no change │
│ QQuery 31 │  110.56 ms │                   111.45 ms │      no change │
│ QQuery 32 │   20.11 ms │                    21.05 ms │      no change │
│ QQuery 33 │   37.63 ms │                    38.74 ms │      no change │
│ QQuery 34 │    9.86 ms │                     6.26 ms │  +1.57x faster │
│ QQuery 35 │   72.35 ms │                    73.03 ms │      no change │
│ QQuery 36 │    5.95 ms │                     6.22 ms │      no change │
│ QQuery 37 │    6.82 ms │                     7.13 ms │      no change │
│ QQuery 38 │   62.26 ms │                    62.53 ms │      no change │
│ QQuery 39 │   89.05 ms │                    79.32 ms │  +1.12x faster │
│ QQuery 40 │   23.44 ms │                    22.76 ms │      no change │
│ QQuery 41 │   11.12 ms │                    11.42 ms │      no change │
│ QQuery 42 │   24.05 ms │                    26.25 ms │   1.09x slower │
│ QQuery 43 │    5.05 ms │                     5.30 ms │   1.05x slower │
│ QQuery 44 │    9.30 ms │                     9.64 ms │      no change │
│ QQuery 45 │   37.36 ms │                    23.37 ms │  +1.60x faster │
│ QQuery 46 │   11.91 ms │                     8.25 ms │  +1.44x faster │
│ QQuery 47 │  226.69 ms │                   230.79 ms │      no change │
│ QQuery 48 │   96.62 ms │                    98.61 ms │      no change │
│ QQuery 49 │   76.81 ms │                    74.25 ms │      no change │
│ QQuery 50 │   58.00 ms │                    54.48 ms │  +1.06x faster │
│ QQuery 51 │   92.39 ms │                    94.73 ms │      no change │
│ QQuery 52 │   24.27 ms │                    27.27 ms │   1.12x slower │
│ QQuery 53 │   29.17 ms │                    29.93 ms │      no change │
│ QQuery 54 │   54.64 ms │                    25.27 ms │  +2.16x faster │
│ QQuery 55 │   23.80 ms │                    25.61 ms │   1.08x slower │
│ QQuery 56 │   39.10 ms │                    42.53 ms │   1.09x slower │
│ QQuery 57 │  173.71 ms │                   178.58 ms │      no change │
│ QQuery 58 │  112.12 ms │                    52.16 ms │  +2.15x faster │
│ QQuery 59 │  117.99 ms │                   119.79 ms │      no change │
│ QQuery 60 │   39.59 ms │                    40.14 ms │      no change │
│ QQuery 61 │   12.61 ms │                    11.24 ms │  +1.12x faster │
│ QQuery 62 │   46.25 ms │                    30.85 ms │  +1.50x faster │
│ QQuery 63 │   29.34 ms │                    29.69 ms │      no change │
│ QQuery 64 │  404.45 ms │                   237.34 ms │  +1.70x faster │
│ QQuery 65 │  121.93 ms │                   121.95 ms │      no change │
│ QQuery 66 │   80.64 ms │                    69.46 ms │  +1.16x faster │
│ QQuery 67 │  245.81 ms │                   244.14 ms │      no change │
│ QQuery 68 │   11.96 ms │                     7.84 ms │  +1.53x faster │
│ QQuery 69 │   56.73 ms │                    62.44 ms │   1.10x slower │
│ QQuery 70 │  106.51 ms │                    78.03 ms │  +1.37x faster │
│ QQuery 71 │   34.94 ms │                    35.03 ms │      no change │
│ QQuery 72 │ 2098.87 ms │                    80.04 ms │ +26.22x faster │
│ QQuery 73 │    9.74 ms │                     6.22 ms │  +1.57x faster │
│ QQuery 74 │  170.19 ms │                   171.69 ms │      no change │
│ QQuery 75 │  148.78 ms │                   148.53 ms │      no change │
│ QQuery 76 │   35.20 ms │                    35.52 ms │      no change │
│ QQuery 77 │   62.98 ms │                    62.29 ms │      no change │
│ QQuery 78 │  198.50 ms │                   196.97 ms │      no change │
│ QQuery 79 │   66.35 ms │                    69.63 ms │      no change │
│ QQuery 80 │   99.34 ms │                   100.03 ms │      no change │
│ QQuery 81 │   26.05 ms │                    25.39 ms │      no change │
│ QQuery 82 │   16.47 ms │                    16.28 ms │      no change │
│ QQuery 83 │   39.40 ms │                    23.25 ms │  +1.69x faster │
│ QQuery 84 │   29.99 ms │                    38.16 ms │   1.27x slower │
│ QQuery 85 │  105.63 ms │                   104.60 ms │      no change │
│ QQuery 86 │   25.13 ms │                    25.31 ms │      no change │
│ QQuery 87 │   62.65 ms │                    61.78 ms │      no change │
│ QQuery 88 │   63.59 ms │                    59.03 ms │  +1.08x faster │
│ QQuery 89 │   35.74 ms │                    35.85 ms │      no change │
│ QQuery 90 │   17.04 ms │                    14.89 ms │  +1.14x faster │
│ QQuery 91 │   46.03 ms │                    41.46 ms │  +1.11x faster │
│ QQuery 92 │   29.44 ms │                    29.38 ms │      no change │
│ QQuery 93 │   49.56 ms │                    48.91 ms │      no change │
│ QQuery 94 │   38.02 ms │                    37.97 ms │      no change │
│ QQuery 95 │   81.21 ms │                    80.54 ms │      no change │
│ QQuery 96 │   24.01 ms │                    21.08 ms │  +1.14x faster │
│ QQuery 97 │   46.50 ms │                    46.89 ms │      no change │
│ QQuery 98 │   42.52 ms │                    42.47 ms │      no change │
│ QQuery 99 │   70.40 ms │                    45.63 ms │  +1.54x faster │
└───────────┴────────────┴─────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 9740.55ms │
│ Total Time (perf_join-order-enumeration)   │ 6996.06ms │
│ Average Time (HEAD)                        │   98.39ms │
│ Average Time (perf_join-order-enumeration) │   70.67ms │
│ Queries Faster                             │        32 │
│ Queries Slower                             │         7 │
│ Queries with No Change                     │        60 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃       perf_join-order-enumeration ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 1  │           5.52 / 6.05 ±0.92 / 7.88 ms │       5.71 / 6.28 ±0.90 / 8.07 ms │      no change │
│ QQuery 2  │        81.34 / 81.76 ±0.34 / 82.33 ms │    81.54 / 82.08 ±0.40 / 82.71 ms │      no change │
│ QQuery 3  │        28.94 / 29.23 ±0.25 / 29.69 ms │    25.98 / 26.17 ±0.13 / 26.35 ms │  +1.12x faster │
│ QQuery 4  │     486.49 / 491.40 ±4.37 / 498.13 ms │ 483.93 / 486.50 ±2.71 / 490.34 ms │      no change │
│ QQuery 5  │        52.70 / 53.67 ±0.77 / 55.00 ms │    52.48 / 53.44 ±0.89 / 54.98 ms │      no change │
│ QQuery 6  │        35.86 / 36.76 ±0.75 / 38.08 ms │    36.27 / 36.52 ±0.24 / 36.97 ms │      no change │
│ QQuery 7  │        93.24 / 94.10 ±0.61 / 94.99 ms │    80.67 / 81.44 ±0.40 / 81.75 ms │  +1.16x faster │
│ QQuery 8  │        36.52 / 38.43 ±2.32 / 42.94 ms │    36.66 / 37.03 ±0.32 / 37.53 ms │      no change │
│ QQuery 9  │        52.25 / 54.43 ±1.40 / 56.45 ms │    52.67 / 54.70 ±1.46 / 57.18 ms │      no change │
│ QQuery 10 │        62.65 / 63.34 ±0.40 / 63.88 ms │    63.11 / 63.32 ±0.16 / 63.58 ms │      no change │
│ QQuery 11 │     302.10 / 305.35 ±2.34 / 309.02 ms │ 240.40 / 243.42 ±2.24 / 245.86 ms │  +1.25x faster │
│ QQuery 12 │        28.87 / 29.05 ±0.13 / 29.24 ms │    28.83 / 29.03 ±0.17 / 29.23 ms │      no change │
│ QQuery 13 │     117.17 / 117.72 ±0.50 / 118.49 ms │ 119.66 / 120.86 ±2.10 / 125.05 ms │      no change │
│ QQuery 14 │     417.96 / 422.46 ±3.66 / 429.10 ms │ 366.48 / 372.70 ±6.95 / 386.17 ms │  +1.13x faster │
│ QQuery 15 │        57.41 / 57.69 ±0.19 / 57.90 ms │    20.98 / 21.33 ±0.28 / 21.83 ms │  +2.70x faster │
│ QQuery 16 │           6.78 / 6.97 ±0.27 / 7.50 ms │       7.02 / 7.13 ±0.18 / 7.49 ms │      no change │
│ QQuery 17 │        79.71 / 80.66 ±1.12 / 82.78 ms │    60.59 / 61.75 ±1.79 / 65.30 ms │  +1.31x faster │
│ QQuery 18 │     121.55 / 123.21 ±1.44 / 125.80 ms │ 119.98 / 121.04 ±1.24 / 123.43 ms │      no change │
│ QQuery 19 │        41.15 / 41.41 ±0.19 / 41.63 ms │    43.00 / 43.36 ±0.48 / 44.29 ms │      no change │
│ QQuery 20 │        35.56 / 36.01 ±0.37 / 36.60 ms │    35.35 / 36.00 ±0.51 / 36.65 ms │      no change │
│ QQuery 21 │        17.40 / 17.84 ±0.48 / 18.74 ms │    13.21 / 13.43 ±0.14 / 13.59 ms │  +1.33x faster │
│ QQuery 22 │        63.20 / 63.77 ±0.39 / 64.38 ms │    62.62 / 63.49 ±0.58 / 64.15 ms │      no change │
│ QQuery 23 │     339.88 / 347.22 ±4.77 / 353.90 ms │ 289.95 / 292.78 ±2.82 / 298.01 ms │  +1.19x faster │
│ QQuery 24 │     222.03 / 223.50 ±1.14 / 225.23 ms │ 161.70 / 162.30 ±0.34 / 162.70 ms │  +1.38x faster │
│ QQuery 25 │     108.56 / 109.54 ±0.68 / 110.61 ms │    78.39 / 78.94 ±0.31 / 79.31 ms │  +1.39x faster │
│ QQuery 26 │        57.73 / 59.34 ±2.25 / 63.80 ms │    57.01 / 57.65 ±0.64 / 58.77 ms │      no change │
│ QQuery 27 │           6.39 / 6.51 ±0.18 / 6.86 ms │       6.42 / 6.59 ±0.18 / 6.94 ms │      no change │
│ QQuery 28 │        60.49 / 61.22 ±1.09 / 63.36 ms │    61.99 / 62.87 ±0.78 / 64.13 ms │      no change │
│ QQuery 29 │        96.28 / 97.25 ±0.66 / 98.18 ms │    65.87 / 67.11 ±2.11 / 71.32 ms │  +1.45x faster │
│ QQuery 30 │        32.56 / 33.75 ±2.05 / 37.83 ms │    32.93 / 33.95 ±0.88 / 35.20 ms │      no change │
│ QQuery 31 │     110.56 / 111.61 ±0.62 / 112.52 ms │ 111.45 / 111.85 ±0.45 / 112.66 ms │      no change │
│ QQuery 32 │        20.11 / 20.43 ±0.37 / 21.10 ms │    21.05 / 22.04 ±1.23 / 24.39 ms │   1.08x slower │
│ QQuery 33 │        37.63 / 37.94 ±0.18 / 38.17 ms │    38.74 / 39.30 ±0.60 / 40.38 ms │      no change │
│ QQuery 34 │         9.86 / 10.02 ±0.14 / 10.27 ms │       6.26 / 6.45 ±0.17 / 6.78 ms │  +1.55x faster │
│ QQuery 35 │        72.35 / 74.03 ±1.39 / 76.49 ms │    73.03 / 73.41 ±0.45 / 74.24 ms │      no change │
│ QQuery 36 │           5.95 / 6.11 ±0.20 / 6.48 ms │       6.22 / 6.33 ±0.19 / 6.70 ms │      no change │
│ QQuery 37 │           6.82 / 6.95 ±0.08 / 7.07 ms │       7.13 / 7.25 ±0.09 / 7.38 ms │      no change │
│ QQuery 38 │        62.26 / 62.44 ±0.22 / 62.88 ms │    62.53 / 63.54 ±1.40 / 66.28 ms │      no change │
│ QQuery 39 │        89.05 / 90.76 ±1.14 / 92.28 ms │    79.32 / 80.10 ±0.77 / 81.43 ms │  +1.13x faster │
│ QQuery 40 │        23.44 / 24.00 ±0.51 / 24.75 ms │    22.76 / 22.81 ±0.05 / 22.89 ms │      no change │
│ QQuery 41 │        11.12 / 11.40 ±0.34 / 12.05 ms │    11.42 / 11.56 ±0.18 / 11.91 ms │      no change │
│ QQuery 42 │        24.05 / 24.36 ±0.28 / 24.85 ms │    26.25 / 26.77 ±0.37 / 27.26 ms │   1.10x slower │
│ QQuery 43 │           5.05 / 5.17 ±0.16 / 5.49 ms │       5.30 / 5.43 ±0.14 / 5.69 ms │   1.05x slower │
│ QQuery 44 │           9.30 / 9.40 ±0.11 / 9.59 ms │      9.64 / 9.83 ±0.15 / 10.06 ms │      no change │
│ QQuery 45 │        37.36 / 38.13 ±0.40 / 38.47 ms │    23.37 / 23.54 ±0.10 / 23.65 ms │  +1.62x faster │
│ QQuery 46 │        11.91 / 12.23 ±0.37 / 12.94 ms │       8.25 / 8.42 ±0.16 / 8.71 ms │  +1.45x faster │
│ QQuery 47 │     226.69 / 230.29 ±3.32 / 236.53 ms │ 230.79 / 235.14 ±3.01 / 240.03 ms │      no change │
│ QQuery 48 │       96.62 / 98.66 ±2.83 / 104.28 ms │    98.61 / 99.03 ±0.37 / 99.59 ms │      no change │
│ QQuery 49 │        76.81 / 77.07 ±0.28 / 77.47 ms │    74.25 / 74.62 ±0.28 / 75.06 ms │      no change │
│ QQuery 50 │        58.00 / 60.33 ±2.94 / 66.08 ms │    54.48 / 54.59 ±0.12 / 54.79 ms │  +1.11x faster │
│ QQuery 51 │        92.39 / 93.31 ±0.91 / 94.99 ms │   94.73 / 96.92 ±2.13 / 100.91 ms │      no change │
│ QQuery 52 │        24.27 / 24.56 ±0.20 / 24.83 ms │    27.27 / 27.45 ±0.17 / 27.67 ms │   1.12x slower │
│ QQuery 53 │        29.17 / 29.35 ±0.15 / 29.56 ms │    29.93 / 31.33 ±2.28 / 35.86 ms │   1.07x slower │
│ QQuery 54 │        54.64 / 56.80 ±2.64 / 62.01 ms │    25.27 / 25.44 ±0.12 / 25.61 ms │  +2.23x faster │
│ QQuery 55 │        23.80 / 24.62 ±0.71 / 25.65 ms │    25.61 / 26.12 ±0.51 / 27.04 ms │   1.06x slower │
│ QQuery 56 │        39.10 / 39.67 ±0.90 / 41.45 ms │    42.53 / 42.78 ±0.28 / 43.31 ms │   1.08x slower │
│ QQuery 57 │     173.71 / 177.96 ±3.99 / 185.41 ms │ 178.58 / 180.48 ±1.69 / 183.51 ms │      no change │
│ QQuery 58 │     112.12 / 113.42 ±0.90 / 114.85 ms │    52.16 / 52.99 ±0.81 / 54.43 ms │  +2.14x faster │
│ QQuery 59 │     117.99 / 119.42 ±1.25 / 121.67 ms │ 119.79 / 120.51 ±0.60 / 121.52 ms │      no change │
│ QQuery 60 │        39.59 / 40.06 ±0.40 / 40.54 ms │    40.14 / 40.76 ±0.66 / 41.69 ms │      no change │
│ QQuery 61 │        12.61 / 12.74 ±0.13 / 12.96 ms │    11.24 / 11.38 ±0.10 / 11.55 ms │  +1.12x faster │
│ QQuery 62 │        46.25 / 46.62 ±0.35 / 47.12 ms │    30.85 / 30.91 ±0.05 / 30.97 ms │  +1.51x faster │
│ QQuery 63 │        29.34 / 31.41 ±2.39 / 35.58 ms │    29.69 / 29.82 ±0.14 / 30.10 ms │  +1.05x faster │
│ QQuery 64 │     404.45 / 411.47 ±5.45 / 420.43 ms │ 237.34 / 239.71 ±2.02 / 242.24 ms │  +1.72x faster │
│ QQuery 65 │     121.93 / 122.72 ±0.63 / 123.56 ms │ 121.95 / 124.99 ±2.00 / 127.50 ms │      no change │
│ QQuery 66 │        80.64 / 82.64 ±1.99 / 85.98 ms │    69.46 / 70.07 ±1.10 / 72.27 ms │  +1.18x faster │
│ QQuery 67 │     245.81 / 248.36 ±2.18 / 252.19 ms │ 244.14 / 250.94 ±6.19 / 260.60 ms │      no change │
│ QQuery 68 │        11.96 / 12.09 ±0.20 / 12.50 ms │       7.84 / 8.42 ±0.77 / 9.92 ms │  +1.44x faster │
│ QQuery 69 │        56.73 / 57.26 ±0.45 / 58.06 ms │    62.44 / 62.74 ±0.25 / 63.09 ms │   1.10x slower │
│ QQuery 70 │     106.51 / 107.55 ±1.51 / 110.54 ms │    78.03 / 78.72 ±0.47 / 79.32 ms │  +1.37x faster │
│ QQuery 71 │        34.94 / 35.71 ±0.70 / 36.90 ms │    35.03 / 37.16 ±3.80 / 44.74 ms │      no change │
│ QQuery 72 │ 2098.87 / 2130.93 ±40.30 / 2203.71 ms │    80.04 / 80.90 ±0.78 / 81.95 ms │ +26.34x faster │
│ QQuery 73 │         9.74 / 10.02 ±0.33 / 10.66 ms │       6.22 / 6.36 ±0.19 / 6.74 ms │  +1.58x faster │
│ QQuery 74 │     170.19 / 173.50 ±3.14 / 178.51 ms │ 171.69 / 175.06 ±2.23 / 178.14 ms │      no change │
│ QQuery 75 │     148.78 / 149.46 ±0.83 / 151.03 ms │ 148.53 / 151.91 ±4.49 / 160.70 ms │      no change │
│ QQuery 76 │        35.20 / 35.57 ±0.35 / 36.25 ms │    35.52 / 37.01 ±1.74 / 40.39 ms │      no change │
│ QQuery 77 │        62.98 / 63.90 ±1.55 / 66.98 ms │    62.29 / 62.65 ±0.34 / 63.21 ms │      no change │
│ QQuery 78 │     198.50 / 201.00 ±1.68 / 203.03 ms │ 196.97 / 198.42 ±1.19 / 200.34 ms │      no change │
│ QQuery 79 │        66.35 / 66.78 ±0.36 / 67.36 ms │    69.63 / 71.19 ±1.91 / 74.74 ms │   1.07x slower │
│ QQuery 80 │      99.34 / 102.01 ±3.48 / 108.53 ms │ 100.03 / 101.00 ±1.42 / 103.82 ms │      no change │
│ QQuery 81 │        26.05 / 26.30 ±0.19 / 26.60 ms │    25.39 / 25.68 ±0.23 / 26.00 ms │      no change │
│ QQuery 82 │        16.47 / 16.80 ±0.37 / 17.47 ms │    16.28 / 16.51 ±0.19 / 16.86 ms │      no change │
│ QQuery 83 │        39.40 / 39.84 ±0.26 / 40.15 ms │    23.25 / 23.57 ±0.49 / 24.55 ms │  +1.69x faster │
│ QQuery 84 │        29.99 / 30.17 ±0.16 / 30.39 ms │    38.16 / 39.50 ±2.09 / 43.64 ms │   1.31x slower │
│ QQuery 85 │     105.63 / 109.57 ±4.48 / 118.09 ms │ 104.60 / 106.78 ±2.02 / 110.46 ms │      no change │
│ QQuery 86 │        25.13 / 25.53 ±0.43 / 26.07 ms │    25.31 / 25.48 ±0.16 / 25.71 ms │      no change │
│ QQuery 87 │        62.65 / 63.52 ±0.82 / 65.01 ms │    61.78 / 63.17 ±1.48 / 66.04 ms │      no change │
│ QQuery 88 │        63.59 / 64.16 ±0.38 / 64.61 ms │    59.03 / 59.71 ±0.37 / 60.14 ms │  +1.07x faster │
│ QQuery 89 │        35.74 / 37.03 ±1.46 / 39.84 ms │    35.85 / 36.32 ±0.40 / 36.81 ms │      no change │
│ QQuery 90 │        17.04 / 17.18 ±0.14 / 17.43 ms │    14.89 / 15.16 ±0.32 / 15.78 ms │  +1.13x faster │
│ QQuery 91 │        46.03 / 46.58 ±0.46 / 47.27 ms │    41.46 / 41.68 ±0.17 / 41.94 ms │  +1.12x faster │
│ QQuery 92 │        29.44 / 30.18 ±0.54 / 30.86 ms │    29.38 / 29.78 ±0.30 / 30.15 ms │      no change │
│ QQuery 93 │        49.56 / 50.20 ±0.49 / 50.96 ms │    48.91 / 50.38 ±0.95 / 51.86 ms │      no change │
│ QQuery 94 │        38.02 / 41.03 ±2.66 / 45.50 ms │    37.97 / 39.22 ±1.18 / 41.12 ms │      no change │
│ QQuery 95 │        81.21 / 83.10 ±1.27 / 85.20 ms │    80.54 / 81.20 ±0.44 / 81.68 ms │      no change │
│ QQuery 96 │        24.01 / 24.35 ±0.20 / 24.58 ms │    21.08 / 21.19 ±0.14 / 21.39 ms │  +1.15x faster │
│ QQuery 97 │        46.50 / 46.79 ±0.24 / 47.04 ms │    46.89 / 48.03 ±1.63 / 51.25 ms │      no change │
│ QQuery 98 │        42.52 / 43.24 ±0.69 / 44.30 ms │    42.47 / 43.61 ±1.09 / 45.48 ms │      no change │
│ QQuery 99 │        70.40 / 71.41 ±1.28 / 73.90 ms │    45.63 / 45.96 ±0.23 / 46.24 ms │  +1.55x faster │
└───────────┴───────────────────────────────────────┴───────────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 9888.89ms │
│ Total Time (perf_join-order-enumeration)   │ 7092.33ms │
│ Average Time (HEAD)                        │   99.89ms │
│ Average Time (perf_join-order-enumeration) │   71.64ms │
│ Queries Faster                             │        33 │
│ Queries Slower                             │        10 │
│ Queries with No Change                     │        56 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 50.0s
Peak memory 2.1 GiB
Avg memory 1.5 GiB
CPU user 220.2s
CPU sys 6.0s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 40.0s
Peak memory 2.1 GiB
Avg memory 1.3 GiB
CPU user 100.2s
CPU sys 4.8s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing perf/join-order-enumeration (de80dd7) to bb038a6 (merge-base) diff

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │    1.24 ms │                     1.24 ms │     no change │
│ QQuery 1  │   11.72 ms │                    12.11 ms │     no change │
│ QQuery 2  │   36.29 ms │                    36.91 ms │     no change │
│ QQuery 3  │   31.09 ms │                    31.38 ms │     no change │
│ QQuery 4  │  225.70 ms │                   226.63 ms │     no change │
│ QQuery 5  │  272.53 ms │                   272.10 ms │     no change │
│ QQuery 6  │    1.27 ms │                     1.27 ms │     no change │
│ QQuery 7  │   13.13 ms │                    13.62 ms │     no change │
│ QQuery 8  │  330.82 ms │                   328.04 ms │     no change │
│ QQuery 9  │  457.91 ms │                   442.77 ms │     no change │
│ QQuery 10 │   70.08 ms │                    68.68 ms │     no change │
│ QQuery 11 │   80.71 ms │                    81.34 ms │     no change │
│ QQuery 12 │  268.95 ms │                   271.10 ms │     no change │
│ QQuery 13 │  363.57 ms │                   364.64 ms │     no change │
│ QQuery 14 │  283.71 ms │                   284.19 ms │     no change │
│ QQuery 15 │  266.43 ms │                   274.67 ms │     no change │
│ QQuery 16 │  607.26 ms │                   615.60 ms │     no change │
│ QQuery 17 │  623.73 ms │                   619.71 ms │     no change │
│ QQuery 18 │ 1268.66 ms │                  1257.92 ms │     no change │
│ QQuery 19 │   27.17 ms │                    27.59 ms │     no change │
│ QQuery 20 │  509.17 ms │                   515.32 ms │     no change │
│ QQuery 21 │  509.32 ms │                   513.09 ms │     no change │
│ QQuery 22 │  980.78 ms │                   981.70 ms │     no change │
│ QQuery 23 │ 3020.82 ms │                  3068.80 ms │     no change │
│ QQuery 24 │   41.68 ms │                    42.42 ms │     no change │
│ QQuery 25 │  109.94 ms │                   109.49 ms │     no change │
│ QQuery 26 │   41.17 ms │                    41.12 ms │     no change │
│ QQuery 27 │  517.93 ms │                   515.49 ms │     no change │
│ QQuery 28 │ 2899.54 ms │                  2893.11 ms │     no change │
│ QQuery 29 │   41.26 ms │                    41.19 ms │     no change │
│ QQuery 30 │  298.96 ms │                   298.72 ms │     no change │
│ QQuery 31 │  278.44 ms │                   282.48 ms │     no change │
│ QQuery 32 │  943.44 ms │                   917.20 ms │     no change │
│ QQuery 33 │ 1438.17 ms │                  1453.52 ms │     no change │
│ QQuery 34 │ 1440.23 ms │                  1505.69 ms │     no change │
│ QQuery 35 │  279.61 ms │                   277.21 ms │     no change │
│ QQuery 36 │   66.85 ms │                    68.55 ms │     no change │
│ QQuery 37 │   35.51 ms │                    36.56 ms │     no change │
│ QQuery 38 │   41.46 ms │                    41.16 ms │     no change │
│ QQuery 39 │  146.94 ms │                   135.13 ms │ +1.09x faster │
│ QQuery 40 │   14.31 ms │                    14.42 ms │     no change │
│ QQuery 41 │   13.96 ms │                    13.89 ms │     no change │
│ QQuery 42 │   13.32 ms │                    13.23 ms │     no change │
└───────────┴────────────┴─────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 18924.80ms │
│ Total Time (perf_join-order-enumeration)   │ 19010.99ms │
│ Average Time (HEAD)                        │   440.11ms │
│ Average Time (perf_join-order-enumeration) │   442.12ms │
│ Queries Faster                             │          1 │
│ Queries Slower                             │          0 │
│ Queries with No Change                     │         42 │
│ Queries with Failure                       │          0 │
└────────────────────────────────────────────┴────────────┘

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃           perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │          1.24 / 3.95 ±5.33 / 14.62 ms │          1.24 / 4.06 ±5.53 / 15.11 ms │     no change │
│ QQuery 1  │        11.72 / 12.29 ±0.31 / 12.57 ms │        12.11 / 12.26 ±0.13 / 12.44 ms │     no change │
│ QQuery 2  │        36.29 / 36.58 ±0.26 / 37.06 ms │        36.91 / 37.17 ±0.14 / 37.32 ms │     no change │
│ QQuery 3  │        31.09 / 31.53 ±0.72 / 32.97 ms │        31.38 / 31.65 ±0.16 / 31.88 ms │     no change │
│ QQuery 4  │     225.70 / 228.07 ±1.40 / 229.56 ms │     226.63 / 228.83 ±1.32 / 230.75 ms │     no change │
│ QQuery 5  │     272.53 / 276.31 ±3.41 / 282.50 ms │     272.10 / 274.82 ±2.09 / 278.46 ms │     no change │
│ QQuery 6  │           1.27 / 1.41 ±0.22 / 1.83 ms │           1.27 / 1.40 ±0.21 / 1.80 ms │     no change │
│ QQuery 7  │        13.13 / 13.40 ±0.17 / 13.62 ms │        13.62 / 13.77 ±0.18 / 14.12 ms │     no change │
│ QQuery 8  │     330.82 / 333.62 ±2.28 / 337.41 ms │     328.04 / 330.83 ±2.07 / 333.91 ms │     no change │
│ QQuery 9  │    457.91 / 471.79 ±12.84 / 496.09 ms │    442.77 / 469.39 ±15.41 / 490.32 ms │     no change │
│ QQuery 10 │        70.08 / 70.62 ±0.40 / 71.23 ms │        68.68 / 71.67 ±3.18 / 77.79 ms │     no change │
│ QQuery 11 │        80.71 / 85.05 ±5.54 / 95.86 ms │        81.34 / 83.41 ±3.49 / 90.36 ms │     no change │
│ QQuery 12 │     268.95 / 274.42 ±4.28 / 280.42 ms │     271.10 / 277.29 ±4.90 / 285.51 ms │     no change │
│ QQuery 13 │     363.57 / 372.83 ±8.20 / 383.40 ms │     364.64 / 377.50 ±7.89 / 386.85 ms │     no change │
│ QQuery 14 │     283.71 / 286.61 ±3.54 / 293.28 ms │     284.19 / 288.80 ±5.13 / 297.21 ms │     no change │
│ QQuery 15 │     266.43 / 275.37 ±5.85 / 282.09 ms │     274.67 / 283.83 ±7.41 / 295.08 ms │     no change │
│ QQuery 16 │    607.26 / 623.81 ±13.07 / 646.37 ms │     615.60 / 622.12 ±5.45 / 632.09 ms │     no change │
│ QQuery 17 │     623.73 / 629.73 ±4.02 / 636.41 ms │     619.71 / 630.71 ±9.62 / 645.75 ms │     no change │
│ QQuery 18 │ 1268.66 / 1299.60 ±24.95 / 1340.26 ms │ 1257.92 / 1286.00 ±30.14 / 1338.02 ms │     no change │
│ QQuery 19 │       27.17 / 36.05 ±16.70 / 69.45 ms │       27.59 / 35.86 ±16.15 / 68.16 ms │     no change │
│ QQuery 20 │    509.17 / 521.18 ±10.89 / 541.62 ms │    515.32 / 527.42 ±13.34 / 552.81 ms │     no change │
│ QQuery 21 │     509.32 / 514.28 ±3.10 / 517.18 ms │     513.09 / 518.64 ±4.80 / 526.47 ms │     no change │
│ QQuery 22 │    980.78 / 992.43 ±9.25 / 1002.03 ms │     981.70 / 984.17 ±1.84 / 986.11 ms │     no change │
│ QQuery 23 │ 3020.82 / 3068.05 ±39.92 / 3126.76 ms │ 3068.80 / 3120.05 ±49.36 / 3203.16 ms │     no change │
│ QQuery 24 │        41.68 / 42.70 ±1.12 / 44.54 ms │        42.42 / 47.01 ±5.04 / 53.67 ms │  1.10x slower │
│ QQuery 25 │     109.94 / 111.57 ±1.53 / 114.19 ms │     109.49 / 110.09 ±0.38 / 110.42 ms │     no change │
│ QQuery 26 │        41.17 / 41.82 ±0.59 / 42.77 ms │        41.12 / 41.59 ±0.57 / 42.57 ms │     no change │
│ QQuery 27 │     517.93 / 522.84 ±4.74 / 531.36 ms │     515.49 / 523.20 ±6.49 / 532.62 ms │     no change │
│ QQuery 28 │ 2899.54 / 2919.73 ±17.96 / 2948.32 ms │ 2893.11 / 2926.19 ±26.92 / 2967.90 ms │     no change │
│ QQuery 29 │        41.26 / 52.43 ±9.42 / 63.06 ms │        41.19 / 41.62 ±0.50 / 42.46 ms │ +1.26x faster │
│ QQuery 30 │     298.96 / 309.52 ±6.23 / 317.31 ms │    298.72 / 310.08 ±10.75 / 329.38 ms │     no change │
│ QQuery 31 │    278.44 / 292.90 ±13.30 / 316.05 ms │    282.48 / 302.05 ±12.18 / 320.81 ms │     no change │
│ QQuery 32 │    943.44 / 967.21 ±19.23 / 990.08 ms │   917.20 / 952.54 ±28.91 / 1000.33 ms │     no change │
│ QQuery 33 │ 1438.17 / 1464.75 ±16.98 / 1487.26 ms │ 1453.52 / 1500.79 ±30.91 / 1536.53 ms │     no change │
│ QQuery 34 │ 1440.23 / 1492.51 ±44.63 / 1572.01 ms │ 1505.69 / 1544.74 ±23.40 / 1572.77 ms │     no change │
│ QQuery 35 │    279.61 / 320.38 ±64.38 / 448.80 ms │    277.21 / 309.01 ±39.40 / 384.73 ms │     no change │
│ QQuery 36 │        66.85 / 72.38 ±6.67 / 85.42 ms │        68.55 / 70.49 ±1.54 / 73.10 ms │     no change │
│ QQuery 37 │        35.51 / 38.61 ±3.80 / 44.70 ms │        36.56 / 43.21 ±5.86 / 52.45 ms │  1.12x slower │
│ QQuery 38 │        41.46 / 47.00 ±4.32 / 52.27 ms │        41.16 / 43.52 ±1.45 / 44.85 ms │ +1.08x faster │
│ QQuery 39 │     146.94 / 152.59 ±4.86 / 160.81 ms │    135.13 / 158.26 ±15.01 / 173.14 ms │     no change │
│ QQuery 40 │        14.31 / 15.01 ±1.22 / 17.45 ms │        14.42 / 14.89 ±0.37 / 15.25 ms │     no change │
│ QQuery 41 │        13.96 / 17.11 ±5.37 / 27.82 ms │        13.89 / 14.20 ±0.34 / 14.74 ms │ +1.20x faster │
│ QQuery 42 │        13.32 / 13.43 ±0.10 / 13.54 ms │        13.23 / 13.44 ±0.16 / 13.62 ms │     no change │
└───────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 19353.48ms │
│ Total Time (perf_join-order-enumeration)   │ 19478.56ms │
│ Average Time (HEAD)                        │   450.08ms │
│ Average Time (perf_join-order-enumeration) │   452.99ms │
│ Queries Faster                             │          3 │
│ Queries Slower                             │          2 │
│ Queries with No Change                     │         38 │
│ Queries with Failure                       │          0 │
└────────────────────────────────────────────┴────────────┘

Resource Usage

clickbench_partitioned — base (merge-base)

Metric Value
Wall time 100.0s
Peak memory 10.6 GiB
Avg memory 4.1 GiB
CPU user 995.3s
CPU sys 68.2s
Peak spill 0 B

clickbench_partitioned — branch

Metric Value
Wall time 100.0s
Peak memory 12.0 GiB
Avg memory 4.3 GiB
CPU user 992.9s
CPU sys 71.2s
Peak spill 0 B

File an issue against this benchmark runner

Comments were carrying explanation that the code already states. Cut them
back to the reasoning that is not evident from reading it: why reordering is
sound, why one key per class per cut is enough, why the predicate is not
re-associated before interval analysis.

Drop `solve_greedy`. It was a second search strategy for graphs above the
exhaustive limit that no benchmark reaches -- TPC-H and TPC-DS graphs are
eight relations at most -- so it was untested surface. Graphs that large now
keep the planner's order, which is what happened before enumeration existed.
That also merges the two size bounds into one.

Fold three end-to-end row-equality tests into one over four queries, and fix
two lint failures: `HashSet<ScalarValue>` trips `mutable_key_type`, and two
bitmask tests are `is_power_of_two`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@asolimando

Copy link
Copy Markdown
Member

The benchmark results are very promising and I am very excited to see work in this area!

I haven't had time to look into the details of the code, but since this is still a draft I'd like to mention DpHyp for the join ordering problem.

It has been integrated in CALCITE-6846, an implementation ported from Apache Doris with a few additional improvements.

According to https://www.alibabacloud.com/blog/602899 it's also the join ordering implementation of both DuckDB and MySQL. DuckDB is especially relevant as it's often cited here in the community as a source of inspiration.

DPHyp might be a good alternative over the in-house implementation, especially for dealing with many non inner-join cases, which are always tricky. Alternatively, it might at least provide ideas for some of the open questions we have.

I feel that the algorithm itself wouldn't need customization points, as it's mostly cost-agnostic, what we would like to provide is a customization around statistics/cost-model.

For the former #23651 will probably suffice (paired with the improved version of #21122 which is next on my list).

For the latter, I think it can be done via a physical planning rule "costing" alternatives coming from the hypergraph, to pick the cheapest, as physical rules are already a known customization point.

@alamb

alamb commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

The benchmark results are very promising and I am very excited to see work in this area!

I haven't had time to look into the details of the code, but since this is still a draft I'd like to mention DpHyp for the join ordering problem.

Yes, this kind of observation is exactly why I think we need to have an extensible framework (to be able to swap different implementations in/out)

I feel that the algorithm itself wouldn't need customization points, as it's mostly cost-agnostic, what we would like to provide is a customization around statistics/cost-model.

Yes, I think in general join optimization algorthms are all:

  1. A set of heuristics for choosing candidates / exploring the state space
  2. A cost model to pick between them

And there are 50 years of papers about different implementations of the above

I think it is absolutely certain we will not be able to include any implementation in the core that will satisfy all use cases.

For the former #23651 will probably suffice (paired with the improved version of #21122 which is next on my list).

Great -- thank you. I'll try and look at them later

For the latter, I think it can be done via a physical planning rule "costing" alternatives coming from the hypergraph, to pick the cheapest, as physical rules are already a known customization point.

yes, I agree -- I will try and propose an API for this

@alamb

alamb commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

@asolimando, perhaps once we have an API proposed a good test would be "could we implement DpHyp using it"

@alamb

alamb commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

BTW I plan to finish up the DF 55 release blog first, but then I hope to spend some time wiht this PR making some API proposals

@Dandandan

Dandandan commented Aug 21, 2026

Copy link
Copy Markdown
Contributor Author

I haven't had time to look into the details of the code, but since this is still a draft I'd like to mention DpHyp for the join ordering problem.

I think the current approach is more close to DPsub but of course I am open to try DpHyp and see differences. I think one shortcoming of the current approach is not supporting non-inner/semi joins, so solving that with some approach would be great and probably improve performance somewhat more!

On my machine with the join ordering, DataFusion beats DuckDB on TPC-H at least (didn't check TPC-DS compared to DuckDB). It would make a nice blog post if that's a robust result...

I also agree with @alamb if we have a nice API that allows to register a different algorithm, one could just swap the default (although my goal would be to have a great default that works >90% of the time).

@asolimando

Copy link
Copy Markdown
Member

On my machine with the join ordering, DataFusion beats DuckDB on TPC-H at least (didn't check TPC-DS). It would make a nice blog post if that's a robust result...

In case you want further coverage beyond TPC-* benchmarks, I can suggest the join-ordering-benchmark/JOB (original paper, implementation).

@Dandandan

Dandandan commented Aug 21, 2026

Copy link
Copy Markdown
Contributor Author

On my machine with the join ordering, DataFusion beats DuckDB on TPC-H at least (didn't check TPC-DS). It would make a nice blog post if that's a robust result...

In case you want further coverage beyond TPC-* benchmarks, I can suggest the join-ordering-benchmark/JOB (original paper, implementation).

Thanks for reminding - I think we also have it in here (or at least a version). https://github.com/apache/datafusion/tree/58150eac882b65c3d137e0dedb34b018e1605d3a/benchmarks/sql_benchmarks/imdb

…ins with it

The search now enumerates connected subgraph/complement pairs (Moerkotte and
Neumann, SIGMOD 2008) instead of every split of every subset. It reaches the
same pairs, so it picks the same order; a sparse graph just has far fewer
connected pairs than it has splits. The every-split search stays in `dphyp.rs`'s
tests as the oracle a randomized parity test checks against.

Breaking ties on the relation sets, rather than on whichever pair the search
reached first, keeps the plan from depending on the enumeration order at all --
without it, 20 of 99 TPC-DS plans differed between the two searches purely by
visit order.

What takes part in a reorder is wider:

- Outer and mark joins join semi and anti joins as relations *applied* to the
  set their keys come from: a semi or anti join filters that side, an outer join
  extends it, a mark join marks it. They are emitted as the `Right*` join types
  with the applied side building. A predicate over a null-supplied or marked
  column still stops the rewrite, since where such a join lands decides which
  rows those columns are null or false for.
- A join key may now be a cast of a column, and a projection between joins may
  compute one. Coercing a key's two sides to one type puts the cast in a
  projection below the join, which used to make that projection an opaque leaf
  and cut the join tree into fragments -- the whole Join Order Benchmark was
  invisible to this rule because its ids are `UInt32` and its foreign keys
  `Int32`.

Predicates that share a column state one equality however many pairs write it.
Counting a pair each collapsed the estimate for a redundant clique -- JOB 15d
writes one `movie_id` equality ten ways between five relations -- so each
equality now spends at most `k - 1` pair denominators.

`join_enumeration_min_improvement` is gone: the rule takes any cheaper order.
`join_enumeration_limit` defaults to 16, which the cheaper search affords.

Planning cost was almost all allocation and hashing per visited pair:
`exchanges` appends into a buffer the table reuses instead of returning a `Vec`,
the per-subset partitioning maps became scanned vectors, `combine` is asked once
per pair rather than twice, and both cardinality and the reusable classes are
memoized. A plan is also no longer kept apart from the cheapest one once no join
above can hash on its partitioning, which is what kept ten plans per subset
alive: TPC-DS q64 now holds one.

Measured here, against this rule turned off: JOB execution 70.5s -> 30.5s,
TPC-DS SF1 8.53s -> 5.88s, TPC-H SF10 8.26s -> 7.23s, TPC-H SF1 0.80s -> 0.78s,
with every JOB row count unchanged. Enumeration's share of planning is now below
the noise of the rest of it; the worst single query went from +678ms to +8ms.

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

Copy link
Copy Markdown
Contributor Author

On my machine with the join ordering, DataFusion beats DuckDB on TPC-H at least (didn't check TPC-DS). It would make a nice blog post if that's a robust result...

In case you want further coverage beyond TPC-* benchmarks, I can suggest the join-ordering-benchmark/JOB (original paper, implementation).

Thanks for the suggestion - current draft is implements DPHyp, and I benchmarked the implementation against JOB.

It seems quite a bit faster in planning and now supports outer / mark joins as well, improving some queries that use them. Ill probably compare plans against DuckDB and or calcite and see if query plans are significantly different.

…meration

`default_filter_selectivity` is a `ConfigFilterSelectivity` now, so the cost
model reads it through `get()`, and the distribution match in
`keep_partitioning_needed_above` is a `let...else` now that upstream's
`KeyPartitioned` gave it a second pattern and `manual_let_else` fires.

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

Copy link
Copy Markdown
Contributor Author

run benchmark tpch tpcds tpch10

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5381129576-1871-vgdcg 6.12.85+ #1 SMP Sat Jun 27 09:31:30 UTC 2026 aarch64 GNU/Linux

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

Comparing perf/join-order-enumeration (b8acd17) to fc15e25 (merge-base) diff

Run configuration
run benchmark tpch

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5381129576-1872-5l4nc 6.12.85+ #1 SMP Sat Jun 27 09:31:30 UTC 2026 aarch64 GNU/Linux

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

Comparing perf/join-order-enumeration (b8acd17) to fc15e25 (merge-base) diff

Run configuration
run benchmark tpcds

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5381129576-1873-vr57l 6.12.85+ #1 SMP Sat Jun 27 09:31:30 UTC 2026 aarch64 GNU/Linux

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

Comparing perf/join-order-enumeration (b8acd17) to fc15e25 (merge-base) diff

Run configuration
run benchmark tpch10

Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing perf/join-order-enumeration (b8acd17) to fc15e25 (merge-base) diff

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃     HEAD ┃ perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.42 ms │                    38.13 ms │     no change │
│ QQuery 2  │ 19.38 ms │                    16.36 ms │ +1.18x faster │
│ QQuery 3  │ 31.39 ms │                    28.08 ms │ +1.12x faster │
│ QQuery 4  │ 17.38 ms │                    17.30 ms │     no change │
│ QQuery 5  │ 37.65 ms │                    32.00 ms │ +1.18x faster │
│ QQuery 6  │ 15.99 ms │                    15.99 ms │     no change │
│ QQuery 7  │ 43.83 ms │                    33.73 ms │ +1.30x faster │
│ QQuery 8  │ 43.84 ms │                    45.93 ms │     no change │
│ QQuery 9  │ 51.25 ms │                    47.09 ms │ +1.09x faster │
│ QQuery 10 │ 45.31 ms │                    41.31 ms │ +1.10x faster │
│ QQuery 11 │ 14.30 ms │                    13.24 ms │ +1.08x faster │
│ QQuery 12 │ 24.93 ms │                    22.81 ms │ +1.09x faster │
│ QQuery 13 │ 33.50 ms │                    32.75 ms │     no change │
│ QQuery 14 │ 24.21 ms │                    23.76 ms │     no change │
│ QQuery 15 │ 31.58 ms │                    30.42 ms │     no change │
│ QQuery 16 │ 13.38 ms │                    13.60 ms │     no change │
│ QQuery 17 │ 70.62 ms │                    68.85 ms │     no change │
│ QQuery 18 │ 59.55 ms │                    38.68 ms │ +1.54x faster │
│ QQuery 19 │ 32.11 ms │                    33.60 ms │     no change │
│ QQuery 20 │ 31.28 ms │                    31.03 ms │     no change │
│ QQuery 21 │ 55.09 ms │                    52.10 ms │ +1.06x faster │
│ QQuery 22 │ 14.22 ms │                    14.01 ms │     no change │
└───────────┴──────────┴─────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                          ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 749.24ms │
│ Total Time (perf_join-order-enumeration)   │ 690.77ms │
│ Average Time (HEAD)                        │  34.06ms │
│ Average Time (perf_join-order-enumeration) │  31.40ms │
│ Queries Faster                             │       10 │
│ Queries Slower                             │        0 │
│ Queries with No Change                     │       12 │
│ Queries with Failure                       │        0 │
└────────────────────────────────────────────┴──────────┘

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                           HEAD ┃    perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 38.42 / 39.43 ±1.03 / 40.80 ms │ 38.13 / 39.49 ±1.28 / 41.09 ms │     no change │
│ QQuery 2  │ 19.38 / 20.09 ±0.77 / 21.21 ms │ 16.36 / 16.72 ±0.26 / 17.17 ms │ +1.20x faster │
│ QQuery 3  │ 31.39 / 32.05 ±0.80 / 33.38 ms │ 28.08 / 29.22 ±1.10 / 31.31 ms │ +1.10x faster │
│ QQuery 4  │ 17.38 / 17.52 ±0.13 / 17.70 ms │ 17.30 / 18.03 ±0.82 / 19.11 ms │     no change │
│ QQuery 5  │ 37.65 / 39.03 ±1.14 / 40.22 ms │ 32.00 / 32.13 ±0.13 / 32.35 ms │ +1.21x faster │
│ QQuery 6  │ 15.99 / 16.11 ±0.12 / 16.34 ms │ 15.99 / 16.19 ±0.19 / 16.52 ms │     no change │
│ QQuery 7  │ 43.83 / 46.41 ±1.98 / 49.40 ms │ 33.73 / 34.29 ±0.68 / 35.61 ms │ +1.35x faster │
│ QQuery 8  │ 43.84 / 44.23 ±0.41 / 44.97 ms │ 45.93 / 47.90 ±1.54 / 49.46 ms │  1.08x slower │
│ QQuery 9  │ 51.25 / 52.64 ±0.99 / 54.24 ms │ 47.09 / 48.05 ±0.82 / 49.21 ms │ +1.10x faster │
│ QQuery 10 │ 45.31 / 46.26 ±0.70 / 47.42 ms │ 41.31 / 42.22 ±1.01 / 43.94 ms │ +1.10x faster │
│ QQuery 11 │ 14.30 / 14.45 ±0.13 / 14.69 ms │ 13.24 / 13.85 ±0.56 / 14.65 ms │     no change │
│ QQuery 12 │ 24.93 / 25.32 ±0.26 / 25.70 ms │ 22.81 / 23.05 ±0.22 / 23.32 ms │ +1.10x faster │
│ QQuery 13 │ 33.50 / 34.13 ±0.94 / 35.99 ms │ 32.75 / 34.66 ±1.63 / 37.09 ms │     no change │
│ QQuery 14 │ 24.21 / 25.09 ±0.99 / 27.02 ms │ 23.76 / 24.02 ±0.25 / 24.46 ms │     no change │
│ QQuery 15 │ 31.58 / 32.52 ±0.52 / 32.92 ms │ 30.42 / 31.12 ±0.72 / 32.19 ms │     no change │
│ QQuery 16 │ 13.38 / 13.75 ±0.25 / 14.14 ms │ 13.60 / 14.05 ±0.31 / 14.52 ms │     no change │
│ QQuery 17 │ 70.62 / 75.86 ±2.75 / 78.73 ms │ 68.85 / 70.52 ±1.22 / 72.46 ms │ +1.08x faster │
│ QQuery 18 │ 59.55 / 60.64 ±1.20 / 62.78 ms │ 38.68 / 40.12 ±0.96 / 41.40 ms │ +1.51x faster │
│ QQuery 19 │ 32.11 / 32.45 ±0.33 / 33.03 ms │ 33.60 / 34.89 ±1.86 / 38.57 ms │  1.08x slower │
│ QQuery 20 │ 31.28 / 31.57 ±0.17 / 31.81 ms │ 31.03 / 31.78 ±0.74 / 33.18 ms │     no change │
│ QQuery 21 │ 55.09 / 56.43 ±1.32 / 58.77 ms │ 52.10 / 55.55 ±1.89 / 57.17 ms │     no change │
│ QQuery 22 │ 14.22 / 14.43 ±0.15 / 14.67 ms │ 14.01 / 14.19 ±0.09 / 14.27 ms │     no change │
└───────────┴────────────────────────────────┴────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                          ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 770.40ms │
│ Total Time (perf_join-order-enumeration)   │ 712.05ms │
│ Average Time (HEAD)                        │  35.02ms │
│ Average Time (perf_join-order-enumeration) │  32.37ms │
│ Queries Faster                             │        9 │
│ Queries Slower                             │        2 │
│ Queries with No Change                     │       11 │
│ Queries with Failure                       │        0 │
└────────────────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.0s
Peak memory 1.2 GiB
Avg memory 506.5 MiB
CPU user 22.0s
CPU sys 1.9s
Peak spill 0 B

tpch — branch

Metric Value
Wall time 5.0s
Peak memory 1.0 GiB
Avg memory 445.5 MiB
CPU user 19.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 perf/join-order-enumeration (b8acd17) to fc15e25 (merge-base) diff

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpch_sf10.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 310.18 ms │                   309.61 ms │     no change │
│ QQuery 2  │ 103.09 ms │                    69.50 ms │ +1.48x faster │
│ QQuery 3  │ 234.57 ms │                   214.93 ms │ +1.09x faster │
│ QQuery 4  │ 115.29 ms │                   116.85 ms │     no change │
│ QQuery 5  │ 354.09 ms │                   277.52 ms │ +1.28x faster │
│ QQuery 6  │ 122.81 ms │                   122.78 ms │     no change │
│ QQuery 7  │ 479.19 ms │                   247.15 ms │ +1.94x faster │
│ QQuery 8  │ 376.93 ms │                   411.44 ms │  1.09x slower │
│ QQuery 9  │ 555.30 ms │                   507.19 ms │ +1.09x faster │
│ QQuery 10 │ 296.05 ms │                   302.19 ms │     no change │
│ QQuery 11 │  85.83 ms │                    57.11 ms │ +1.50x faster │
│ QQuery 12 │ 178.78 ms │                   164.46 ms │ +1.09x faster │
│ QQuery 13 │ 292.01 ms │                   296.42 ms │     no change │
│ QQuery 14 │ 169.32 ms │                   171.60 ms │     no change │
│ QQuery 15 │ 302.07 ms │                   299.63 ms │     no change │
│ QQuery 16 │  63.24 ms │                    57.47 ms │ +1.10x faster │
│ QQuery 17 │ 627.64 ms │                   575.13 ms │ +1.09x faster │
│ QQuery 18 │ 692.31 ms │                   355.60 ms │ +1.95x faster │
│ QQuery 19 │ 243.69 ms │                   253.48 ms │     no change │
│ QQuery 20 │ 269.88 ms │                   269.85 ms │     no change │
│ QQuery 21 │ 656.79 ms │                   625.27 ms │     no change │
│ QQuery 22 │  57.49 ms │                    61.62 ms │  1.07x slower │
└───────────┴───────────┴─────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 6586.55ms │
│ Total Time (perf_join-order-enumeration)   │ 5766.79ms │
│ Average Time (HEAD)                        │  299.39ms │
│ Average Time (perf_join-order-enumeration) │  262.13ms │
│ Queries Faster                             │        10 │
│ Queries Slower                             │         2 │
│ Queries with No Change                     │        10 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpch_sf10.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃                               HEAD ┃        perf_join-order-enumeration ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │  310.18 / 312.10 ±1.25 / 313.79 ms │  309.61 / 310.89 ±0.85 / 311.88 ms │     no change │
│ QQuery 2  │  103.09 / 105.47 ±2.30 / 108.45 ms │     69.50 / 71.61 ±1.38 / 73.45 ms │ +1.47x faster │
│ QQuery 3  │  234.57 / 238.14 ±3.08 / 242.33 ms │  214.93 / 220.73 ±4.38 / 227.16 ms │ +1.08x faster │
│ QQuery 4  │  115.29 / 116.15 ±0.78 / 117.52 ms │  116.85 / 118.44 ±1.34 / 120.42 ms │     no change │
│ QQuery 5  │  354.09 / 361.48 ±4.28 / 367.13 ms │  277.52 / 281.96 ±4.00 / 287.71 ms │ +1.28x faster │
│ QQuery 6  │  122.81 / 125.90 ±4.00 / 133.81 ms │  122.78 / 124.02 ±0.72 / 124.99 ms │     no change │
│ QQuery 7  │  479.19 / 484.90 ±5.58 / 492.45 ms │  247.15 / 248.37 ±0.90 / 249.57 ms │ +1.95x faster │
│ QQuery 8  │  376.93 / 384.71 ±5.11 / 390.61 ms │  411.44 / 415.01 ±3.72 / 420.41 ms │  1.08x slower │
│ QQuery 9  │ 555.30 / 571.22 ±10.10 / 583.92 ms │ 507.19 / 545.98 ±34.45 / 600.48 ms │     no change │
│ QQuery 10 │  296.05 / 303.10 ±5.21 / 310.48 ms │  302.19 / 307.82 ±5.15 / 317.36 ms │     no change │
│ QQuery 11 │    85.83 / 91.29 ±8.00 / 106.79 ms │     57.11 / 58.99 ±1.41 / 61.35 ms │ +1.55x faster │
│ QQuery 12 │  178.78 / 180.92 ±1.72 / 183.61 ms │  164.46 / 171.20 ±6.84 / 183.24 ms │ +1.06x faster │
│ QQuery 13 │ 292.01 / 304.83 ±13.50 / 330.71 ms │  296.42 / 301.53 ±4.86 / 308.30 ms │     no change │
│ QQuery 14 │  169.32 / 175.59 ±5.80 / 183.77 ms │  171.60 / 176.12 ±4.68 / 184.22 ms │     no change │
│ QQuery 15 │  302.07 / 305.29 ±2.96 / 309.76 ms │  299.63 / 303.02 ±2.17 / 306.14 ms │     no change │
│ QQuery 16 │     63.24 / 68.81 ±5.67 / 79.15 ms │     57.47 / 58.70 ±0.81 / 59.84 ms │ +1.17x faster │
│ QQuery 17 │  627.64 / 638.06 ±8.70 / 651.19 ms │  575.13 / 587.23 ±9.23 / 603.00 ms │ +1.09x faster │
│ QQuery 18 │ 692.31 / 714.74 ±14.74 / 735.46 ms │  355.60 / 367.18 ±7.24 / 374.75 ms │ +1.95x faster │
│ QQuery 19 │  243.69 / 253.03 ±9.57 / 266.21 ms │  253.48 / 263.31 ±8.68 / 278.29 ms │     no change │
│ QQuery 20 │ 269.88 / 288.21 ±10.31 / 300.13 ms │ 269.85 / 277.57 ±11.66 / 300.62 ms │     no change │
│ QQuery 21 │  656.79 / 661.22 ±4.00 / 667.25 ms │  625.27 / 638.31 ±9.57 / 652.91 ms │     no change │
│ QQuery 22 │     57.49 / 61.51 ±3.01 / 65.75 ms │     61.62 / 63.03 ±1.36 / 65.28 ms │     no change │
└───────────┴────────────────────────────────────┴────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 6746.67ms │
│ Total Time (perf_join-order-enumeration)   │ 5911.01ms │
│ Average Time (HEAD)                        │  306.67ms │
│ Average Time (perf_join-order-enumeration) │  268.68ms │
│ Queries Faster                             │         9 │
│ Queries Slower                             │         1 │
│ Queries with No Change                     │        12 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

Resource Usage

tpch10 — base (merge-base)

Metric Value
Wall time 35.0s
Peak memory 5.0 GiB
Avg memory 1.5 GiB
CPU user 342.7s
CPU sys 20.3s
Peak spill 0 B

tpch10 — branch

Metric Value
Wall time 30.0s
Peak memory 3.6 GiB
Avg memory 1.5 GiB
CPU user 281.5s
CPU sys 17.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

Comparing perf/join-order-enumeration (b8acd17) to fc15e25 (merge-base) diff

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃       HEAD ┃ perf_join-order-enumeration ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 1  │    5.93 ms │                     5.83 ms │      no change │
│ QQuery 2  │   81.88 ms │                    82.07 ms │      no change │
│ QQuery 3  │   29.07 ms │                    25.91 ms │  +1.12x faster │
│ QQuery 4  │  492.42 ms │                   483.04 ms │      no change │
│ QQuery 5  │   52.97 ms │                    52.51 ms │      no change │
│ QQuery 6  │   36.36 ms │                    36.16 ms │      no change │
│ QQuery 7  │   95.54 ms │                    77.32 ms │  +1.24x faster │
│ QQuery 8  │   36.93 ms │                    37.05 ms │      no change │
│ QQuery 9  │   52.17 ms │                    52.02 ms │      no change │
│ QQuery 10 │   63.24 ms │                    57.98 ms │  +1.09x faster │
│ QQuery 11 │  304.48 ms │                   246.92 ms │  +1.23x faster │
│ QQuery 12 │   28.98 ms │                    29.26 ms │      no change │
│ QQuery 13 │  118.57 ms │                   119.25 ms │      no change │
│ QQuery 14 │  420.78 ms │                   346.82 ms │  +1.21x faster │
│ QQuery 15 │   59.16 ms │                    52.45 ms │  +1.13x faster │
│ QQuery 16 │    7.00 ms │                     6.86 ms │      no change │
│ QQuery 17 │   80.69 ms │                    56.46 ms │  +1.43x faster │
│ QQuery 18 │  121.83 ms │                   119.04 ms │      no change │
│ QQuery 19 │   41.52 ms │                    42.86 ms │      no change │
│ QQuery 20 │   35.07 ms │                    35.50 ms │      no change │
│ QQuery 21 │   17.19 ms │                    13.39 ms │  +1.28x faster │
│ QQuery 22 │   62.35 ms │                    63.56 ms │      no change │
│ QQuery 23 │  340.36 ms │                   273.65 ms │  +1.24x faster │
│ QQuery 24 │  223.44 ms │                   163.01 ms │  +1.37x faster │
│ QQuery 25 │  109.09 ms │                    96.47 ms │  +1.13x faster │
│ QQuery 26 │   57.29 ms │                    53.97 ms │  +1.06x faster │
│ QQuery 27 │    6.22 ms │                     6.01 ms │      no change │
│ QQuery 28 │   60.51 ms │                    61.99 ms │      no change │
│ QQuery 29 │   96.16 ms │                    71.55 ms │  +1.34x faster │
│ QQuery 30 │   32.14 ms │                    32.38 ms │      no change │
│ QQuery 31 │  110.10 ms │                   111.22 ms │      no change │
│ QQuery 32 │   19.87 ms │                    20.46 ms │      no change │
│ QQuery 33 │   37.83 ms │                    38.25 ms │      no change │
│ QQuery 34 │    9.95 ms │                     6.16 ms │  +1.62x faster │
│ QQuery 35 │   72.22 ms │                    66.48 ms │  +1.09x faster │
│ QQuery 36 │    5.82 ms │                     6.58 ms │   1.13x slower │
│ QQuery 37 │    6.76 ms │                     6.71 ms │      no change │
│ QQuery 38 │   61.10 ms │                    62.21 ms │      no change │
│ QQuery 39 │   90.11 ms │                    78.83 ms │  +1.14x faster │
│ QQuery 40 │   22.97 ms │                    20.15 ms │  +1.14x faster │
│ QQuery 41 │   11.24 ms │                    11.45 ms │      no change │
│ QQuery 42 │   23.56 ms │                    25.93 ms │   1.10x slower │
│ QQuery 43 │    5.30 ms │                     5.19 ms │      no change │
│ QQuery 44 │    9.66 ms │                     9.69 ms │      no change │
│ QQuery 45 │   37.65 ms │                    23.23 ms │  +1.62x faster │
│ QQuery 46 │   11.76 ms │                     6.96 ms │  +1.69x faster │
│ QQuery 47 │  225.49 ms │                   227.36 ms │      no change │
│ QQuery 48 │   94.98 ms │                    97.31 ms │      no change │
│ QQuery 49 │   76.29 ms │                    72.25 ms │  +1.06x faster │
│ QQuery 50 │   59.06 ms │                    52.41 ms │  +1.13x faster │
│ QQuery 51 │   92.26 ms │                    92.83 ms │      no change │
│ QQuery 52 │   23.80 ms │                    26.70 ms │   1.12x slower │
│ QQuery 53 │   28.76 ms │                    30.01 ms │      no change │
│ QQuery 54 │   54.23 ms │                    25.36 ms │  +2.14x faster │
│ QQuery 55 │   23.21 ms │                    25.78 ms │   1.11x slower │
│ QQuery 56 │   38.75 ms │                    44.70 ms │   1.15x slower │
│ QQuery 57 │  176.62 ms │                   176.96 ms │      no change │
│ QQuery 58 │  113.24 ms │                    51.34 ms │  +2.21x faster │
│ QQuery 59 │  118.21 ms │                   118.98 ms │      no change │
│ QQuery 60 │   39.48 ms │                    42.40 ms │   1.07x slower │
│ QQuery 61 │   12.22 ms │                    10.44 ms │  +1.17x faster │
│ QQuery 62 │   46.29 ms │                    30.97 ms │  +1.49x faster │
│ QQuery 63 │   29.41 ms │                    29.75 ms │      no change │
│ QQuery 64 │  407.07 ms │                   230.10 ms │  +1.77x faster │
│ QQuery 65 │  121.66 ms │                   124.79 ms │      no change │
│ QQuery 66 │   80.83 ms │                    66.62 ms │  +1.21x faster │
│ QQuery 67 │  237.90 ms │                   243.44 ms │      no change │
│ QQuery 68 │   11.83 ms │                     7.72 ms │  +1.53x faster │
│ QQuery 69 │   56.99 ms │                    62.66 ms │   1.10x slower │
│ QQuery 70 │  105.94 ms │                    77.95 ms │  +1.36x faster │
│ QQuery 71 │   34.71 ms │                    35.53 ms │      no change │
│ QQuery 72 │ 2044.71 ms │                    77.57 ms │ +26.36x faster │
│ QQuery 73 │   10.04 ms │                     6.16 ms │  +1.63x faster │
│ QQuery 74 │  169.11 ms │                   174.92 ms │      no change │
│ QQuery 75 │  147.23 ms │                   109.26 ms │  +1.35x faster │
│ QQuery 76 │   35.02 ms │                    35.19 ms │      no change │
│ QQuery 77 │   60.93 ms │                    62.35 ms │      no change │
│ QQuery 78 │  195.32 ms │                   217.17 ms │   1.11x slower │
│ QQuery 79 │   66.42 ms │                    69.94 ms │   1.05x slower │
│ QQuery 80 │   98.96 ms │                    77.01 ms │  +1.28x faster │
│ QQuery 81 │   26.58 ms │                    26.07 ms │      no change │
│ QQuery 82 │   16.54 ms │                    18.20 ms │   1.10x slower │
│ QQuery 83 │   40.16 ms │                    23.27 ms │  +1.73x faster │
│ QQuery 84 │   29.66 ms │                    38.55 ms │   1.30x slower │
│ QQuery 85 │  106.58 ms │                    98.37 ms │  +1.08x faster │
│ QQuery 86 │   25.71 ms │                    24.88 ms │      no change │
│ QQuery 87 │   61.81 ms │                    61.36 ms │      no change │
│ QQuery 88 │   63.41 ms │                    59.11 ms │  +1.07x faster │
│ QQuery 89 │   35.65 ms │                    32.41 ms │  +1.10x faster │
│ QQuery 90 │   17.24 ms │                    14.74 ms │  +1.17x faster │
│ QQuery 91 │   45.70 ms │                    41.80 ms │  +1.09x faster │
│ QQuery 92 │   29.57 ms │                    29.00 ms │      no change │
│ QQuery 93 │   49.96 ms │                    50.22 ms │      no change │
│ QQuery 94 │   37.93 ms │                    37.85 ms │      no change │
│ QQuery 95 │   79.88 ms │                    80.88 ms │      no change │
│ QQuery 96 │   23.90 ms │                    20.53 ms │  +1.16x faster │
│ QQuery 97 │   46.75 ms │                    53.18 ms │   1.14x slower │
│ QQuery 98 │   42.27 ms │                    42.51 ms │      no change │
│ QQuery 99 │   70.47 ms │                    45.71 ms │  +1.54x faster │
└───────────┴────────────┴─────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 9691.96ms │
│ Total Time (perf_join-order-enumeration)   │ 6933.35ms │
│ Average Time (HEAD)                        │   97.90ms │
│ Average Time (perf_join-order-enumeration) │   70.03ms │
│ Queries Faster                             │        41 │
│ Queries Slower                             │        12 │
│ Queries with No Change                     │        46 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

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

Comparing HEAD and perf_join-order-enumeration
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query     ┃                                  HEAD ┃       perf_join-order-enumeration ┃         Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 1  │           5.93 / 6.72 ±1.07 / 8.84 ms │       5.83 / 6.38 ±0.95 / 8.27 ms │  +1.05x faster │
│ QQuery 2  │        81.88 / 82.71 ±0.53 / 83.36 ms │    82.07 / 82.45 ±0.38 / 82.94 ms │      no change │
│ QQuery 3  │        29.07 / 29.41 ±0.30 / 29.91 ms │    25.91 / 26.14 ±0.29 / 26.68 ms │  +1.12x faster │
│ QQuery 4  │     492.42 / 494.66 ±1.67 / 497.31 ms │ 483.04 / 490.27 ±7.04 / 501.82 ms │      no change │
│ QQuery 5  │        52.97 / 53.51 ±0.79 / 55.07 ms │    52.51 / 53.22 ±0.82 / 54.79 ms │      no change │
│ QQuery 6  │        36.36 / 36.82 ±0.38 / 37.39 ms │    36.16 / 36.76 ±0.38 / 37.22 ms │      no change │
│ QQuery 7  │        95.54 / 96.20 ±0.49 / 96.91 ms │    77.32 / 77.86 ±0.32 / 78.23 ms │  +1.24x faster │
│ QQuery 8  │        36.93 / 39.18 ±3.88 / 46.92 ms │    37.05 / 38.04 ±1.59 / 41.20 ms │      no change │
│ QQuery 9  │        52.17 / 55.05 ±2.84 / 60.28 ms │    52.02 / 54.40 ±1.80 / 56.84 ms │      no change │
│ QQuery 10 │        63.24 / 63.37 ±0.07 / 63.45 ms │    57.98 / 58.72 ±0.49 / 59.29 ms │  +1.08x faster │
│ QQuery 11 │     304.48 / 308.14 ±2.60 / 310.80 ms │ 246.92 / 250.78 ±2.16 / 252.92 ms │  +1.23x faster │
│ QQuery 12 │        28.98 / 29.43 ±0.30 / 29.81 ms │    29.26 / 31.03 ±2.89 / 36.80 ms │   1.05x slower │
│ QQuery 13 │     118.57 / 120.30 ±1.61 / 123.35 ms │ 119.25 / 120.58 ±1.28 / 122.57 ms │      no change │
│ QQuery 14 │     420.78 / 425.29 ±4.62 / 433.22 ms │ 346.82 / 350.08 ±3.70 / 357.22 ms │  +1.21x faster │
│ QQuery 15 │        59.16 / 59.80 ±0.42 / 60.23 ms │    52.45 / 53.87 ±0.72 / 54.39 ms │  +1.11x faster │
│ QQuery 16 │           7.00 / 7.15 ±0.16 / 7.43 ms │       6.86 / 7.12 ±0.34 / 7.79 ms │      no change │
│ QQuery 17 │        80.69 / 81.87 ±1.38 / 84.42 ms │    56.46 / 56.83 ±0.30 / 57.28 ms │  +1.44x faster │
│ QQuery 18 │     121.83 / 124.12 ±2.25 / 127.36 ms │ 119.04 / 119.90 ±1.36 / 122.61 ms │      no change │
│ QQuery 19 │        41.52 / 41.70 ±0.16 / 41.99 ms │    42.86 / 43.41 ±0.35 / 43.92 ms │      no change │
│ QQuery 20 │        35.07 / 35.99 ±0.59 / 36.83 ms │    35.50 / 35.89 ±0.53 / 36.91 ms │      no change │
│ QQuery 21 │        17.19 / 18.10 ±1.25 / 20.53 ms │    13.39 / 14.46 ±0.88 / 15.63 ms │  +1.25x faster │
│ QQuery 22 │        62.35 / 63.60 ±0.87 / 64.63 ms │    63.56 / 64.33 ±0.53 / 64.92 ms │      no change │
│ QQuery 23 │     340.36 / 344.99 ±2.58 / 347.39 ms │ 273.65 / 274.97 ±1.06 / 276.34 ms │  +1.25x faster │
│ QQuery 24 │     223.44 / 226.26 ±3.85 / 233.64 ms │ 163.01 / 165.39 ±2.23 / 168.66 ms │  +1.37x faster │
│ QQuery 25 │     109.09 / 110.65 ±1.52 / 113.23 ms │    96.47 / 97.34 ±0.74 / 98.50 ms │  +1.14x faster │
│ QQuery 26 │        57.29 / 59.59 ±3.07 / 65.61 ms │    53.97 / 54.36 ±0.28 / 54.69 ms │  +1.10x faster │
│ QQuery 27 │           6.22 / 6.36 ±0.15 / 6.63 ms │       6.01 / 6.14 ±0.15 / 6.44 ms │      no change │
│ QQuery 28 │        60.51 / 61.30 ±0.44 / 61.81 ms │    61.99 / 62.27 ±0.24 / 62.66 ms │      no change │
│ QQuery 29 │       96.16 / 97.47 ±1.56 / 100.51 ms │    71.55 / 71.89 ±0.21 / 72.16 ms │  +1.36x faster │
│ QQuery 30 │        32.14 / 34.96 ±3.25 / 40.97 ms │    32.38 / 33.71 ±1.34 / 35.98 ms │      no change │
│ QQuery 31 │     110.10 / 110.54 ±0.60 / 111.71 ms │ 111.22 / 112.14 ±1.47 / 115.06 ms │      no change │
│ QQuery 32 │        19.87 / 20.28 ±0.26 / 20.62 ms │    20.46 / 20.67 ±0.20 / 20.92 ms │      no change │
│ QQuery 33 │        37.83 / 38.76 ±1.59 / 41.91 ms │    38.25 / 38.74 ±0.32 / 39.22 ms │      no change │
│ QQuery 34 │         9.95 / 10.94 ±0.92 / 12.40 ms │       6.16 / 6.96 ±1.39 / 9.73 ms │  +1.57x faster │
│ QQuery 35 │        72.22 / 73.19 ±1.20 / 75.44 ms │    66.48 / 67.11 ±0.86 / 68.72 ms │  +1.09x faster │
│ QQuery 36 │           5.82 / 5.95 ±0.15 / 6.22 ms │       6.58 / 6.71 ±0.18 / 7.07 ms │   1.13x slower │
│ QQuery 37 │           6.76 / 6.91 ±0.14 / 7.14 ms │       6.71 / 6.84 ±0.11 / 6.97 ms │      no change │
│ QQuery 38 │        61.10 / 61.77 ±0.45 / 62.52 ms │    62.21 / 63.81 ±1.71 / 66.94 ms │      no change │
│ QQuery 39 │        90.11 / 92.53 ±2.69 / 96.75 ms │    78.83 / 80.18 ±1.60 / 83.28 ms │  +1.15x faster │
│ QQuery 40 │        22.97 / 23.57 ±0.47 / 24.16 ms │    20.15 / 20.54 ±0.21 / 20.74 ms │  +1.15x faster │
│ QQuery 41 │        11.24 / 11.46 ±0.22 / 11.87 ms │    11.45 / 11.54 ±0.09 / 11.68 ms │      no change │
│ QQuery 42 │        23.56 / 24.15 ±0.55 / 25.18 ms │    25.93 / 26.27 ±0.27 / 26.62 ms │   1.09x slower │
│ QQuery 43 │           5.30 / 5.51 ±0.18 / 5.83 ms │       5.19 / 5.31 ±0.16 / 5.62 ms │      no change │
│ QQuery 44 │           9.66 / 9.78 ±0.10 / 9.94 ms │     9.69 / 10.45 ±1.47 / 13.39 ms │   1.07x slower │
│ QQuery 45 │        37.65 / 38.25 ±0.48 / 38.78 ms │    23.23 / 23.74 ±0.48 / 24.65 ms │  +1.61x faster │
│ QQuery 46 │        11.76 / 12.00 ±0.27 / 12.40 ms │       6.96 / 7.25 ±0.20 / 7.58 ms │  +1.66x faster │
│ QQuery 47 │     225.49 / 229.54 ±3.18 / 234.92 ms │ 227.36 / 230.47 ±2.35 / 234.16 ms │      no change │
│ QQuery 48 │        94.98 / 96.13 ±0.61 / 96.73 ms │    97.31 / 98.00 ±0.80 / 99.38 ms │      no change │
│ QQuery 49 │        76.29 / 77.02 ±0.53 / 77.77 ms │    72.25 / 73.29 ±0.72 / 74.43 ms │      no change │
│ QQuery 50 │        59.06 / 60.09 ±0.77 / 61.24 ms │    52.41 / 52.76 ±0.44 / 53.60 ms │  +1.14x faster │
│ QQuery 51 │        92.26 / 93.88 ±1.15 / 95.64 ms │    92.83 / 95.20 ±2.18 / 99.19 ms │      no change │
│ QQuery 52 │        23.80 / 24.20 ±0.24 / 24.44 ms │    26.70 / 27.20 ±0.38 / 27.65 ms │   1.12x slower │
│ QQuery 53 │        28.76 / 28.93 ±0.13 / 29.14 ms │    30.01 / 30.12 ±0.09 / 30.21 ms │      no change │
│ QQuery 54 │        54.23 / 56.83 ±2.94 / 62.17 ms │    25.36 / 25.55 ±0.20 / 25.91 ms │  +2.22x faster │
│ QQuery 55 │        23.21 / 23.51 ±0.25 / 23.78 ms │    25.78 / 26.12 ±0.19 / 26.32 ms │   1.11x slower │
│ QQuery 56 │        38.75 / 39.20 ±0.51 / 40.09 ms │    44.70 / 45.22 ±0.68 / 46.53 ms │   1.15x slower │
│ QQuery 57 │     176.62 / 177.22 ±0.45 / 177.96 ms │ 176.96 / 179.03 ±1.72 / 182.09 ms │      no change │
│ QQuery 58 │     113.24 / 113.90 ±0.51 / 114.53 ms │    51.34 / 52.21 ±0.70 / 53.36 ms │  +2.18x faster │
│ QQuery 59 │     118.21 / 118.93 ±0.57 / 119.94 ms │ 118.98 / 120.20 ±1.30 / 122.63 ms │      no change │
│ QQuery 60 │        39.48 / 39.74 ±0.19 / 39.91 ms │    42.40 / 43.33 ±0.65 / 44.37 ms │   1.09x slower │
│ QQuery 61 │        12.22 / 12.38 ±0.26 / 12.89 ms │    10.44 / 10.62 ±0.21 / 11.02 ms │  +1.17x faster │
│ QQuery 62 │        46.29 / 47.45 ±1.86 / 51.15 ms │    30.97 / 31.14 ±0.13 / 31.31 ms │  +1.52x faster │
│ QQuery 63 │        29.41 / 29.86 ±0.66 / 31.13 ms │    29.75 / 29.98 ±0.15 / 30.18 ms │      no change │
│ QQuery 64 │     407.07 / 413.11 ±5.80 / 423.24 ms │ 230.10 / 235.97 ±6.08 / 247.61 ms │  +1.75x faster │
│ QQuery 65 │     121.66 / 124.45 ±2.58 / 129.06 ms │ 124.79 / 126.37 ±1.22 / 127.69 ms │      no change │
│ QQuery 66 │        80.83 / 83.26 ±2.78 / 88.37 ms │    66.62 / 67.47 ±0.81 / 68.98 ms │  +1.23x faster │
│ QQuery 67 │     237.90 / 246.40 ±6.20 / 255.96 ms │ 243.44 / 248.53 ±3.89 / 253.17 ms │      no change │
│ QQuery 68 │        11.83 / 12.15 ±0.21 / 12.49 ms │       7.72 / 7.94 ±0.21 / 8.29 ms │  +1.53x faster │
│ QQuery 69 │        56.99 / 57.13 ±0.15 / 57.39 ms │    62.66 / 65.74 ±4.52 / 74.73 ms │   1.15x slower │
│ QQuery 70 │     105.94 / 111.03 ±4.88 / 120.02 ms │    77.95 / 78.63 ±0.53 / 79.38 ms │  +1.41x faster │
│ QQuery 71 │        34.71 / 35.23 ±0.47 / 35.98 ms │    35.53 / 35.77 ±0.36 / 36.48 ms │      no change │
│ QQuery 72 │ 2044.71 / 2096.50 ±30.05 / 2133.50 ms │    77.57 / 79.34 ±2.90 / 85.09 ms │ +26.43x faster │
│ QQuery 73 │        10.04 / 11.02 ±1.43 / 13.78 ms │       6.16 / 6.29 ±0.16 / 6.61 ms │  +1.75x faster │
│ QQuery 74 │     169.11 / 171.85 ±2.78 / 176.65 ms │ 174.92 / 177.79 ±2.92 / 183.33 ms │      no change │
│ QQuery 75 │     147.23 / 151.48 ±7.01 / 165.48 ms │ 109.26 / 111.15 ±1.19 / 112.72 ms │  +1.36x faster │
│ QQuery 76 │        35.02 / 35.41 ±0.26 / 35.74 ms │    35.19 / 35.66 ±0.31 / 36.01 ms │      no change │
│ QQuery 77 │        60.93 / 64.47 ±4.45 / 72.97 ms │    62.35 / 64.56 ±2.61 / 69.13 ms │      no change │
│ QQuery 78 │     195.32 / 200.56 ±5.08 / 209.43 ms │ 217.17 / 223.16 ±5.18 / 230.42 ms │   1.11x slower │
│ QQuery 79 │        66.42 / 66.83 ±0.43 / 67.62 ms │    69.94 / 70.30 ±0.35 / 70.85 ms │   1.05x slower │
│ QQuery 80 │       98.96 / 99.82 ±1.09 / 101.96 ms │    77.01 / 77.56 ±0.65 / 78.78 ms │  +1.29x faster │
│ QQuery 81 │        26.58 / 30.13 ±6.03 / 42.17 ms │    26.07 / 29.08 ±3.76 / 36.02 ms │      no change │
│ QQuery 82 │        16.54 / 17.09 ±0.35 / 17.55 ms │    18.20 / 18.82 ±0.66 / 20.00 ms │   1.10x slower │
│ QQuery 83 │        40.16 / 40.52 ±0.25 / 40.88 ms │    23.27 / 23.45 ±0.13 / 23.60 ms │  +1.73x faster │
│ QQuery 84 │        29.66 / 29.86 ±0.19 / 30.19 ms │    38.55 / 39.36 ±1.19 / 41.73 ms │   1.32x slower │
│ QQuery 85 │     106.58 / 110.34 ±5.97 / 122.23 ms │   98.37 / 99.89 ±1.21 / 101.45 ms │  +1.10x faster │
│ QQuery 86 │        25.71 / 26.33 ±0.46 / 27.05 ms │    24.88 / 25.29 ±0.40 / 25.99 ms │      no change │
│ QQuery 87 │        61.81 / 63.30 ±1.12 / 65.28 ms │    61.36 / 62.25 ±0.69 / 63.47 ms │      no change │
│ QQuery 88 │        63.41 / 63.96 ±0.56 / 64.78 ms │    59.11 / 59.86 ±0.46 / 60.42 ms │  +1.07x faster │
│ QQuery 89 │        35.65 / 37.10 ±1.85 / 40.74 ms │    32.41 / 32.63 ±0.17 / 32.92 ms │  +1.14x faster │
│ QQuery 90 │        17.24 / 17.30 ±0.07 / 17.43 ms │    14.74 / 15.50 ±1.04 / 17.53 ms │  +1.12x faster │
│ QQuery 91 │        45.70 / 46.36 ±0.40 / 46.71 ms │    41.80 / 42.44 ±0.60 / 43.50 ms │  +1.09x faster │
│ QQuery 92 │        29.57 / 30.00 ±0.39 / 30.70 ms │    29.00 / 29.78 ±0.71 / 31.04 ms │      no change │
│ QQuery 93 │        49.96 / 51.11 ±0.94 / 52.64 ms │    50.22 / 50.91 ±0.50 / 51.64 ms │      no change │
│ QQuery 94 │        37.93 / 38.62 ±0.72 / 39.95 ms │    37.85 / 38.60 ±0.45 / 39.13 ms │      no change │
│ QQuery 95 │        79.88 / 82.75 ±2.97 / 88.38 ms │    80.88 / 82.63 ±1.95 / 86.38 ms │      no change │
│ QQuery 96 │        23.90 / 24.20 ±0.16 / 24.37 ms │    20.53 / 20.90 ±0.40 / 21.60 ms │  +1.16x faster │
│ QQuery 97 │        46.75 / 47.37 ±0.72 / 48.72 ms │    53.18 / 54.27 ±0.76 / 55.05 ms │   1.15x slower │
│ QQuery 98 │        42.27 / 43.32 ±0.61 / 44.00 ms │    42.51 / 43.63 ±0.66 / 44.31 ms │      no change │
│ QQuery 99 │        70.47 / 71.70 ±1.29 / 74.14 ms │    45.71 / 46.63 ±1.18 / 48.90 ms │  +1.54x faster │
└───────────┴───────────────────────────────────────┴───────────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 9881.24ms │
│ Total Time (perf_join-order-enumeration)   │ 7045.39ms │
│ Average Time (HEAD)                        │   99.81ms │
│ Average Time (perf_join-order-enumeration) │   71.17ms │
│ Queries Faster                             │        41 │
│ Queries Slower                             │        14 │
│ Queries with No Change                     │        44 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 50.0s
Peak memory 2.1 GiB
Avg memory 1.4 GiB
CPU user 219.5s
CPU sys 5.8s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 40.0s
Peak memory 2.4 GiB
Avg memory 1.4 GiB
CPU user 99.2s
CPU sys 4.8s
Peak spill 0 B

File an issue against this benchmark runner

Dandandan added a commit to Dandandan/arrow-datafusion that referenced this pull request Aug 22, 2026
## Which issue does this PR close?

None; split out of apache#24456 so the default change can be reviewed on its
own.

## Rationale for this change

We can increase the default value as generally a larger value performs
better (avoiding a repartioning)

## What changes are included in this PR?

- `hash_join_single_partition_threshold` defaults to 4MB instead of 1MB,
and the
  generated `configs.md` row follows.
- The two sqllogictest files that print or restore the value are
updated.
- The `join_selection` tests build their inputs from the threshold but
asserted the byte
sizes the 1MB default happened to produce (`8192` / `2097152`). They now
derive those
expectations from the configured threshold, so the assertions stay
correct wherever the
  default sits.

```
TPC-H 10

│ Total Time (HEAD)                                            │ 6500.41ms │
│ Total Time (perf_hash-join-single-partition-threshold-4mb)   │ 6262.84ms │


TPC-DS
│ Total Time (HEAD)                                            │ 9919.35ms │
│ Total Time (perf_hash-join-single-partition-threshold-4mb)   │ 9572.04ms │
```

## Are these changes tested?

Yes, by existing coverage: the full sqllogictest suite (504 files)
passes, as do the
`datafusion`, `datafusion-common` and `datafusion-physical-optimizer`
unit and
integration tests. No new test is added -- the change is a default, and
the tests that
pin plan shapes around it already exist.

## Are there any user-facing changes?

Yes: a changed default, so a query whose build side is between 1MB and
4MB now plans as
`CollectLeft` where it previously repartitioned. `configs.md` documents
the new value,
and anyone relying on the old behaviour can set the option back to
`1048576`.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@lonless9

Copy link
Copy Markdown
Contributor

Hello folks, it's great to see the community getting involved in work related to join order. We at LakeSail have implemented a round-trip join reorder optimizer based on the DPHyp algorithm. https://github.com/lakehq/sail/tree/v0.7.1/crates/sail-physical-optimizer/src/join_reorder As @alamb mentioned, it would be fantastic if the upstream could expose the full set of relevant traits and abstractions. We are happy to participate in discussions and get involved from a downstream perspective.

@alamb

alamb commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

be fantastic if the upstream could expose the full set of relevant traits and abstractions. We are happy to participate in discussions and get involved from a downstream perspective.

Thank you 🙏

I am out at VLDB next week but then I hope to help try and get the Join traits / machinery sorted out. DataFusion has needed it for a long time

@alamb

alamb commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

I just wanted to say the more I talk to people at VLDB the more excited I am about this PR -- I think it will finally unlock more sophisticated join ordering

I am doing research on JoinGraph apis, etc -- and I expect to work on this next week

@2010YOUY01

Copy link
Copy Markdown
Contributor

I just wanted to say the more I talk to people at VLDB the more excited I am about this PR -- I think it will finally unlock more sophisticated join ordering

Fanscinating! 🚀 I'm curious what the final implementation/algorithm looks like in your mind. Any reading recommendations?

@alamb

alamb commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

I just wanted to say the more I talk to people at VLDB the more excited I am about this PR -- I think it will finally unlock more sophisticated join ordering

Fanscinating! 🚀 I'm curious what the final implementation/algorithm looks like in your mind. Any reading recommendations?

What I am most excited about is the APIs for:

  1. ExecutionPlan (tree) --> JoinGraph
  2. JoinGraph --> ExecutionPlan(tree)
  3. Costing a partial covering set / in progress JoinTree / walk of the JoinGraph

I think with those primitives, we could implement pretty much any join order algorithm we want (and could allow others to plug their own in)

My informal conversations suggested that there is no existing writeup on API best practices, but all optimizers have some version of these APIs.

@alamb

alamb commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Any reading recommendations?

I asked around and no one seemed to know of any good writeups on the API design (I asked Thomas Neumann, Goetz Graefe, and Peter Boncz, among others, and they did not know of any)

@Dandandan

Copy link
Copy Markdown
Contributor Author

Amazing! Btw I am on vacation so I am responding more slowly / less these days.

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

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants