perf(promql): avoid concatenating constant series tags (#9108)

* perf(promql): experiment with constant-tag series concat

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

* test(promql): verify logical constant-tag concat equivalence

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

* test(perf): qualify constant-tag series concat

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

* test(perf): cover fragmented millisecond series concat

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

* fix(promql): compact constant dictionary tags at construction

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

* perf(promql): construct constant string dictionaries directly

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

* fix(perf): benchmark ordinary TQL queries for constant tags

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

* fix(promql): address constant-tag review and cardinality coverage

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

* fix(promql): scope concat optimization to string dictionaries

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

* test(perf): move high-cardinality constant-tag cases to the heavy set

The 10k and 100k constant-tag direct-SST cases repeatedly kill the
self-hosted query-regression runner (lost communication during the run),
while the default-cardinality case passes. Move them out of the default
'all' set into the heavy set so they only run on demand (case=heavy or
the heavy-regression label), and qualify them locally instead.

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>

---------

Signed-off-by: discord9 <55937128+discord9@users.noreply.github.com>
This commit is contained in:
discord9
2026-09-17 10:08:54 +00:00
committed by GitHub
parent aacf04cf6e
commit e9beb62eef
6 changed files with 1059 additions and 9 deletions
+5
View File
@@ -45,6 +45,11 @@ DEFAULT_CASES = [
HEAVY_CASES = [
"tests/perf/query_cases/prom_remote_write_7913/case.toml",
# High-cardinality direct-SST cases exceed the default query-regression
# runner's resources (the self-hosted runner is repeatedly lost during the
# run). Keep them in the heavy set so they only run on demand.
"tests/perf/query_cases/promql_constant_tag_concat_ms_10k/case.toml",
"tests/perf/query_cases/promql_constant_tag_concat_ms_100k/case.toml",
]
CASE_GROUPS = {