Skip to content

Commit 7993ae3

Browse files
committed
Split SQL PR benchmarks into bench-sql and bench-sql-extended
`action/bench-sql` keeps the quicker `pr` preset, now without Clickbench Sorted. The new `action/bench-sql-extended` label runs the `pr-full` preset, which covers every regular SQL benchmark. Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KFeuTV21uQCX8GcNyZbKwf
1 parent 900c1f2 commit 7993ae3

4 files changed

Lines changed: 32 additions & 17 deletions

File tree

‎.github/workflows/pr-bench-dispatch.yml‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,21 @@ jobs:
151151
secrets: inherit
152152
with:
153153
matrix_preset: "pr-compact"
154+
155+
remove-sql-extended-label:
156+
runs-on: ubuntu-latest
157+
timeout-minutes: 10
158+
if: github.event.label.name == 'action/bench-sql-extended'
159+
steps:
160+
- uses: actions-ecosystem/action-remove-labels@2ce5d41b4b6aa8503e285553f75ed56e0a40bae0 # v1
161+
if: github.event.pull_request.head.repo.full_name == 'vortex-data/vortex'
162+
with:
163+
labels: action/bench-sql-extended
164+
fail_on_error: true
165+
166+
sql-extended-bench:
167+
needs: remove-sql-extended-label
168+
uses: ./.github/workflows/pr-bench-sql.yml
169+
secrets: inherit
170+
with:
171+
matrix_preset: "pr-full"

‎bench-orchestrator/bench_orchestrator/ci_matrix/catalog.py‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313

1414
PRESETS = {
1515
"develop": "Every regular SQL benchmark at full target coverage.",
16-
"pr": "The quicker pull-request SQL benchmark matrix.",
16+
"pr": "The quicker pull-request SQL benchmark matrix (action/bench-sql).",
1717
"pr-compact": "Pull-request SQL benchmarks for Vortex Compact plus Parquet controls.",
18-
"pr-all": "The union of the focused PR and PR Compact benchmark matrices.",
19-
"pr-full": "Every regular SQL benchmark at full PR target coverage.",
18+
"pr-all": "The PR and PR Compact benchmark matrices plus Clickbench Sorted (action/bench-all).",
19+
"pr-full": "Every regular SQL benchmark at full PR target coverage (action/bench-sql-extended).",
2020
"nightly": "Large-scale SF=100 TPC-H on NVMe and S3 at default targets.",
2121
}
2222

@@ -98,7 +98,6 @@
9898
benchmark=Benchmark.CLICKBENCH_SORTED,
9999
name="Clickbench Sorted on NVME",
100100
runs={
101-
"pr": DEFAULT,
102101
"pr-compact": COMPACT,
103102
"pr-all": STANDARD,
104103
"pr-full": DEFAULT_WITH_DUCKDB_PR_FULL,

‎bench-orchestrator/tests/test_matrix.py‎

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
"pr": tuple(
4343
benchmark_id
4444
for benchmark_id in REGULAR_IDS
45-
if benchmark_id not in {"tpch-s3-10", "appian-nvme", "vortex-queries"}
45+
if benchmark_id not in {"clickbench-sorted-nvme", "tpch-s3-10", "appian-nvme", "vortex-queries"}
4646
),
4747
"pr-compact": COMPACT_IDS,
4848
"pr-all": PR_ALL_IDS,
@@ -92,22 +92,17 @@ def test_pr_target_selection() -> None:
9292
assert set(cast("list[str]", entry["data_formats"])) == {"parquet", "vortex-compact"}
9393

9494

95-
def test_pr_all_is_union_of_focused_presets() -> None:
95+
def test_pr_all_covers_focused_presets() -> None:
9696
pr = {entry["id"]: entry for entry in _entries("pr")}
9797
pr_compact = {entry["id"]: entry for entry in _entries("pr-compact")}
9898
pr_all = {entry["id"]: entry for entry in _entries("pr-all")}
9999

100100
assert set(pr_all) == set(pr) | set(pr_compact)
101101
for benchmark_id, entry in pr_all.items():
102-
expected_targets: set[tuple[str, str]] = set()
103-
expected_formats: set[str] = set()
104102
for preset in (pr, pr_compact):
105103
if source := preset.get(benchmark_id):
106-
expected_targets |= _targets(source)
107-
expected_formats |= set(cast("list[str]", source["data_formats"]))
108-
109-
assert _targets(entry) == expected_targets
110-
assert set(cast("list[str]", entry["data_formats"])) == expected_formats
104+
assert _targets(source) <= _targets(entry)
105+
assert set(cast("list[str]", source["data_formats"])) <= set(cast("list[str]", entry["data_formats"]))
111106

112107

113108
def test_resolver_rejects_empty_targets() -> None:

‎docs/developer-guide/benchmarking.md‎

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,13 +261,16 @@ Benchmarks run automatically on all commits to `develop` and can be run on-deman
261261
- **String encoding** -- `action/bench-string` runs only the string encoding benchmark.
262262
- **GPU compression** -- `action/bench-gpu-compress` runs the allow-listed Vortex decompression
263263
cases on a GPU runner.
264-
- **SQL** -- `action/bench-sql` runs the `pr` preset, which excludes `vortex-compact`.
264+
- **SQL** -- `action/bench-sql` runs the `pr` preset, a quick core subset of the SQL benchmarks
265+
that excludes `vortex-compact`, Clickbench Sorted, Appian, TPC-H SF=10 on S3, and Vortex queries.
266+
- **SQL Extended** -- `action/bench-sql-extended` runs the `pr-full` preset: every regular SQL
267+
benchmark, including `vortex-compact` and DuckDB-format targets.
265268
- **SQL Compact** -- `action/bench-sql-compact` runs the `pr-compact` preset, which benchmarks
266269
`vortex-compact` plus Parquet control rows used to distinguish code changes from runner drift.
267270
- **All CPU benchmarks** -- `action/bench-all` runs random access, compression, string encoding,
268-
and the `pr-all` SQL preset, which combines the `pr` and `pr-compact` coverage without
269-
repeating shared jobs. Do not combine it with other benchmark labels; GPU compression is the
270-
only exception.
271+
and the `pr-all` SQL preset, which combines the `pr` and `pr-compact` coverage, plus
272+
Clickbench Sorted, without repeating shared jobs. Do not combine it with other benchmark labels;
273+
GPU compression is the only exception.
271274

272275
All CI benchmarks run on dedicated instances with the `release_debug` profile and
273276
`-C target-cpu=native` to produce representative numbers.

0 commit comments

Comments
 (0)