Skip to content

feat: cost-based join order enumeration - #24456

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

feat: cost-based join order enumeration#24456
Dandandan wants to merge 18 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 (DPsub-like).
  • Defaulting to 4MB broadcast

`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 [  63.480s] (current)
     Parsing datafusion v55.0.0 (current)
      Parsed [   0.038s] (current)
    Building datafusion v55.0.0 (baseline)
       Built [  61.558s] (baseline)
     Parsing datafusion v55.0.0 (baseline)
      Parsed [   0.039s] (baseline)
    Checking datafusion v55.0.0 -> v55.0.0 (no change; assume patch)
     Checked [   0.916s] 223 checks: 223 pass, 31 skip
     Summary no semver update required
    Finished [ 128.010s] datafusion
    Building datafusion-common v55.0.0 (current)
       Built [  35.356s] (current)
     Parsing datafusion-common v55.0.0 (current)
      Parsed [   0.065s] (current)
    Building datafusion-common v55.0.0 (baseline)
       Built [  35.431s] (baseline)
     Parsing datafusion-common v55.0.0 (baseline)
      Parsed [   0.068s] (baseline)
    Checking datafusion-common v55.0.0 -> v55.0.0 (no change; assume patch)
     Checked [   1.046s] 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:1464
  field OptimizerOptions.join_enumeration_min_improvement in /home/runner/work/datafusion/datafusion/datafusion/common/src/config.rs:1464
  field OptimizerOptions.join_enumeration_limit in /home/runner/work/datafusion/datafusion/datafusion/common/src/config.rs:1464

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  73.622s] datafusion-common
    Building datafusion-physical-optimizer v55.0.0 (current)
       Built [  42.176s] (current)
     Parsing datafusion-physical-optimizer v55.0.0 (current)
      Parsed [   0.030s] (current)
    Building datafusion-physical-optimizer v55.0.0 (baseline)
       Built [  42.376s] (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.154s] 223 checks: 223 pass, 31 skip
     Summary no semver update required
    Finished [  86.102s] datafusion-physical-optimizer
    Building datafusion-physical-plan v55.0.0 (current)
       Built [  39.583s] (current)
     Parsing datafusion-physical-plan v55.0.0 (current)
      Parsed [   0.160s] (current)
    Building datafusion-physical-plan v55.0.0 (baseline)
       Built [  39.606s] (baseline)
     Parsing datafusion-physical-plan v55.0.0 (baseline)
      Parsed [   0.162s] (baseline)
    Checking datafusion-physical-plan v55.0.0 -> v55.0.0 (no change; assume patch)
     Checked [   1.033s] 223 checks: 223 pass, 31 skip
     Summary no semver update required
    Finished [  82.300s] datafusion-physical-plan
    Building datafusion-sqllogictest v55.0.0 (current)
       Built [ 104.724s] (current)
     Parsing datafusion-sqllogictest v55.0.0 (current)
      Parsed [   0.023s] (current)
    Building datafusion-sqllogictest v55.0.0 (baseline)
       Built [ 104.512s] (baseline)
     Parsing datafusion-sqllogictest v55.0.0 (baseline)
      Parsed [   0.025s] (baseline)
    Checking datafusion-sqllogictest v55.0.0 -> v55.0.0 (no change; assume patch)
     Checked [   0.124s] 223 checks: 223 pass, 31 skip
     Summary no semver update required
    Finished [ 212.319s] 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>
@Dandandan

This comment was marked as outdated.

@Dandandan

This comment was marked as outdated.

@adriangbot

This comment was marked as outdated.

@adriangbot

This comment was marked as outdated.

@adriangbot

This comment was marked as outdated.

@adriangbot

This comment was marked as outdated.

@adriangbot

This comment was marked as outdated.

@adriangbot

This comment was marked as outdated.

@adriangbot

This comment was marked as outdated.

@adriangbot

This comment was marked as outdated.

A sort merge join has no mode that collects one side, but the model offered
one and priced it as a free broadcast, so under `prefer_hash_join = false`
the search chose orders it could not carry out. TPC-H q5 lost 31% at SF10
that way. It now broadcasts only for hash joins.

A keyless join compares every pair, which the output cardinality the rest of
the cost is built from does not say, so a disjunctive filter estimated to
keep few rows looked cheap. TPC-DS q85 turned an equijoin into a nested loop
join and ran 122x slower. Keyless joins are now charged for the pairs.

With sort merge joins: TPC-H SF10 0.85x, SF1 0.91x, TPC-DS SF1 0.46x.
The hash path is unchanged: TPC-H SF10 0.88x, TPC-DS SF1 0.64x.

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

Copy link
Copy Markdown
Contributor Author

run benchmarks run tpch tpcds tpch10

env:
    PREFER_HASH_JOIN: false

@adriangbot

Copy link
Copy Markdown

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

Benchmarks requested: run

Kubernetes message
Job has reached the specified backoff limit

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-c5347556113-1775-g25vr 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 (cf466ca) to bb038a6 (merge-base) diff

Run configuration
run benchmark tpch10
env:
  PREFER_HASH_JOIN: "false"

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-c5347556113-1774-lgv6w 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 (cf466ca) to bb038a6 (merge-base) diff

Run configuration
run benchmark tpcds
env:
  PREFER_HASH_JOIN: "false"

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-c5347556113-1773-vq9sf 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 (cf466ca) to bb038a6 (merge-base) diff

Run configuration
run benchmark tpch
env:
  PREFER_HASH_JOIN: "false"

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 (cf466ca) to bb038a6 (merge-base) diff

Run configuration
run benchmark tpch
env:
  PREFER_HASH_JOIN: "false"
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.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 │
└────────────────────────────────────────────┴──────────┘

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.38 / 39.34 ±1.05 / 41.35 ms │ 38.77 / 40.99 ±1.40 / 42.15 ms │     no change │
│ QQuery 2  │ 19.12 / 19.41 ±0.28 / 19.88 ms │ 16.41 / 16.80 ±0.26 / 17.23 ms │ +1.16x faster │
│ QQuery 3  │ 32.54 / 33.11 ±0.35 / 33.48 ms │ 28.09 / 28.36 ±0.23 / 28.74 ms │ +1.17x faster │
│ QQuery 4  │ 17.57 / 18.43 ±0.61 / 18.97 ms │ 17.22 / 17.36 ±0.09 / 17.49 ms │ +1.06x faster │
│ QQuery 5  │ 37.07 / 39.39 ±1.21 / 40.45 ms │ 31.32 / 31.70 ±0.22 / 31.98 ms │ +1.24x faster │
│ QQuery 6  │ 15.92 / 16.07 ±0.11 / 16.18 ms │ 15.94 / 16.07 ±0.10 / 16.24 ms │     no change │
│ QQuery 7  │ 44.44 / 45.48 ±0.73 / 46.45 ms │ 33.24 / 34.22 ±1.42 / 37.04 ms │ +1.33x faster │
│ QQuery 8  │ 42.01 / 43.07 ±1.56 / 46.16 ms │ 46.16 / 47.79 ±1.61 / 49.92 ms │  1.11x slower │
│ QQuery 9  │ 49.29 / 50.65 ±1.29 / 52.52 ms │ 48.02 / 49.06 ±0.95 / 50.62 ms │     no change │
│ QQuery 10 │ 41.97 / 42.33 ±0.34 / 42.85 ms │ 41.79 / 43.56 ±1.74 / 46.54 ms │     no change │
│ QQuery 11 │ 13.16 / 13.65 ±0.44 / 14.42 ms │ 13.25 / 13.47 ±0.22 / 13.87 ms │     no change │
│ QQuery 12 │ 23.89 / 24.23 ±0.17 / 24.37 ms │ 23.09 / 23.58 ±0.89 / 25.37 ms │     no change │
│ QQuery 13 │ 32.27 / 35.46 ±3.14 / 41.15 ms │ 31.72 / 32.53 ±0.83 / 34.04 ms │ +1.09x faster │
│ QQuery 14 │ 23.25 / 23.39 ±0.10 / 23.56 ms │ 23.80 / 24.41 ±0.60 / 25.50 ms │     no change │
│ QQuery 15 │ 30.78 / 32.03 ±0.81 / 32.73 ms │ 30.48 / 31.04 ±0.39 / 31.43 ms │     no change │
│ QQuery 16 │ 14.58 / 14.95 ±0.22 / 15.23 ms │ 13.61 / 13.83 ±0.18 / 14.08 ms │ +1.08x faster │
│ QQuery 17 │ 78.66 / 79.65 ±0.66 / 80.49 ms │ 69.50 / 69.95 ±0.39 / 70.45 ms │ +1.14x faster │
│ QQuery 18 │ 63.95 / 66.38 ±2.38 / 70.62 ms │ 58.42 / 59.11 ±0.46 / 59.75 ms │ +1.12x faster │
│ QQuery 19 │ 34.42 / 35.20 ±1.18 / 37.55 ms │ 34.08 / 34.53 ±0.82 / 36.16 ms │     no change │
│ QQuery 20 │ 32.00 / 33.52 ±1.06 / 34.85 ms │ 30.81 / 31.29 ±0.32 / 31.79 ms │ +1.07x faster │
│ QQuery 21 │ 54.36 / 56.58 ±2.08 / 60.46 ms │ 52.83 / 54.58 ±1.05 / 55.70 ms │     no change │
│ QQuery 22 │ 13.55 / 13.88 ±0.43 / 14.67 ms │ 13.45 / 13.73 ±0.20 / 14.04 ms │     no change │
└───────────┴────────────────────────────────┴────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━┓
┃ Benchmark Summary                          ┃          ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 776.19ms │
│ Total Time (perf_join-order-enumeration)   │ 727.95ms │
│ Average Time (HEAD)                        │  35.28ms │
│ Average Time (perf_join-order-enumeration) │  33.09ms │
│ Queries Faster                             │       10 │
│ Queries Slower                             │        1 │
│ Queries with No Change                     │       11 │
│ Queries with Failure                       │        0 │
└────────────────────────────────────────────┴──────────┘

Resource Usage

tpch — base (merge-base)

Metric Value
Wall time 5.0s
Peak memory 1.3 GiB
Avg memory 529.7 MiB
CPU user 22.4s
CPU sys 1.6s
Peak spill 0 B

tpch — branch

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

File an issue against this benchmark runner

Resolves one conflict in physical-optimizer/src/join_selection.rs, where
upstream's null-aware RightAnti support (apache#23957) added `can_swap_hash_join`
at the same spot this branch added `keep_partitioning_needed_above` and its
helpers. Both are kept; the four `can_swap_hash_join` call sites merged
cleanly.

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

Copy link
Copy Markdown

🤖 Benchmark completed (GKE) | trigger

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

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

Run configuration
run benchmark tpch10
env:
  PREFER_HASH_JOIN: "false"
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.82 ms │                   309.87 ms │     no change │
│ QQuery 2  │ 106.70 ms │                    70.76 ms │ +1.51x faster │
│ QQuery 3  │ 226.81 ms │                   213.13 ms │ +1.06x faster │
│ QQuery 4  │ 111.79 ms │                   111.54 ms │     no change │
│ QQuery 5  │ 345.49 ms │                   278.30 ms │ +1.24x faster │
│ QQuery 6  │ 120.99 ms │                   121.77 ms │     no change │
│ QQuery 7  │ 465.23 ms │                   248.17 ms │ +1.87x faster │
│ QQuery 8  │ 373.08 ms │                   415.48 ms │  1.11x slower │
│ QQuery 9  │ 549.18 ms │                   498.53 ms │ +1.10x faster │
│ QQuery 10 │ 300.63 ms │                   294.74 ms │     no change │
│ QQuery 11 │  91.12 ms │                    57.61 ms │ +1.58x faster │
│ QQuery 12 │ 186.47 ms │                   164.04 ms │ +1.14x faster │
│ QQuery 13 │ 335.20 ms │                   294.03 ms │ +1.14x faster │
│ QQuery 14 │ 179.73 ms │                   168.62 ms │ +1.07x faster │
│ QQuery 15 │ 322.36 ms │                   296.37 ms │ +1.09x faster │
│ QQuery 16 │  68.18 ms │                    57.38 ms │ +1.19x faster │
│ QQuery 17 │ 618.86 ms │                   555.75 ms │ +1.11x faster │
│ QQuery 18 │ 696.22 ms │                   675.32 ms │     no change │
│ QQuery 19 │ 240.10 ms │                   251.48 ms │     no change │
│ QQuery 20 │ 296.06 ms │                   251.17 ms │ +1.18x faster │
│ QQuery 21 │ 655.25 ms │                   601.07 ms │ +1.09x faster │
│ QQuery 22 │  60.69 ms │                    58.38 ms │     no change │
└───────────┴───────────┴─────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 6660.99ms │
│ Total Time (perf_join-order-enumeration)   │ 5993.50ms │
│ Average Time (HEAD)                        │  302.77ms │
│ Average Time (perf_join-order-enumeration) │  272.43ms │
│ Queries Faster                             │        14 │
│ Queries Slower                             │         1 │
│ Queries with No Change                     │         7 │
│ 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.82 / 314.31 ±5.02 / 323.99 ms │  309.87 / 310.37 ±0.48 / 311.10 ms │     no change │
│ QQuery 2  │  106.70 / 108.39 ±1.88 / 111.96 ms │     70.76 / 71.29 ±0.42 / 71.76 ms │ +1.52x faster │
│ QQuery 3  │  226.81 / 231.13 ±3.57 / 236.68 ms │  213.13 / 217.37 ±2.65 / 220.48 ms │ +1.06x faster │
│ QQuery 4  │  111.79 / 114.05 ±1.32 / 115.47 ms │  111.54 / 112.00 ±0.38 / 112.46 ms │     no change │
│ QQuery 5  │  345.49 / 355.08 ±6.32 / 361.97 ms │  278.30 / 285.07 ±7.36 / 295.00 ms │ +1.25x faster │
│ QQuery 6  │  120.99 / 122.70 ±3.05 / 128.79 ms │  121.77 / 123.12 ±2.11 / 127.30 ms │     no change │
│ QQuery 7  │  465.23 / 470.55 ±4.97 / 478.94 ms │  248.17 / 250.18 ±2.37 / 254.64 ms │ +1.88x faster │
│ QQuery 8  │  373.08 / 381.93 ±7.73 / 391.60 ms │ 415.48 / 438.82 ±17.61 / 459.97 ms │  1.15x slower │
│ QQuery 9  │  549.18 / 561.13 ±6.53 / 568.55 ms │ 498.53 / 517.19 ±12.32 / 537.38 ms │ +1.08x faster │
│ QQuery 10 │ 300.63 / 316.92 ±16.63 / 345.46 ms │  294.74 / 306.21 ±9.08 / 315.81 ms │     no change │
│ QQuery 11 │   91.12 / 100.32 ±8.71 / 114.07 ms │     57.61 / 61.50 ±6.11 / 73.67 ms │ +1.63x faster │
│ QQuery 12 │  186.47 / 190.12 ±2.20 / 193.15 ms │  164.04 / 168.54 ±4.25 / 175.78 ms │ +1.13x faster │
│ QQuery 13 │  335.20 / 343.58 ±9.19 / 361.05 ms │ 294.03 / 308.47 ±10.44 / 323.39 ms │ +1.11x faster │
│ QQuery 14 │  179.73 / 184.75 ±5.54 / 195.44 ms │  168.62 / 173.92 ±4.21 / 180.92 ms │ +1.06x faster │
│ QQuery 15 │  322.36 / 329.31 ±5.42 / 337.62 ms │  296.37 / 297.34 ±0.90 / 298.91 ms │ +1.11x faster │
│ QQuery 16 │     68.18 / 70.71 ±2.09 / 74.06 ms │     57.38 / 63.11 ±9.17 / 81.37 ms │ +1.12x faster │
│ QQuery 17 │ 618.86 / 649.19 ±36.11 / 715.32 ms │  555.75 / 561.58 ±6.89 / 575.04 ms │ +1.16x faster │
│ QQuery 18 │ 696.22 / 725.41 ±24.81 / 755.94 ms │ 675.32 / 761.49 ±80.19 / 880.53 ms │     no change │
│ QQuery 19 │ 240.10 / 263.10 ±26.20 / 311.85 ms │ 251.48 / 274.98 ±17.74 / 304.04 ms │     no change │
│ QQuery 20 │ 296.06 / 309.78 ±15.37 / 328.98 ms │ 251.17 / 269.28 ±13.03 / 285.65 ms │ +1.15x faster │
│ QQuery 21 │ 655.25 / 680.09 ±28.51 / 729.76 ms │ 601.07 / 619.32 ±18.61 / 654.43 ms │ +1.10x faster │
│ QQuery 22 │     60.69 / 61.85 ±0.98 / 63.45 ms │     58.38 / 60.89 ±1.62 / 62.90 ms │     no change │
└───────────┴────────────────────────────────────┴────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                          ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                          │ 6884.39ms │
│ Total Time (perf_join-order-enumeration)   │ 6252.04ms │
│ Average Time (HEAD)                        │  312.93ms │
│ Average Time (perf_join-order-enumeration) │  284.18ms │
│ Queries Faster                             │        14 │
│ Queries Slower                             │         1 │
│ Queries with No Change                     │         7 │
│ Queries with Failure                       │         0 │
└────────────────────────────────────────────┴───────────┘

Resource Usage

tpch10 — base (merge-base)

Metric Value
Wall time 35.0s
Peak memory 4.7 GiB
Avg memory 1.5 GiB
CPU user 345.5s
CPU sys 19.1s
Peak spill 0 B

tpch10 — branch

Metric Value
Wall time 35.0s
Peak memory 5.3 GiB
Avg memory 1.6 GiB
CPU user 308.4s
CPU sys 16.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 (cf466ca) to bb038a6 (merge-base) diff

Run configuration
run benchmark tpcds
env:
  PREFER_HASH_JOIN: "false"
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  │   24.12 ms │                    24.01 ms │      no change │
│ QQuery 2  │   80.07 ms │                    79.49 ms │      no change │
│ QQuery 3  │   50.83 ms │                    44.50 ms │  +1.14x faster │
│ QQuery 4  │  795.61 ms │                   595.34 ms │  +1.34x faster │
│ QQuery 5  │  106.32 ms │                   104.49 ms │      no change │
│ QQuery 6  │   70.36 ms │                    70.26 ms │      no change │
│ QQuery 7  │  123.23 ms │                   122.34 ms │      no change │
│ QQuery 8  │   66.32 ms │                    66.40 ms │      no change │
│ QQuery 9  │   53.04 ms │                    51.40 ms │      no change │
│ QQuery 10 │  135.50 ms │                   136.36 ms │      no change │
│ QQuery 11 │  421.61 ms │                   295.34 ms │  +1.43x faster │
│ QQuery 12 │   33.11 ms │                    32.46 ms │      no change │
│ QQuery 13 │  124.61 ms │                   122.44 ms │      no change │
│ QQuery 14 │  831.76 ms │                   659.24 ms │  +1.26x faster │
│ QQuery 15 │   57.58 ms │                    40.81 ms │  +1.41x faster │
│ QQuery 16 │   78.32 ms │                    78.13 ms │      no change │
│ QQuery 17 │  169.83 ms │                   159.92 ms │  +1.06x faster │
│ QQuery 18 │  154.57 ms │                   173.37 ms │   1.12x slower │
│ QQuery 19 │   76.13 ms │                    75.16 ms │      no change │
│ QQuery 20 │   45.53 ms │                    45.62 ms │      no change │
│ QQuery 21 │  405.58 ms │                    81.08 ms │  +5.00x faster │
│ QQuery 22 │  100.46 ms │                    99.71 ms │      no change │
│ QQuery 23 │  557.52 ms │                   471.25 ms │  +1.18x faster │
│ QQuery 24 │  347.41 ms │                   399.63 ms │   1.15x slower │
│ QQuery 25 │  190.01 ms │                   155.95 ms │  +1.22x faster │
│ QQuery 26 │  103.21 ms │                   101.96 ms │      no change │
│ QQuery 27 │  124.22 ms │                   123.10 ms │      no change │
│ QQuery 28 │   57.39 ms │                    58.38 ms │      no change │
│ QQuery 29 │  168.64 ms │                   137.17 ms │  +1.23x faster │
│ QQuery 30 │   47.32 ms │                    46.24 ms │      no change │
│ QQuery 31 │  239.03 ms │                   237.84 ms │      no change │
│ QQuery 32 │   67.99 ms │                    67.77 ms │      no change │
│ QQuery 33 │   71.86 ms │                    69.62 ms │      no change │
│ QQuery 34 │   69.68 ms │                    69.52 ms │      no change │
│ QQuery 35 │  124.48 ms │                   124.57 ms │      no change │
│ QQuery 36 │   86.25 ms │                    86.46 ms │      no change │
│ QQuery 37 │   32.76 ms │                    32.69 ms │      no change │
│ QQuery 38 │   97.88 ms │                    97.56 ms │      no change │
│ QQuery 39 │ 1618.09 ms │                   340.25 ms │  +4.76x faster │
│ QQuery 40 │  106.21 ms │                    67.84 ms │  +1.57x faster │
│ QQuery 41 │   11.42 ms │                    11.37 ms │      no change │
│ QQuery 42 │   50.14 ms │                    50.37 ms │      no change │
│ QQuery 43 │   56.60 ms │                    56.61 ms │      no change │
│ QQuery 44 │   12.62 ms │                    12.35 ms │      no change │
│ QQuery 45 │   47.27 ms │                    37.14 ms │  +1.27x faster │
│ QQuery 46 │  119.98 ms │                   121.23 ms │      no change │
│ QQuery 47 │  361.95 ms │                   359.61 ms │      no change │
│ QQuery 48 │  123.95 ms │                   127.43 ms │      no change │
│ QQuery 49 │   80.65 ms │                    81.64 ms │      no change │
│ QQuery 50 │   89.76 ms │                    91.51 ms │      no change │
│ QQuery 51 │  122.13 ms │                   123.57 ms │      no change │
│ QQuery 52 │   49.65 ms │                    49.90 ms │      no change │
│ QQuery 53 │   54.25 ms │                    54.27 ms │      no change │
│ QQuery 54 │   97.44 ms │                    97.82 ms │      no change │
│ QQuery 55 │   47.45 ms │                    47.67 ms │      no change │
│ QQuery 56 │   72.81 ms │                    74.07 ms │      no change │
│ QQuery 57 │  223.86 ms │                   221.88 ms │      no change │
│ QQuery 58 │  188.14 ms │                   120.45 ms │  +1.56x faster │
│ QQuery 59 │  121.31 ms │                   121.15 ms │      no change │
│ QQuery 60 │   73.05 ms │                    72.07 ms │      no change │
│ QQuery 61 │  100.60 ms │                    93.60 ms │  +1.07x faster │
│ QQuery 62 │   66.79 ms │                    38.91 ms │  +1.72x faster │
│ QQuery 63 │   54.59 ms │                    54.46 ms │      no change │
│ QQuery 64 │  675.44 ms │                   695.86 ms │      no change │
│ QQuery 65 │  111.87 ms │                   112.04 ms │      no change │
│ QQuery 66 │  172.54 ms │                   109.92 ms │  +1.57x faster │
│ QQuery 67 │  135.52 ms │                   137.07 ms │      no change │
│ QQuery 68 │  126.81 ms │                   128.85 ms │      no change │
│ QQuery 69 │  129.87 ms │                   128.42 ms │      no change │
│ QQuery 70 │  204.78 ms │                   179.37 ms │  +1.14x faster │
│ QQuery 71 │   65.39 ms │                    66.80 ms │      no change │
│ QQuery 72 │ 6531.20 ms │                   188.92 ms │ +34.57x faster │
│ QQuery 73 │   69.59 ms │                    67.17 ms │      no change │
│ QQuery 74 │  280.14 ms │                   206.31 ms │  +1.36x faster │
│ QQuery 75 │  217.84 ms │                   206.70 ms │  +1.05x faster │
│ QQuery 76 │   38.84 ms │                    38.02 ms │      no change │
│ QQuery 77 │  104.80 ms │                   104.30 ms │      no change │
│ QQuery 78 │  301.98 ms │                   268.35 ms │  +1.13x faster │
│ QQuery 79 │  118.73 ms │                   115.14 ms │      no change │
│ QQuery 80 │  235.09 ms │                   221.53 ms │  +1.06x faster │
│ QQuery 81 │   45.06 ms │                    44.40 ms │      no change │
│ QQuery 82 │   45.25 ms │                    45.30 ms │      no change │
│ QQuery 83 │   54.95 ms │                    47.96 ms │  +1.15x faster │
│ QQuery 84 │   45.82 ms │                    44.44 ms │      no change │
│ QQuery 85 │  135.14 ms │                   127.61 ms │  +1.06x faster │
│ QQuery 86 │   26.88 ms │                    26.84 ms │      no change │
│ QQuery 87 │  100.34 ms │                    98.24 ms │      no change │
│ QQuery 88 │  166.58 ms │                   159.84 ms │      no change │
│ QQuery 89 │   61.18 ms │                    59.75 ms │      no change │
│ QQuery 90 │   27.06 ms │                    25.17 ms │  +1.07x faster │
│ QQuery 91 │   53.70 ms │                    48.49 ms │  +1.11x faster │
│ QQuery 92 │   49.11 ms │                    47.10 ms │      no change │
│ QQuery 93 │  222.60 ms │                   203.57 ms │  +1.09x faster │
│ QQuery 94 │   61.78 ms │                    59.15 ms │      no change │
│ QQuery 95 │  163.40 ms │                   159.54 ms │      no change │
│ QQuery 96 │   45.50 ms │                    45.31 ms │      no change │
│ QQuery 97 │   79.81 ms │                    78.23 ms │      no change │
│ QQuery 98 │   66.77 ms │                    64.15 ms │      no change │
│ QQuery 99 │  142.17 ms │                    66.32 ms │  +2.14x 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 │
└────────────────────────────────────────────┴────────────┘

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  │         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)                          │ 22271.01ms │
│ Total Time (perf_join-order-enumeration)   │ 12685.53ms │
│ Average Time (HEAD)                        │   224.96ms │
│ Average Time (perf_join-order-enumeration) │   128.14ms │
│ Queries Faster                             │         39 │
│ Queries Slower                             │          5 │
│ Queries with No Change                     │         55 │
│ Queries with Failure                       │          0 │
└────────────────────────────────────────────┴────────────┘

Resource Usage

tpcds — base (merge-base)

Metric Value
Wall time 115.0s
Peak memory 22.7 GiB
Avg memory 3.7 GiB
CPU user 622.5s
CPU sys 31.2s
Peak spill 0 B

tpcds — branch

Metric Value
Wall time 65.0s
Peak memory 2.3 GiB
Avg memory 1.5 GiB
CPU user 298.7s
CPU sys 11.1s
Peak spill 0 B

File an issue against this benchmark runner

Dandandan and others added 3 commits August 20, 2026 09:14
Most were longer than what they explain. Cut to one or two plain lines each,
dropped the benchmark anecdotes, and removed a stale doc line left on
`crossing_classes` from an earlier edit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A hash join carries its own projection, so the rebuilt tree derives one per
node from what that node's parents need. A sort merge join has none, so the
rule emitted every column at every node and projected once on top, leaving
each join to sort columns nothing above it reads. `ProjectionPushdown`
cannot repair it afterwards: it only pushes through a join whose columns
stay left-then-right, and reordering interleaves them.

Each rebuilt sort merge join now drops what nothing above needs. Reordering
alone is still left to the parent, which addresses columns by position, so
no projection is added where none narrows.

Measured against emitting every column, same run, alternating order:
TPC-DS SF1 0.98x over the 39 queries whose plans change, TPC-H SF10 0.97x.

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

@alamb alamb left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

First of all, thank you for doing this @Dandandan -- I think this is actually quite close to something we could merge in today

My core concern of any join ordering algorithm is that they are so complicated and often system specific (what is the cost of broadcast?) that if we were to put something clever in the core, we would end up in a constant battle where it didn't quite work for someone, so they tweaked it, and then it broke someone else's usecase (this happened to us at Vertica a lot)

However, I think we can address the concern in this PR by making the code in this PR extensible / reusable (suggestions below) -- Join Ordering is quite a beast (both theoretically and practically) and the chance that any particular join order implementation will work for many people I think is quite low.

I actually think the core dynamic programming implementation in this module is pretty small (most of the code is the mechanics of creating JoinGraphs and then reconstructing them after they are done, along with the cost model), which I think is a good sign.

Thus I suggest structuring this as a few pieces

  1. JoinGraph representation (already present)
  2. Code to convert to and from JoinGraph (aka Extractor and Rebuilder, already present)
  3. 2 traits (see below -- not yet present)
  4. Default implementation of those traits included in the core (would need a refactor of code that is present)
  5. APIs to override the default traits via SessionContext

I think that would address my core concern and make it much easier for people to build with DataFusion. The core crates would have the mechanics of reordering plan nodes, but not the system specific heuristics /models to do so

The traits would be 1) something that enumerates possible plans

  trait Enumerator {
      /// Search `graph` for a join tree, scored by `model`. `None` if this
      /// enumerator can't produce one (too large, doesn't apply, etc.).
      fn solve(&self, graph: &JoinGraph, model: &dyn JoinCostModel) -> Option<Solution>;
  }

And then the cost model https://github.com/apache/datafusion/pull/24456/changes#r3824265511. Something like

  trait JoinCostModel {
      /// Estimated rows from joining every relation in `mask`.
      fn cardinality(&self, mask: RelSet) -> f64;

      /// Whether `left` and `right` can be combined, and how (inner join, or one
      /// side applying as a reducer).
      fn combine(&self, left: RelSet, right: RelSet) -> Option<Combine>;

      /// Cost of joining `left` (partitioned as `left_part`) with `right`
      /// (`right_part`), for each way of exchanging their inputs.
      fn exchanges(
          &self,
          left: RelSet,
          right: RelSet,
          left_part: PartSet,
          right_part: PartSet,
          collect_only: Option<RelSet>,
      ) -> Vec<(f64, PartSet, RelSet, PartitionMode)>;
  }


/// A connected set of joins as relations plus the predicates between them.
#[derive(Debug)]
struct JoinGraph {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

we finally have a JoinGraph in DataFusion! (this will probably get crazy, so I recommend it put in its own module to start)

required: RelSet,
}

/// A connected set of joins as relations plus the predicates between them.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I think it might make sense to point out that this is an alternative representation of at a sub clause in a query -- basically a SELECT .... but with nodes representing tables and edges representing joins between them

It looks like this representation takes some sub tree of joins and then replaces the JoinExec (maybe?)

It wold help to describe with an example how an input ExecutionPlan goes into a JoinGraph

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Here is an example that Claude came up with

example four tables, B goes through GROUP BY before the join:


  HashJoin(a.x = b.x)
  ├── HashJoin(a.y = c.y)
  │   ├── Scan A
  │   └── Scan C
  └── HashJoin(b.z = d.z)
      ├── AggregateExec(group by: b.x, b.z; cnt = count(*))
      │   └── Scan B
      └── Scan D

And the join representation

 JoinGraph {
    kind: Hash,  reducers: {}  (none),  filters: []

                                edge: A.y = C.y
        ┌───────────┐  ─────────────────────────────  ┌───────────┐
        │  rel 0: A │                                  │  rel 1: C │
        │  (Scan A) │                                  │  (Scan C) │
        └─────┬─────┘                                  └───────────┘
              │
              │ edge: A.x = Agg(B).col0
              │
        ┌─────┴───────────┐
        │  rel 2: Agg(B)   │
        │     [OPAQUE]     │
        └────────┬─────────┘
                 │
                 │ edge: Agg(B).col1 = D.z
                 │
           ┌─────┴─────┐
           │  rel 3: D │
           │  (Scan D) │
           └───────────┘

    output: columns of A ++ C ++ Agg(B) ++ D   (flattened left-to-right, depth-first)
  }

struct JoinGraph {
relations: Vec<Relation>,
edges: Vec<Edge>,
filters: Vec<Filter>,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I normally think of a join graph where the edges themselves have filters. But maybe that is implicit in the fact that the edges and filters are parallell lists

/// moves columns to other positions.
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
struct ColRef {
rel: usize,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

would help to document what this is an index into

/// lack row count statistics are left untouched.
pub join_enumeration: bool, default = true

/// How much cheaper an enumerated join order must be, in percent, before it

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

this set of settings is exactly why I am hesitant to put something too complicated into the datafusion core -- the join ordering algorithms can get so out of hand complicated I think we need to find a way to keep the core (relatively) simple and leave API hooks to support the more complicated cases

I have more suggestions on how to do this below

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yeah - my goal would be to mostly bring this down as well (i.e. remove or accept the regression).

}

/// Cardinality and cost estimates over the subsets of a [`JoinGraph`].
struct CostModel<'a> {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Can we please make this a trait (so that other people can plug in their own cost models, based on whatever statistics they may have, or other knowledge they have about their data and the joins?

Something like this

  trait JoinCostModel {
      /// Estimated rows from joining every relation in `mask`.
      fn cardinality(&self, mask: RelSet) -> f64;

      /// Whether `left` and `right` can be combined, and how (inner join, or one
      /// side applying as a reducer).
      fn combine(&self, left: RelSet, right: RelSet) -> Option<Combine>;

      /// Cost of joining `left` (partitioned as `left_part`) with `right`
      /// (`right_part`), for each way of exchanging their inputs.
      fn exchanges(
          &self,
          left: RelSet,
          right: RelSet,
          left_part: PartSet,
          right_part: PartSet,
          collect_only: Option<RelSet>,
      ) -> Vec<(f64, PartSet, RelSet, PartitionMode)>;
  }

Dandandan and others added 2 commits August 21, 2026 10:36
The search now asks a `JoinCostModel` for cardinalities, which pairs may be
combined, and what each exchange costs, so anyone with better statistics than
the plan carries -- or a different cost function -- can search under them via
`JoinEnumeration::with_cost_model`. `DefaultJoinCostModel` is what the rule
uses otherwise, unchanged in what it estimates.

`reducer_side` and `tree_cost` are trait defaults, since both follow from the
three required methods. `exchanges` returns a named `Exchange` rather than a
tuple, and the graph the model works over is public: an external model needs to
see the relations to key its own statistics off them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The graph, and the extraction that flattens a subtree into one, are what a
plugged-in cost model has to read, so they now sit in `join_enumeration::graph`
rather than among the rule's own internals. The rule, the cost model and the
rebuild stay in `mod.rs`; the column-list helpers only the rebuild uses stay
with it.

Each type keeps a single public path, so `JoinGraph` and the set vocabulary are
named through `graph` now.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.

4 participants