diff --git a/asap-tools/experiments/datasets/fake_metric/random_workload_artifacts.py b/asap-tools/experiments/datasets/fake_metric/random_workload_artifacts.py index 75181522..289236a8 100644 --- a/asap-tools/experiments/datasets/fake_metric/random_workload_artifacts.py +++ b/asap-tools/experiments/datasets/fake_metric/random_workload_artifacts.py @@ -127,6 +127,12 @@ def query_groups(queries, query_key): ] +def workload_set(workload): + """The directory of `workload`'s seed and variant: seed-862, seed-862-long.""" + variant = workload.get("variant") + return f"seed-{workload['seed']}" + (f"-{variant}" if variant else "") + + def pilot_configs(workload, pilot_dir): """The five-system pilot's run configs, {path under EXPERIMENTS_DIR: content}: ASAPQuery (the saved plan in `pilot_dir`) and Prometheus in @@ -146,7 +152,7 @@ def pilot_configs(workload, pilot_dir): feed_secs = starting_delay + FEED_BOUND_QUERY_PHASES * duration seed = workload["data_facts"]["feeder_seed"] table = pilot_dir / "eval_table.json" - out_dir = Path(CONFIG_DIR) / workload["id"] + out_dir = Path(CONFIG_DIR) / workload_set(workload) / workload["id"] e2e, _ = build_config( str(table), diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads.py b/asap-tools/experiments/datasets/fake_metric/random_workloads.py index 9e39a690..24834873 100644 --- a/asap-tools/experiments/datasets/fake_metric/random_workloads.py +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads.py @@ -62,6 +62,16 @@ ZIPF_EXPONENT = 1.1 USER_ID_UNIVERSE_SIZE = 10_000 USER_IDS_PER_LEAF = 1_000 +# A variant stretches one dimension of a seed's workloads and keeps every +# random choice, so its workloads pair with the base's: (lookback scale, +# label_0 values per job). +VARIANTS = { + "base": (1, 50), + # Lookbacks x3: 1m -> 3m, ..., 20m -> 60m; quantiles 100s -> 300s. + "long": (3, 50), + # x5 series: 50,000 at 10/s, 500,000 samples/s. + "x5": (1, 250), +} def duration(milliseconds): @@ -125,19 +135,33 @@ def rqe_query(rqe): raise ValueError(f"unknown capability {capability!r}") +def metric_labels(label_0_cardinality): + """METRIC_LABELS with `label_0_cardinality` label_0 values per job.""" + return [ + ( + {**label, "cardinality": label_0_cardinality} + if label["name"] == "label_0" + else label + ) + for label in METRIC_LABELS + ] + + def choose_temporal_time(rng): lookback_ms, intervals = rng.choice(TEMPORAL_TIMES) return lookback_ms, rng.choice(intervals) -def workload_data_facts(seed): +def workload_data_facts( + seed, leaf_count=LEAF_SERIES_COUNT, backfill_history_ms=BACKFILL_HISTORY_MS +): """Return the feeder contract shared by every workload from one seed.""" return { "feeder_seed": seed, "scrape_interval_ms": SECOND_MS // SAMPLES_PER_SEC_PER_SERIES, - "backfill_history_ms": BACKFILL_HISTORY_MS, + "backfill_history_ms": backfill_history_ms, "series": { - "leaf_count": LEAF_SERIES_COUNT, + "leaf_count": leaf_count, "ranking": { "kind": "deterministic_zipf_like", "exponent": ZIPF_EXPONENT, @@ -221,13 +245,13 @@ def sum_query(query_id, grouping, lookback_ms, interval_ms): ) -def quantile_query(query_id, grouping, phi): - rendered = f"avg by ({grouping_text(grouping)}) (quantile_over_time({phi:.2f}, data[{QUANTILE_LOOKBACK_MS // SECOND_MS}s]))" +def quantile_query(query_id, grouping, phi, lookback_ms=QUANTILE_LOOKBACK_MS): + rendered = f"avg by ({grouping_text(grouping)}) (quantile_over_time({phi:.2f}, data[{lookback_ms // SECOND_MS}s]))" return query( query_id, "quantile", grouping, - QUANTILE_LOOKBACK_MS, + lookback_ms, QUANTILE_INTERVAL_MS, rendered, "common-promql", @@ -297,22 +321,26 @@ def cardinality_query(query_id, grouping, lookback_ms, interval_ms): ) -def generate_workload(seed, index): - """Return one validated ten-query workload for `seed` and one-based `index`.""" +def generate_workload(seed, index, variant="base"): + """Return one validated ten-query workload for `seed` and one-based + `index`, stretched as VARIANTS[`variant`] says.""" + scale, label_0_cardinality = VARIANTS[variant] rng = random.Random(f"{seed}/{index}") fine, coarse = GROUPINGS[2], GROUPINGS[1] rollup_w, rollup_t = choose_temporal_time(rng) - short_w, short_t = MINUTE_MS, rng.choice((SECOND_MS, 2 * SECOND_MS)) - long_w, long_t = 20 * MINUTE_MS, rng.choice((30 * SECOND_MS, MINUTE_MS)) + rollup_w *= scale + short_w, short_t = scale * MINUTE_MS, rng.choice((SECOND_MS, 2 * SECOND_MS)) + long_w, long_t = scale * 20 * MINUTE_MS, rng.choice((30 * SECOND_MS, MINUTE_MS)) + quantile_w = scale * QUANTILE_LOOKBACK_MS quantile_specs = rng.sample( [(grouping, phi) for grouping in GROUPINGS for phi in QUANTILES], 3 ) queries = [ sum_query("q01-sum-fine", fine, rollup_w, rollup_t), sum_query("q02-sum-coarse", coarse, rollup_w, rollup_t), - quantile_query("q03-quantile", *quantile_specs[0]), - quantile_query("q04-quantile", *quantile_specs[1]), - quantile_query("q05-quantile", *quantile_specs[2]), + quantile_query("q03-quantile", *quantile_specs[0], quantile_w), + quantile_query("q04-quantile", *quantile_specs[1], quantile_w), + quantile_query("q05-quantile", *quantile_specs[2], quantile_w), topk_sum_query( "q06-topk-sum", rng.choice(GROUPINGS[:2]), @@ -343,15 +371,22 @@ def generate_workload(seed, index): ), cardinality_query("q10-cardinality", rng.choice(GROUPINGS), rollup_w, rollup_t), ] + labels = metric_labels(label_0_cardinality) workload = { "version": 1, "id": f"workload-{index:02d}", "seed": seed, - "labels": METRIC_LABELS, + "labels": labels, "samples_per_sec_per_series": SAMPLES_PER_SEC_PER_SERIES, - "data_facts": workload_data_facts(seed), + "data_facts": workload_data_facts( + seed, + math.prod(label["cardinality"] for label in labels), + scale * BACKFILL_HISTORY_MS, + ), "queries": queries, } + if variant != "base": + workload["variant"] = variant validate_workload(workload) return workload @@ -362,7 +397,8 @@ def validate_workload(workload): data_facts = workload["data_facts"] if data_facts["scrape_interval_ms"] != SECOND_MS // SAMPLES_PER_SEC_PER_SERIES: raise ValueError("data facts must declare the 100 ms scrape interval") - if data_facts["series"]["leaf_count"] != LEAF_SERIES_COUNT: + leaf_count = math.prod(label["cardinality"] for label in workload["labels"]) + if data_facts["series"]["leaf_count"] != leaf_count: raise ValueError("data facts must declare every leaf series") if data_facts["metrics"]["data_total"]["resets"] != "none": raise ValueError("the pilot counter contract must be monotonic") @@ -410,18 +446,22 @@ def validate_workload(workload): raise ValueError("a workload must contain the fine side of a roll-up chain") -def generate_workloads(seed, workload_count=WORKLOAD_COUNT): +def generate_workloads(seed, workload_count=WORKLOAD_COUNT, variant="base"): """Generate the deterministic workload suite for one experiment seed.""" - return [generate_workload(seed, index) for index in range(1, workload_count + 1)] + return [ + generate_workload(seed, index, variant) + for index in range(1, workload_count + 1) + ] def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--seed", type=int, required=True) parser.add_argument("--out", type=Path, required=True) + parser.add_argument("--variant", choices=sorted(VARIANTS), default="base") args = parser.parse_args() args.out.mkdir(parents=True, exist_ok=True) - for workload in generate_workloads(args.seed): + for workload in generate_workloads(args.seed, variant=args.variant): path = args.out / f"{workload['id']}.json" path.write_text(json.dumps(workload, indent=2, sort_keys=True) + "\n") print(path) diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/eval_table.json new file mode 100644 index 00000000..71b97d49 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/eval_table.json @@ -0,0 +1,578 @@ +{ + "inputs": { + "workload-01.json": "91737ac13f717e5b156ab3f91f5a0a85c3a7a3db5ee8ebe7649170142dceeb25" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-01", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 10000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-01/q01-sum-fine/keys/1800s", + "lookback_ms": 1800000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service, job) (sum_over_time(data[30m]))", + "rqes": [ + "random/seed=862/workload-01/q01-sum-fine/keys/1800s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-01/q02-sum-coarse/keys/1800s", + "lookback_ms": 1800000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service) (sum_over_time(data[30m]))", + "rqes": [ + "random/seed=862/workload-01/q02-sum-coarse/keys/1800s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.99 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[300s]))", + "rqes": [ + "random/seed=862/workload-01/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q04-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + "random/seed=862/workload-01/q04-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q05-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + "random/seed=862/workload-01/q05-quantile/values/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/topk4_q06-topk-sum/keys/180s", + "k": 4, + "lookback_ms": 180000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region, service) (4, sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-01/topk4_q06-topk-sum/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/topk4_q07-topk-sum/keys/3600s", + "k": 4, + "lookback_ms": 3600000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 30, + "promql": "topk by (region, service) (4, sum_over_time(data[60m]))", + "rqes": [ + "random/seed=862/workload-01/topk4_q07-topk-sum/keys/3600s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-01/q01-sum-fine/keys/1800s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 1800.0, + "max_N": 900000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "1800s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 9000000.0, + "covered_min_N": 9000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-01/q02-sum-coarse/keys/1800s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 1800.0, + "max_N": 9000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 9000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "1800s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q03-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q04-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q05-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-01/topk4_q06-topk-sum/keys/180s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 180.0, + "max_N": 900000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 18000000.0, + "covered_min_N": 18000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-01/topk4_q07-topk-sum/keys/3600s", + "instant": false, + "interval_secs": 30, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 3600.0, + "max_N": 18000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 18000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "3600s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/inference_config.yaml new file mode 100644 index 00000000..e8ed7e89 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/inference_config.yaml @@ -0,0 +1,80 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service) (sum_over_time(data[30m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[30m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service, job) (sum_over_time(data[30m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[30m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 176 + query: topk by (region, service) (4, sum_over_time(data[3m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 120 + query: topk by (region, service) (4, sum_over_time(data[60m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[60m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region, service, job) (quantile_over_time(0.99, data[300s])) + planned_subquery: quantile_over_time(0.99, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region) (quantile_over_time(0.95, data[300s])) + planned_subquery: quantile_over_time(0.95, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region, service, job) (quantile_over_time(0.75, data[300s])) + planned_subquery: quantile_over_time(0.75, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/plans.json.gz new file mode 100644 index 00000000..351c0eee Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/streaming_config.yaml new file mode 100644 index 00000000..d73fc594 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 50000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 20000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 20000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 144 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 5000 + windowType: sliding +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 480 + width: 1024 + slideIntervalMs: 30000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01.json new file mode 100644 index 00000000..334a66f3 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-01.json @@ -0,0 +1,363 @@ +{ + "data_facts": { + "backfill_history_ms": 3600000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 10000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-01", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 20000, + "lookback_ms": 1800000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 20000, + "lookback_ms": 1800000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.99)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.99 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 180000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 4, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 30000, + "lookback_ms": 3600000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 20) * 20 - 1800) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 20) * 20 - 1800)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 20) * 20 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 20) * 20 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, increase(data_total[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 20000, + "k": 8, + "lookback_ms": 1800000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 3600 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 30) * 30 - 3600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 30) * 30 - 3600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 30) * 30 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 30) * 30 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 30000, + "lookback_ms": 3600000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, rate(data_total[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q10-cardinality", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 20000, + "lookback_ms": 1800000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -1800, NOW()) AND NOW() GROUP BY region, service", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "long", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/eval_table.json new file mode 100644 index 00000000..90e7bfb1 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/eval_table.json @@ -0,0 +1,577 @@ +{ + "inputs": { + "workload-02.json": "01799f62cc7b4f9f9dd015f83d44ed69cd274041d5e08693cecc990b46c6bd2c" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-02", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 10000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-02/q01-sum-fine/keys/900s", + "lookback_ms": 900000, + "metric": "data" + } + }, + "interval_secs": 5, + "promql": "sum by (region, service, job) (sum_over_time(data[15m]))", + "rqes": [ + "random/seed=862/workload-02/q01-sum-fine/keys/900s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-02/q02-sum-coarse/keys/900s", + "lookback_ms": 900000, + "metric": "data" + } + }, + "interval_secs": 5, + "promql": "sum by (region, service) (sum_over_time(data[15m]))", + "rqes": [ + "random/seed=862/workload-02/q02-sum-coarse/keys/900s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + "random/seed=862/workload-02/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q04-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + "random/seed=862/workload-02/q04-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q05-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.99 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[300s]))", + "rqes": [ + "random/seed=862/workload-02/q05-quantile/values/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/topk4_q06-topk-sum/keys/180s", + "k": 4, + "lookback_ms": 180000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region, service) (4, sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-02/topk4_q06-topk-sum/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/topk4_q07-topk-sum/keys/3600s", + "k": 4, + "lookback_ms": 3600000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 60, + "promql": "topk by (region, service) (4, sum_over_time(data[60m]))", + "rqes": [ + "random/seed=862/workload-02/topk4_q07-topk-sum/keys/3600s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 450000.0, + "covered_min_N": 450000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-02/q01-sum-fine/keys/900s", + "instant": false, + "interval_secs": 5, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 900.0, + "max_N": 450000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 450000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "900s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 4500000.0, + "covered_min_N": 4500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-02/q02-sum-coarse/keys/900s", + "instant": false, + "interval_secs": 5, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 900.0, + "max_N": 4500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 4500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "900s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q03-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q04-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q05-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-02/topk4_q06-topk-sum/keys/180s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 180.0, + "max_N": 900000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 18000000.0, + "covered_min_N": 18000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-02/topk4_q07-topk-sum/keys/3600s", + "instant": false, + "interval_secs": 60, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 3600.0, + "max_N": 18000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 18000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "3600s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/inference_config.yaml new file mode 100644 index 00000000..98a4db01 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/inference_config.yaml @@ -0,0 +1,79 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 180 + query: sum by (region, service) (sum_over_time(data[15m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[15m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 180 + query: sum by (region, service, job) (sum_over_time(data[15m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[15m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 176 + query: topk by (region, service) (4, sum_over_time(data[3m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 60 + query: topk by (region, service) (4, sum_over_time(data[60m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[60m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region) (quantile_over_time(0.75, data[300s])) + planned_subquery: quantile_over_time(0.75, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region, service) (quantile_over_time(0.95, data[300s])) + planned_subquery: quantile_over_time(0.95, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region, service, job) (quantile_over_time(0.99, data[300s])) + planned_subquery: quantile_over_time(0.99, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/plans.json.gz new file mode 100644 index 00000000..cb98893a Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/streaming_config.yaml new file mode 100644 index 00000000..955cf6fb --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 50000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 5000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 5000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 144 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 5000 + windowType: sliding +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 240 + width: 4096 + slideIntervalMs: 60000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 60000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02.json new file mode 100644 index 00000000..90f033d2 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-02.json @@ -0,0 +1,361 @@ +{ + "data_facts": { + "backfill_history_ms": 3600000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 10000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-02", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 5000, + "lookback_ms": 900000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 5000, + "lookback_ms": 900000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 5000, + "lookback_ms": 900000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 5000, + "lookback_ms": 900000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.99)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.99 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 180000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 4, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 60000, + "lookback_ms": 3600000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 60000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 5) * 5 - 900) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 5) * 5 - 900)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 5) * 5 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 5) * 5 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q08-topk-count", + "interval_ms": 5000, + "lookback_ms": 900000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, increase(data_total[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 5000, + "k": 4, + "lookback_ms": 900000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 3600 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 60) * 60 - 3600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 60) * 60 - 3600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 60) * 60 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 60) * 60 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 60000, + "lookback_ms": 3600000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, rate(data_total[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 60000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 5) * 5 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality", + "interval_ms": 5000, + "lookback_ms": 900000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 5000, + "lookback_ms": 900000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, job, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -900, NOW()) AND NOW() GROUP BY region, service, job", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "long", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/eval_table.json new file mode 100644 index 00000000..c5757b94 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/eval_table.json @@ -0,0 +1,520 @@ +{ + "inputs": { + "workload-03.json": "0884d85ddc189d536ac0ec327fd34168cafe87b1ab5e0b5453bc7d2fd1a00c80" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-03", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 10000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-03/q01-sum-fine/keys/180s", + "lookback_ms": 180000, + "metric": "data" + } + }, + "interval_secs": 1, + "promql": "sum by (region, service, job) (sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-03/q01-sum-fine/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-03/q02-sum-coarse/keys/180s", + "lookback_ms": 180000, + "metric": "data" + } + }, + "interval_secs": 1, + "promql": "sum by (region, service) (sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-03/q02-sum-coarse/keys/180s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + "random/seed=862/workload-03/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/q04-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.9 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.90, data[300s]))", + "rqes": [ + "random/seed=862/workload-03/q04-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/q04-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.9 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.90, data[300s]))", + "rqes": [ + "random/seed=862/workload-03/q04-quantile/values/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/topk4_q06-topk-sum/keys/180s", + "k": 4, + "lookback_ms": 180000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region) (4, sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-03/topk4_q06-topk-sum/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/topk4_q07-topk-sum/keys/3600s", + "k": 4, + "lookback_ms": 3600000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 30, + "promql": "topk by (region) (4, sum_over_time(data[60m]))", + "rqes": [ + "random/seed=862/workload-03/topk4_q07-topk-sum/keys/3600s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 90000.0, + "covered_min_N": 90000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-03/q01-sum-fine/keys/180s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 180.0, + "max_N": 90000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 90000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-03/q02-sum-coarse/keys/180s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 180.0, + "max_N": 900000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/q03-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/q04-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 4500000.0, + "covered_min_N": 4500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-03/topk4_q06-topk-sum/keys/180s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 4, + "keys_per_window": 2500 + }, + "lookback_secs": 180.0, + "max_N": 4500000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 4500000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 90000000.0, + "covered_min_N": 90000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-03/topk4_q07-topk-sum/keys/3600s", + "instant": false, + "interval_secs": 30, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 4, + "keys_per_window": 2500 + }, + "lookback_secs": 3600.0, + "max_N": 90000000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 90000000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "3600s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/inference_config.yaml new file mode 100644 index 00000000..fa7a3352 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/inference_config.yaml @@ -0,0 +1,80 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 180 + query: sum by (region, service) (sum_over_time(data[3m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[3m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 180 + query: sum by (region, service, job) (sum_over_time(data[3m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 178 + query: topk by (region) (4, sum_over_time(data[3m])) + planned_subquery: topk by (region) (4, sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 120 + query: topk by (region) (4, sum_over_time(data[60m])) + planned_subquery: topk by (region) (4, sum_over_time(data[60m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region, service) (quantile_over_time(0.95, data[300s])) + planned_subquery: quantile_over_time(0.95, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region, service) (quantile_over_time(0.90, data[300s])) + planned_subquery: quantile_over_time(0.9, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region, service, job) (quantile_over_time(0.90, data[300s])) + planned_subquery: quantile_over_time(0.9, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/plans.json.gz new file mode 100644 index 00000000..1bfeea87 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/streaming_config.yaml new file mode 100644 index 00000000..b4b3e032 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 1000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 240 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 3000 + windowType: sliding +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 480 + width: 4096 + slideIntervalMs: 30000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03.json new file mode 100644 index 00000000..c02a641e --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-03.json @@ -0,0 +1,361 @@ +{ + "data_facts": { + "backfill_history_ms": 3600000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 10000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-03", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 1000, + "lookback_ms": 180000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 1000, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 1000, + "lookback_ms": 180000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 1000, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.90)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.90, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.9 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.90)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.90, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.9 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 180000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 4, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q07-topk-sum", + "interval_ms": 30000, + "lookback_ms": 3600000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 1) * 1 - 180) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 1) * 1 - 180)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 1) * 1 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 1) * 1 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 1000, + "lookback_ms": 180000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, increase(data_total[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 1000, + "k": 8, + "lookback_ms": 180000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 3600 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 30) * 30 - 3600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 30) * 30 - 3600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 30) * 30 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 30) * 30 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 30000, + "lookback_ms": 3600000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, rate(data_total[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 1) * 1 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality", + "interval_ms": 1000, + "lookback_ms": 180000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 1000, + "lookback_ms": 180000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, job, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -180, NOW()) AND NOW() GROUP BY region, service, job", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "long", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/eval_table.json new file mode 100644 index 00000000..7dd207bd --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/eval_table.json @@ -0,0 +1,521 @@ +{ + "inputs": { + "workload-04.json": "c58802c9d76c8d951256547284779042a17f98832bdac803004d1289de9c2416" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-04", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 10000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-04/q01-sum-fine/keys/1800s", + "lookback_ms": 1800000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service, job) (sum_over_time(data[30m]))", + "rqes": [ + "random/seed=862/workload-04/q01-sum-fine/keys/1800s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-04/q02-sum-coarse/keys/1800s", + "lookback_ms": 1800000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service) (sum_over_time(data[30m]))", + "rqes": [ + "random/seed=862/workload-04/q02-sum-coarse/keys/1800s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + "random/seed=862/workload-04/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + "random/seed=862/workload-04/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/q05-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + "random/seed=862/workload-04/q05-quantile/values/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/topk4_q06-topk-sum/keys/180s", + "k": 4, + "lookback_ms": 180000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 2, + "promql": "topk by (region, service) (4, sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-04/topk4_q06-topk-sum/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/topk4_q07-topk-sum/keys/3600s", + "k": 4, + "lookback_ms": 3600000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 30, + "promql": "topk by (region) (4, sum_over_time(data[60m]))", + "rqes": [ + "random/seed=862/workload-04/topk4_q07-topk-sum/keys/3600s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-04/q01-sum-fine/keys/1800s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 1800.0, + "max_N": 900000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "1800s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 9000000.0, + "covered_min_N": 9000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-04/q02-sum-coarse/keys/1800s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 1800.0, + "max_N": 9000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 9000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "1800s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/q03-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/q05-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-04/topk4_q06-topk-sum/keys/180s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 180.0, + "max_N": 900000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 90000000.0, + "covered_min_N": 90000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-04/topk4_q07-topk-sum/keys/3600s", + "instant": false, + "interval_secs": 30, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 4, + "keys_per_window": 2500 + }, + "lookback_secs": 3600.0, + "max_N": 90000000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 90000000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "3600s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/inference_config.yaml new file mode 100644 index 00000000..af7c657c --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/inference_config.yaml @@ -0,0 +1,77 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 180 + query: sum by (region, service) (sum_over_time(data[30m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[30m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 180 + query: sum by (region, service, job) (sum_over_time(data[30m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[30m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 120 + query: topk by (region) (4, sum_over_time(data[60m])) + planned_subquery: topk by (region) (4, sum_over_time(data[60m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 88 + query: topk by (region, service) (4, sum_over_time(data[3m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region) (quantile_over_time(0.75, data[300s])) + planned_subquery: quantile_over_time(0.75, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region, service) (quantile_over_time(0.75, data[300s])) + planned_subquery: quantile_over_time(0.75, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region) (quantile_over_time(0.95, data[300s])) + planned_subquery: quantile_over_time(0.95, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/plans.json.gz new file mode 100644 index 00000000..5b19e92d Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/streaming_config.yaml new file mode 100644 index 00000000..42b76d00 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 10000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 10000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 480 + width: 4096 + slideIntervalMs: 30000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: tumbling +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 120 + width: 1024 + slideIntervalMs: 2000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 6000 + windowType: sliding +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04.json new file mode 100644 index 00000000..3580ae7e --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-04.json @@ -0,0 +1,357 @@ +{ + "data_facts": { + "backfill_history_ms": 3600000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 10000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-04", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 10000, + "lookback_ms": 1800000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 10000, + "lookback_ms": 1800000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 10000, + "lookback_ms": 1800000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 10000, + "lookback_ms": 1800000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 2000, + "lookback_ms": 180000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 2000, + "k": 4, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q07-topk-sum", + "interval_ms": 30000, + "lookback_ms": 3600000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 10) * 10 - 1800) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 10) * 10 - 1800)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 10) * 10 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 10) * 10 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 10000, + "lookback_ms": 1800000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, increase(data_total[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 10000, + "k": 4, + "lookback_ms": 1800000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 3600 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 30) * 30 - 3600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 30) * 30 - 3600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 30) * 30 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 30) * 30 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 30000, + "lookback_ms": 3600000, + "output_groups": 4, + "output_series_upper_bound": 32, + "promql": "topk by (region) (8, rate(data_total[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 30000, + "k": 8, + "lookback_ms": 3600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 10) * 10 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality", + "interval_ms": 10000, + "lookback_ms": 1800000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 10000, + "lookback_ms": 1800000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, job, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -1800, NOW()) AND NOW() GROUP BY region, service, job", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "long", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/eval_table.json new file mode 100644 index 00000000..4e75b359 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/eval_table.json @@ -0,0 +1,573 @@ +{ + "inputs": { + "workload-05.json": "fd18d6a48cee263bf462c7220a1b23706e8efad9d5d5b9c84bbc52065411ea16" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-05", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 10000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-05/q01-sum-fine/keys/900s", + "lookback_ms": 900000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service, job) (sum_over_time(data[15m]))", + "rqes": [ + "random/seed=862/workload-05/q01-sum-fine/keys/900s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-05/q02-sum-coarse/keys/900s", + "lookback_ms": 900000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service) (sum_over_time(data[15m]))", + "rqes": [ + "random/seed=862/workload-05/q02-sum-coarse/keys/900s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.99 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.99, data[300s]))", + "rqes": [ + "random/seed=862/workload-05/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q04-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.5 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.50, data[300s]))", + "rqes": [ + "random/seed=862/workload-05/q04-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q05-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.9 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.90, data[300s]))", + "rqes": [ + "random/seed=862/workload-05/q05-quantile/values/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/topk8_q06-topk-sum/keys/180s", + "k": 8, + "lookback_ms": 180000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region, service) (8, sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-05/topk8_q06-topk-sum/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/topk4_q07-topk-sum/keys/3600s", + "k": 4, + "lookback_ms": 3600000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 60, + "promql": "topk by (region) (4, sum_over_time(data[60m]))", + "rqes": [ + "random/seed=862/workload-05/topk4_q07-topk-sum/keys/3600s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 450000.0, + "covered_min_N": 450000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-05/q01-sum-fine/keys/900s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 900.0, + "max_N": 450000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 450000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "900s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 4500000.0, + "covered_min_N": 4500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-05/q02-sum-coarse/keys/900s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 900.0, + "max_N": 4500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 4500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "900s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q03-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q04-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q05-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-05/topk8_q06-topk-sum/keys/180s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 180.0, + "max_N": 900000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q06-topk-sum", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 90000000.0, + "covered_min_N": 90000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-05/topk4_q07-topk-sum/keys/3600s", + "instant": false, + "interval_secs": 60, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 4, + "keys_per_window": 2500 + }, + "lookback_secs": 3600.0, + "max_N": 90000000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 90000000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "3600s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/inference_config.yaml new file mode 100644 index 00000000..bceab16c --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/inference_config.yaml @@ -0,0 +1,79 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service) (sum_over_time(data[15m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[15m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service, job) (sum_over_time(data[15m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[15m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 60 + query: topk by (region) (4, sum_over_time(data[60m])) + planned_subquery: topk by (region) (4, sum_over_time(data[60m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 175 + query: topk by (region, service) (8, sum_over_time(data[3m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region, service) (quantile_over_time(0.99, data[300s])) + planned_subquery: quantile_over_time(0.99, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region, service, job) (quantile_over_time(0.50, data[300s])) + planned_subquery: quantile_over_time(0.5, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region) (quantile_over_time(0.90, data[300s])) + planned_subquery: quantile_over_time(0.9, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/plans.json.gz new file mode 100644 index 00000000..a7a783d8 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/streaming_config.yaml new file mode 100644 index 00000000..fb521627 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 50000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 10000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 10000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 240 + width: 4096 + slideIntervalMs: 60000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 60000 + windowType: tumbling +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 240 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 6000 + windowType: sliding +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05.json new file mode 100644 index 00000000..df5a7125 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-05.json @@ -0,0 +1,361 @@ +{ + "data_facts": { + "backfill_history_ms": 3600000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 10000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-05", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 10000, + "lookback_ms": 900000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 10000, + "lookback_ms": 900000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 10000, + "lookback_ms": 900000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 10000, + "lookback_ms": 900000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.99)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.99, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.99 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.50)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.50, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.5 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.90)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.90, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.9 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 180000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 8, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q07-topk-sum", + "interval_ms": 60000, + "lookback_ms": 3600000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 60000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 10) * 10 - 900) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 10) * 10 - 900)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 10) * 10 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 10) * 10 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 10000, + "lookback_ms": 900000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, increase(data_total[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 10000, + "k": 8, + "lookback_ms": 900000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 3600 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 60) * 60 - 3600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 60) * 60 - 3600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 60) * 60 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 60) * 60 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 60000, + "lookback_ms": 3600000, + "output_groups": 4, + "output_series_upper_bound": 32, + "promql": "topk by (region) (8, rate(data_total[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 60000, + "k": 8, + "lookback_ms": 3600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 10) * 10 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality", + "interval_ms": 10000, + "lookback_ms": 900000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 10000, + "lookback_ms": 900000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, job, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -900, NOW()) AND NOW() GROUP BY region, service, job", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "long", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/eval_table.json new file mode 100644 index 00000000..13fc4d1d --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/eval_table.json @@ -0,0 +1,527 @@ +{ + "inputs": { + "workload-06.json": "092dda4aa53cb57e6493c990db237f7dff57af5457414986293c1abf08331d25" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-06", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 10000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-06/q01-sum-fine/keys/900s", + "lookback_ms": 900000, + "metric": "data" + } + }, + "interval_secs": 5, + "promql": "sum by (region, service, job) (sum_over_time(data[15m]))", + "rqes": [ + "random/seed=862/workload-06/q01-sum-fine/keys/900s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-06/q02-sum-coarse/keys/900s", + "lookback_ms": 900000, + "metric": "data" + } + }, + "interval_secs": 5, + "promql": "sum by (region, service) (sum_over_time(data[15m]))", + "rqes": [ + "random/seed=862/workload-06/q02-sum-coarse/keys/900s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.5 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.50, data[300s]))", + "rqes": [ + "random/seed=862/workload-06/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.5 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.50, data[300s]))", + "rqes": [ + "random/seed=862/workload-06/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/q05-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.9 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.90, data[300s]))", + "rqes": [ + "random/seed=862/workload-06/q05-quantile/values/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/topk4_q06-topk-sum/keys/180s", + "k": 4, + "lookback_ms": 180000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 2, + "promql": "topk by (region, service) (4, sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-06/topk4_q06-topk-sum/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/topk8_q07-topk-sum/keys/3600s", + "k": 8, + "lookback_ms": 3600000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 60, + "promql": "topk by (region, service) (8, sum_over_time(data[60m]))", + "rqes": [ + "random/seed=862/workload-06/topk8_q07-topk-sum/keys/3600s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 450000.0, + "covered_min_N": 450000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-06/q01-sum-fine/keys/900s", + "instant": false, + "interval_secs": 5, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 900.0, + "max_N": 450000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 450000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "900s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 4500000.0, + "covered_min_N": 4500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-06/q02-sum-coarse/keys/900s", + "instant": false, + "interval_secs": 5, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 900.0, + "max_N": 4500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 4500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "900s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/q03-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/q05-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-06/topk4_q06-topk-sum/keys/180s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 180.0, + "max_N": 900000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 18000000.0, + "covered_min_N": 18000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-06/topk8_q07-topk-sum/keys/3600s", + "instant": false, + "interval_secs": 60, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 3600.0, + "max_N": 18000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 18000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q07-topk-sum", + "range": "3600s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/inference_config.yaml new file mode 100644 index 00000000..121756c0 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/inference_config.yaml @@ -0,0 +1,79 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 180 + query: sum by (region, service) (sum_over_time(data[15m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[15m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 180 + query: sum by (region, service, job) (sum_over_time(data[15m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[15m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 88 + query: topk by (region, service) (4, sum_over_time(data[3m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 60 + query: topk by (region, service) (8, sum_over_time(data[60m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[60m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region, service, job) (quantile_over_time(0.50, data[300s])) + planned_subquery: quantile_over_time(0.5, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region, service) (quantile_over_time(0.50, data[300s])) + planned_subquery: quantile_over_time(0.5, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region) (quantile_over_time(0.90, data[300s])) + planned_subquery: quantile_over_time(0.9, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/plans.json.gz new file mode 100644 index 00000000..6c7366cf Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/streaming_config.yaml new file mode 100644 index 00000000..ff0a0cd5 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 5000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 5000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 120 + width: 1024 + slideIntervalMs: 2000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 6000 + windowType: sliding +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 480 + width: 4096 + slideIntervalMs: 60000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 60000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06.json new file mode 100644 index 00000000..eb22e7d3 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-06.json @@ -0,0 +1,365 @@ +{ + "data_facts": { + "backfill_history_ms": 3600000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 10000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-06", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 5000, + "lookback_ms": 900000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 5000, + "lookback_ms": 900000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 5000, + "lookback_ms": 900000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 5000, + "lookback_ms": 900000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.50)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.50, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.5 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.50)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.50, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.5 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.90)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.90, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.9 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 2000, + "lookback_ms": 180000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 2000, + "k": 4, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 60000, + "lookback_ms": 3600000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 60000, + "k": 8, + "lookback_ms": 3600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 5) * 5 - 900) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 5) * 5 - 900)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 5) * 5 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 5) * 5 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 5000, + "lookback_ms": 900000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, increase(data_total[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 5000, + "k": 8, + "lookback_ms": 900000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 3600 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 60) * 60 - 3600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 60) * 60 - 3600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 60) * 60 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 60) * 60 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q09-rate", + "interval_ms": 60000, + "lookback_ms": 3600000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, rate(data_total[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region", + "service" + ], + "id": "q09-rate/rqe", + "interval_ms": 60000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 5) * 5 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality", + "interval_ms": 5000, + "lookback_ms": 900000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 5000, + "lookback_ms": 900000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, job, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -900, NOW()) AND NOW() GROUP BY region, service, job", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "long", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/eval_table.json new file mode 100644 index 00000000..93d227f0 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/eval_table.json @@ -0,0 +1,574 @@ +{ + "inputs": { + "workload-07.json": "9be510d78088784322b43830c443a351256659fe1af84b93dc1636f6b8e11058" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-07", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 10000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-07/q01-sum-fine/keys/1800s", + "lookback_ms": 1800000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service, job) (sum_over_time(data[30m]))", + "rqes": [ + "random/seed=862/workload-07/q01-sum-fine/keys/1800s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-07/q02-sum-coarse/keys/1800s", + "lookback_ms": 1800000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service) (sum_over_time(data[30m]))", + "rqes": [ + "random/seed=862/workload-07/q02-sum-coarse/keys/1800s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.99 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[300s]))", + "rqes": [ + "random/seed=862/workload-07/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q04-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + "random/seed=862/workload-07/q04-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q05-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.5 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.50, data[300s]))", + "rqes": [ + "random/seed=862/workload-07/q05-quantile/values/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/topk4_q06-topk-sum/keys/180s", + "k": 4, + "lookback_ms": 180000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 2, + "promql": "topk by (region) (4, sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-07/topk4_q06-topk-sum/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/topk8_q07-topk-sum/keys/3600s", + "k": 8, + "lookback_ms": 3600000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 60, + "promql": "topk by (region, service) (8, sum_over_time(data[60m]))", + "rqes": [ + "random/seed=862/workload-07/topk8_q07-topk-sum/keys/3600s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-07/q01-sum-fine/keys/1800s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 1800.0, + "max_N": 900000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "1800s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 9000000.0, + "covered_min_N": 9000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-07/q02-sum-coarse/keys/1800s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 1800.0, + "max_N": 9000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 9000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "1800s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q03-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q04-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q05-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 4500000.0, + "covered_min_N": 4500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-07/topk4_q06-topk-sum/keys/180s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 4, + "keys_per_window": 2500 + }, + "lookback_secs": 180.0, + "max_N": 4500000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 4500000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 18000000.0, + "covered_min_N": 18000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-07/topk8_q07-topk-sum/keys/3600s", + "instant": false, + "interval_secs": 60, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 3600.0, + "max_N": 18000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 18000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q07-topk-sum", + "range": "3600s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/inference_config.yaml new file mode 100644 index 00000000..4b9bdfc8 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/inference_config.yaml @@ -0,0 +1,80 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service) (sum_over_time(data[30m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[30m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service, job) (sum_over_time(data[30m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[30m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 89 + query: topk by (region) (4, sum_over_time(data[3m])) + planned_subquery: topk by (region) (4, sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 60 + query: topk by (region, service) (8, sum_over_time(data[60m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[60m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region, service, job) (quantile_over_time(0.99, data[300s])) + planned_subquery: quantile_over_time(0.99, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region, service, job) (quantile_over_time(0.95, data[300s])) + planned_subquery: quantile_over_time(0.95, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region) (quantile_over_time(0.50, data[300s])) + planned_subquery: quantile_over_time(0.5, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/plans.json.gz new file mode 100644 index 00000000..5714d6f9 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/streaming_config.yaml new file mode 100644 index 00000000..c67c7738 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 50000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 20000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 20000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 180 + width: 1024 + slideIntervalMs: 2000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 4000 + windowType: sliding +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 480 + width: 4096 + slideIntervalMs: 60000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 60000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07.json new file mode 100644 index 00000000..1cae4473 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-07.json @@ -0,0 +1,359 @@ +{ + "data_facts": { + "backfill_history_ms": 3600000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 10000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-07", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 20000, + "lookback_ms": 1800000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 20000, + "lookback_ms": 1800000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.99)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.99 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.50)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.50, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.5 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q06-topk-sum", + "interval_ms": 2000, + "lookback_ms": 180000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 2000, + "k": 4, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 60000, + "lookback_ms": 3600000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 60000, + "k": 8, + "lookback_ms": 3600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 20) * 20 - 1800) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 20) * 20 - 1800)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 20) * 20 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 20) * 20 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q08-topk-count", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, increase(data_total[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 20000, + "k": 4, + "lookback_ms": 1800000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 3600 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 60) * 60 - 3600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 60) * 60 - 3600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 60) * 60 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 60) * 60 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q09-rate", + "interval_ms": 60000, + "lookback_ms": 3600000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, rate(data_total[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region", + "service" + ], + "id": "q09-rate/rqe", + "interval_ms": 60000, + "k": 8, + "lookback_ms": 3600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q10-cardinality", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 20000, + "lookback_ms": 1800000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -1800, NOW()) AND NOW() GROUP BY region", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "long", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/eval_table.json new file mode 100644 index 00000000..1a773256 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/eval_table.json @@ -0,0 +1,518 @@ +{ + "inputs": { + "workload-08.json": "9997b5baa03117509e1d8336278ecf23851806dac73551f79c371b50f72fc032" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-08", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 10000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-08/q01-sum-fine/keys/900s", + "lookback_ms": 900000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service, job) (sum_over_time(data[15m]))", + "rqes": [ + "random/seed=862/workload-08/q01-sum-fine/keys/900s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-08/q02-sum-coarse/keys/900s", + "lookback_ms": 900000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service) (sum_over_time(data[15m]))", + "rqes": [ + "random/seed=862/workload-08/q02-sum-coarse/keys/900s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + "random/seed=862/workload-08/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/q04-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + "random/seed=862/workload-08/q04-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/q04-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + "random/seed=862/workload-08/q04-quantile/values/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/topk4_q06-topk-sum/keys/180s", + "k": 4, + "lookback_ms": 180000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region) (4, sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-08/topk4_q06-topk-sum/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/topk4_q07-topk-sum/keys/3600s", + "k": 4, + "lookback_ms": 3600000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 30, + "promql": "topk by (region) (4, sum_over_time(data[60m]))", + "rqes": [ + "random/seed=862/workload-08/topk4_q07-topk-sum/keys/3600s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 450000.0, + "covered_min_N": 450000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-08/q01-sum-fine/keys/900s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 900.0, + "max_N": 450000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 450000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "900s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 4500000.0, + "covered_min_N": 4500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-08/q02-sum-coarse/keys/900s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 900.0, + "max_N": 4500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 4500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "900s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/q03-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/q04-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 4500000.0, + "covered_min_N": 4500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-08/topk4_q06-topk-sum/keys/180s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 4, + "keys_per_window": 2500 + }, + "lookback_secs": 180.0, + "max_N": 4500000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 4500000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 90000000.0, + "covered_min_N": 90000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-08/topk4_q07-topk-sum/keys/3600s", + "instant": false, + "interval_secs": 30, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 4, + "keys_per_window": 2500 + }, + "lookback_secs": 3600.0, + "max_N": 90000000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 90000000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "3600s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/inference_config.yaml new file mode 100644 index 00000000..7bcb05e9 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/inference_config.yaml @@ -0,0 +1,78 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service) (sum_over_time(data[15m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[15m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service, job) (sum_over_time(data[15m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[15m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 178 + query: topk by (region) (4, sum_over_time(data[3m])) + planned_subquery: topk by (region) (4, sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 120 + query: topk by (region) (4, sum_over_time(data[60m])) + planned_subquery: topk by (region) (4, sum_over_time(data[60m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region, service) (quantile_over_time(0.75, data[300s])) + planned_subquery: quantile_over_time(0.75, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region, service) (quantile_over_time(0.95, data[300s])) + planned_subquery: quantile_over_time(0.95, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region) (quantile_over_time(0.95, data[300s])) + planned_subquery: quantile_over_time(0.95, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/plans.json.gz new file mode 100644 index 00000000..20afa36b Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/streaming_config.yaml new file mode 100644 index 00000000..31dcc733 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 10000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 10000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 240 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 3000 + windowType: sliding +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 480 + width: 4096 + slideIntervalMs: 30000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08.json new file mode 100644 index 00000000..bc4aa1f8 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-08.json @@ -0,0 +1,351 @@ +{ + "data_facts": { + "backfill_history_ms": 3600000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 10000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-08", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 10000, + "lookback_ms": 900000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 10000, + "lookback_ms": 900000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 10000, + "lookback_ms": 900000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 10000, + "lookback_ms": 900000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 180000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 4, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q07-topk-sum", + "interval_ms": 30000, + "lookback_ms": 3600000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 10) * 10 - 900) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 10) * 10 - 900)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 10) * 10 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 10) * 10 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region", + "grouping": [ + "region" + ], + "id": "q08-topk-count", + "interval_ms": 10000, + "lookback_ms": 900000, + "output_groups": 4, + "output_series_upper_bound": 32, + "promql": "topk by (region) (8, increase(data_total[15m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 10000, + "k": 8, + "lookback_ms": 900000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 3600 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 30) * 30 - 3600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 30) * 30 - 3600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 30) * 30 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 30) * 30 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 30000, + "lookback_ms": 3600000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, rate(data_total[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 10) * 10 - 900, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q10-cardinality", + "interval_ms": 10000, + "lookback_ms": 900000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 10000, + "lookback_ms": 900000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -900, NOW()) AND NOW() GROUP BY region", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "long", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/eval_table.json new file mode 100644 index 00000000..98124078 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/eval_table.json @@ -0,0 +1,529 @@ +{ + "inputs": { + "workload-09.json": "b3bf334dba7733249950dae33ac04d875f81291849da88445379c026c8138867" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-09", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 10000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-09/q01-sum-fine/keys/180s", + "lookback_ms": 180000, + "metric": "data" + } + }, + "interval_secs": 2, + "promql": "sum by (region, service, job) (sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-09/q01-sum-fine/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-09/q02-sum-coarse/keys/180s", + "lookback_ms": 180000, + "metric": "data" + } + }, + "interval_secs": 2, + "promql": "sum by (region, service) (sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-09/q02-sum-coarse/keys/180s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + "random/seed=862/workload-09/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/q04-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + "random/seed=862/workload-09/q04-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + "random/seed=862/workload-09/q03-quantile/values/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/topk8_q06-topk-sum/keys/180s", + "k": 8, + "lookback_ms": 180000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region, service) (8, sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-09/topk8_q06-topk-sum/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/topk8_q07-topk-sum/keys/3600s", + "k": 8, + "lookback_ms": 3600000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 30, + "promql": "topk by (region, service) (8, sum_over_time(data[60m]))", + "rqes": [ + "random/seed=862/workload-09/topk8_q07-topk-sum/keys/3600s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 90000.0, + "covered_min_N": 90000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-09/q01-sum-fine/keys/180s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 180.0, + "max_N": 90000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 90000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-09/q02-sum-coarse/keys/180s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 180.0, + "max_N": 900000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/q03-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/q04-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-09/topk8_q06-topk-sum/keys/180s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 180.0, + "max_N": 900000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q06-topk-sum", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 18000000.0, + "covered_min_N": 18000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-09/topk8_q07-topk-sum/keys/3600s", + "instant": false, + "interval_secs": 30, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 3600.0, + "max_N": 18000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 18000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q07-topk-sum", + "range": "3600s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/inference_config.yaml new file mode 100644 index 00000000..692b1ede --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/inference_config.yaml @@ -0,0 +1,81 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service) (sum_over_time(data[3m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[3m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service, job) (sum_over_time(data[3m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 175 + query: topk by (region, service) (8, sum_over_time(data[3m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 119 + query: topk by (region, service) (8, sum_over_time(data[60m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[60m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region, service, job) (quantile_over_time(0.75, data[300s])) + planned_subquery: quantile_over_time(0.75, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region, service, job) (quantile_over_time(0.95, data[300s])) + planned_subquery: quantile_over_time(0.95, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 271 + query: avg by (region, service) (quantile_over_time(0.75, data[300s])) + planned_subquery: quantile_over_time(0.75, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/plans.json.gz new file mode 100644 index 00000000..b9c85d52 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/streaming_config.yaml new file mode 100644 index 00000000..482636cf --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 2000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 2000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 240 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 6000 + windowType: sliding +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 480 + width: 4096 + slideIntervalMs: 30000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 60000 + windowType: sliding +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09.json new file mode 100644 index 00000000..1dce21aa --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-09.json @@ -0,0 +1,365 @@ +{ + "data_facts": { + "backfill_history_ms": 3600000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 10000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-09", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 2000, + "lookback_ms": 180000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 2000, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 2000, + "lookback_ms": 180000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 2000, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.95, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 180000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 8, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 30000, + "lookback_ms": 3600000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 30000, + "k": 8, + "lookback_ms": 3600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 2) * 2 - 180) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 2) * 2 - 180)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 2) * 2 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 2) * 2 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q08-topk-count", + "interval_ms": 2000, + "lookback_ms": 180000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, increase(data_total[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 2000, + "k": 4, + "lookback_ms": 180000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 3600 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 30) * 30 - 3600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 30) * 30 - 3600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 30) * 30 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 30) * 30 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q09-rate", + "interval_ms": 30000, + "lookback_ms": 3600000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, rate(data_total[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region", + "service" + ], + "id": "q09-rate/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 2) * 2 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q10-cardinality", + "interval_ms": 2000, + "lookback_ms": 180000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 2000, + "lookback_ms": 180000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -180, NOW()) AND NOW() GROUP BY region, service", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "long", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/eval_table.json new file mode 100644 index 00000000..9c848e11 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/eval_table.json @@ -0,0 +1,571 @@ +{ + "inputs": { + "workload-10.json": "fe5f7e0880c815499f13880029c60858f53ac2613048624b8abb039464146b8b" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-10", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 10000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-10/q01-sum-fine/keys/1800s", + "lookback_ms": 1800000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service, job) (sum_over_time(data[30m]))", + "rqes": [ + "random/seed=862/workload-10/q01-sum-fine/keys/1800s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-10/q02-sum-coarse/keys/1800s", + "lookback_ms": 1800000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service) (sum_over_time(data[30m]))", + "rqes": [ + "random/seed=862/workload-10/q02-sum-coarse/keys/1800s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q03-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.99 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.99, data[300s]))", + "rqes": [ + "random/seed=862/workload-10/q03-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q04-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + "random/seed=862/workload-10/q04-quantile/values/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q05-quantile/values/300s", + "lookback_ms": 300000, + "metric": "data", + "phi": 0.9 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.90, data[300s]))", + "rqes": [ + "random/seed=862/workload-10/q05-quantile/values/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/topk8_q06-topk-sum/keys/180s", + "k": 8, + "lookback_ms": 180000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 2, + "promql": "topk by (region) (8, sum_over_time(data[3m]))", + "rqes": [ + "random/seed=862/workload-10/topk8_q06-topk-sum/keys/180s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/topk8_q07-topk-sum/keys/3600s", + "k": 8, + "lookback_ms": 3600000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 60, + "promql": "topk by (region, service) (8, sum_over_time(data[60m]))", + "rqes": [ + "random/seed=862/workload-10/topk8_q07-topk-sum/keys/3600s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 900000.0, + "covered_min_N": 900000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-10/q01-sum-fine/keys/1800s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 1800.0, + "max_N": 900000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 900000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "1800s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 9000000.0, + "covered_min_N": 9000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-10/q02-sum-coarse/keys/1800s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 1800.0, + "max_N": 9000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 9000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "1800s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q03-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q04-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 10000, + "covered_max_N": 3000.0, + "covered_min_N": 3000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q05-quantile/values/300s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 10000, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 3000.0, + "max_covered_share": 0.0001, + "metric": "data", + "min_N": 3000.0, + "min_covered_share": 0.0001, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "300s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 4500000.0, + "covered_min_N": 4500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-10/topk8_q06-topk-sum/keys/180s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 4, + "keys_per_window": 2500 + }, + "lookback_secs": 180.0, + "max_N": 4500000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 4500000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk8_q06-topk-sum", + "range": "180s", + "stream": "data/value" + }, + { + "assumptions": [ + "500 keys per heap read at the curves' 1000" + ], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 18000000.0, + "covered_min_N": 18000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "topk", + "grid_K": 1000, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-10/topk8_q07-topk-sum/keys/3600s", + "instant": false, + "interval_secs": 60, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 100000, + "groups": 20, + "keys_per_window": 1000 + }, + "lookback_secs": 3600.0, + "max_N": 18000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 18000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q07-topk-sum", + "range": "3600s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/inference_config.yaml new file mode 100644 index 00000000..040b0032 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/inference_config.yaml @@ -0,0 +1,77 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service) (sum_over_time(data[30m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[30m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 90 + query: sum by (region, service, job) (sum_over_time(data[30m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[30m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 89 + query: topk by (region) (8, sum_over_time(data[3m])) + planned_subquery: topk by (region) (8, sum_over_time(data[3m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 60 + query: topk by (region, service) (8, sum_over_time(data[60m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[60m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region, service) (quantile_over_time(0.99, data[300s])) + planned_subquery: quantile_over_time(0.99, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region) (quantile_over_time(0.75, data[300s])) + planned_subquery: quantile_over_time(0.75, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 251 + query: avg by (region) (quantile_over_time(0.90, data[300s])) + planned_subquery: quantile_over_time(0.9, data[5m]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/plans.json.gz new file mode 100644 index 00000000..9e3f2e2a Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/streaming_config.yaml new file mode 100644 index 00000000..1c4afbd3 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 50000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 20000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 20000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 360 + width: 1024 + slideIntervalMs: 2000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 4000 + windowType: sliding +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 480 + width: 4096 + slideIntervalMs: 60000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 60000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10.json new file mode 100644 index 00000000..567b5cf8 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-long/workload-10.json @@ -0,0 +1,355 @@ +{ + "data_facts": { + "backfill_history_ms": 3600000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 10000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-10", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 50, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 20000, + "lookback_ms": 1800000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 20000, + "lookback_ms": 1800000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.99)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.99, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.99 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.75, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.90)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.90, data[300s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 300000, + "metric": "data", + "phi": 0.9 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 180, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region", + "grouping": [ + "region" + ], + "id": "q06-topk-sum", + "interval_ms": 2000, + "lookback_ms": 180000, + "output_groups": 4, + "output_series_upper_bound": 32, + "promql": "topk by (region) (8, sum_over_time(data[3m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 2000, + "k": 8, + "lookback_ms": 180000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 60000, + "lookback_ms": 3600000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 60000, + "k": 8, + "lookback_ms": 3600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 20) * 20 - 1800) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 20) * 20 - 1800)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 20) * 20 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 20) * 20 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, increase(data_total[30m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 20000, + "k": 8, + "lookback_ms": 1800000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 3600 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 60) * 60 - 3600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 60) * 60 - 3600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 60) * 60 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 60) * 60 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 3600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q09-rate", + "interval_ms": 60000, + "lookback_ms": 3600000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, rate(data_total[60m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region", + "service" + ], + "id": "q09-rate/rqe", + "interval_ms": 60000, + "k": 4, + "lookback_ms": 3600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 20) * 20 - 1800, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q10-cardinality", + "interval_ms": 20000, + "lookback_ms": 1800000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 20000, + "lookback_ms": 1800000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -1800, NOW()) AND NOW() GROUP BY region", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "long", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/eval_table.json new file mode 100644 index 00000000..ea24f386 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/eval_table.json @@ -0,0 +1,574 @@ +{ + "inputs": { + "workload-01.json": "9a11ea2e20d19f2c710fb9866b23f7371fc12061411208c876bc6cf3004d8435" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-01", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 50000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-01/q01-sum-fine/keys/600s", + "lookback_ms": 600000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service, job) (sum_over_time(data[10m]))", + "rqes": [ + "random/seed=862/workload-01/q01-sum-fine/keys/600s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-01/q02-sum-coarse/keys/600s", + "lookback_ms": 600000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service) (sum_over_time(data[10m]))", + "rqes": [ + "random/seed=862/workload-01/q02-sum-coarse/keys/600s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.99 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[100s]))", + "rqes": [ + "random/seed=862/workload-01/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q04-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + "random/seed=862/workload-01/q04-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q05-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + "random/seed=862/workload-01/q05-quantile/values/100s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/topk4_q06-topk-sum/keys/60s", + "k": 4, + "lookback_ms": 60000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region, service) (4, sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-01/topk4_q06-topk-sum/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/topk4_q07-topk-sum/keys/1200s", + "k": 4, + "lookback_ms": 1200000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 30, + "promql": "topk by (region, service) (4, sum_over_time(data[20m]))", + "rqes": [ + "random/seed=862/workload-01/topk4_q07-topk-sum/keys/1200s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-01/q01-sum-fine/keys/600s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 600.0, + "max_N": 1500000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "600s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 15000000.0, + "covered_min_N": 15000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-01/q02-sum-coarse/keys/600s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 600.0, + "max_N": 15000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 15000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "600s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q03-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q04-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-01/q05-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-01/topk4_q06-topk-sum/keys/60s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 60.0, + "max_N": 1500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 30000000.0, + "covered_min_N": 30000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-01", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-01/topk4_q07-topk-sum/keys/1200s", + "instant": false, + "interval_secs": 30, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 1200.0, + "max_N": 30000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 30000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "1200s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/inference_config.yaml new file mode 100644 index 00000000..9a005085 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/inference_config.yaml @@ -0,0 +1,80 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service) (sum_over_time(data[10m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[10m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service, job) (sum_over_time(data[10m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[10m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 59 + query: topk by (region, service) (4, sum_over_time(data[1m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 40 + query: topk by (region, service) (4, sum_over_time(data[20m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[20m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region, service, job) (quantile_over_time(0.99, data[100s])) + planned_subquery: quantile_over_time(0.99, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region) (quantile_over_time(0.95, data[100s])) + planned_subquery: quantile_over_time(0.95, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region, service, job) (quantile_over_time(0.75, data[100s])) + planned_subquery: quantile_over_time(0.75, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/plans.json.gz new file mode 100644 index 00000000..e680d181 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/streaming_config.yaml new file mode 100644 index 00000000..c0e3e9f7 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 25000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 20000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 20000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 120 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 2000 + windowType: sliding +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 160 + width: 4096 + slideIntervalMs: 30000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01.json new file mode 100644 index 00000000..1b962723 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-01.json @@ -0,0 +1,363 @@ +{ + "data_facts": { + "backfill_history_ms": 1200000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 50000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-01", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 20000, + "lookback_ms": 600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 20000, + "lookback_ms": 600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.99)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.99 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 60000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 4, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 30000, + "lookback_ms": 1200000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 20) * 20 - 600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 20) * 20 - 600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 20) * 20 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 20) * 20 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, increase(data_total[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 20000, + "k": 8, + "lookback_ms": 600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 1200 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 30) * 30 - 1200) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 30) * 30 - 1200)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 30) * 30 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 30) * 30 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 30000, + "lookback_ms": 1200000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, rate(data_total[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q10-cardinality", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 20000, + "lookback_ms": 600000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -600, NOW()) AND NOW() GROUP BY region, service", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "x5", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/eval_table.json new file mode 100644 index 00000000..2d1255fb --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/eval_table.json @@ -0,0 +1,573 @@ +{ + "inputs": { + "workload-02.json": "5d07ed44756aca3220a5126bc1e1595817967875aa21d90696b91e2879e3541f" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-02", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 50000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-02/q01-sum-fine/keys/300s", + "lookback_ms": 300000, + "metric": "data" + } + }, + "interval_secs": 5, + "promql": "sum by (region, service, job) (sum_over_time(data[5m]))", + "rqes": [ + "random/seed=862/workload-02/q01-sum-fine/keys/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-02/q02-sum-coarse/keys/300s", + "lookback_ms": 300000, + "metric": "data" + } + }, + "interval_secs": 5, + "promql": "sum by (region, service) (sum_over_time(data[5m]))", + "rqes": [ + "random/seed=862/workload-02/q02-sum-coarse/keys/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + "random/seed=862/workload-02/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q04-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + "random/seed=862/workload-02/q04-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q05-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.99 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[100s]))", + "rqes": [ + "random/seed=862/workload-02/q05-quantile/values/100s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/topk4_q06-topk-sum/keys/60s", + "k": 4, + "lookback_ms": 60000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region, service) (4, sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-02/topk4_q06-topk-sum/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/topk4_q07-topk-sum/keys/1200s", + "k": 4, + "lookback_ms": 1200000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 60, + "promql": "topk by (region, service) (4, sum_over_time(data[20m]))", + "rqes": [ + "random/seed=862/workload-02/topk4_q07-topk-sum/keys/1200s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 750000.0, + "covered_min_N": 750000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-02/q01-sum-fine/keys/300s", + "instant": false, + "interval_secs": 5, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 750000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 750000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "300s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 7500000.0, + "covered_min_N": 7500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-02/q02-sum-coarse/keys/300s", + "instant": false, + "interval_secs": 5, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 7500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 7500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "300s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q03-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q04-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-02/q05-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-02/topk4_q06-topk-sum/keys/60s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 60.0, + "max_N": 1500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 30000000.0, + "covered_min_N": 30000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-02", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-02/topk4_q07-topk-sum/keys/1200s", + "instant": false, + "interval_secs": 60, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 1200.0, + "max_N": 30000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 30000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "1200s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/inference_config.yaml new file mode 100644 index 00000000..3d590028 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/inference_config.yaml @@ -0,0 +1,79 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 60 + query: sum by (region, service) (sum_over_time(data[5m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[5m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 60 + query: sum by (region, service, job) (sum_over_time(data[5m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[5m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 59 + query: topk by (region, service) (4, sum_over_time(data[1m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 20 + query: topk by (region, service) (4, sum_over_time(data[20m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[20m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region) (quantile_over_time(0.75, data[100s])) + planned_subquery: quantile_over_time(0.75, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region, service) (quantile_over_time(0.95, data[100s])) + planned_subquery: quantile_over_time(0.95, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region, service, job) (quantile_over_time(0.99, data[100s])) + planned_subquery: quantile_over_time(0.99, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/plans.json.gz new file mode 100644 index 00000000..d2bcc0c9 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/streaming_config.yaml new file mode 100644 index 00000000..984fbe74 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 25000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 5000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 5000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 120 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 2000 + windowType: sliding +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 80 + width: 4096 + slideIntervalMs: 60000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 60000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02.json new file mode 100644 index 00000000..3b816263 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-02.json @@ -0,0 +1,361 @@ +{ + "data_facts": { + "backfill_history_ms": 1200000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 50000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-02", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 5000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 5000, + "lookback_ms": 300000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 5000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 5000, + "lookback_ms": 300000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.99)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.99 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 60000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 4, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 60000, + "lookback_ms": 1200000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 60000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 5) * 5 - 300) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 5) * 5 - 300)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 5) * 5 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 5) * 5 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q08-topk-count", + "interval_ms": 5000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, increase(data_total[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 5000, + "k": 4, + "lookback_ms": 300000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 1200 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 60) * 60 - 1200) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 60) * 60 - 1200)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 60) * 60 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 60) * 60 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 60000, + "lookback_ms": 1200000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, rate(data_total[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 60000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 5) * 5 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality", + "interval_ms": 5000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 5000, + "lookback_ms": 300000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, job, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -300, NOW()) AND NOW() GROUP BY region, service, job", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "x5", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/eval_table.json new file mode 100644 index 00000000..a46a691e --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/eval_table.json @@ -0,0 +1,520 @@ +{ + "inputs": { + "workload-03.json": "f31cb884c2d6e9652dc3bd3deb1c6b9b9a5641bf44e77101b84b4e552300aca5" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-03", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 50000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-03/q01-sum-fine/keys/60s", + "lookback_ms": 60000, + "metric": "data" + } + }, + "interval_secs": 1, + "promql": "sum by (region, service, job) (sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-03/q01-sum-fine/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-03/q02-sum-coarse/keys/60s", + "lookback_ms": 60000, + "metric": "data" + } + }, + "interval_secs": 1, + "promql": "sum by (region, service) (sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-03/q02-sum-coarse/keys/60s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + "random/seed=862/workload-03/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/q04-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.9 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.90, data[100s]))", + "rqes": [ + "random/seed=862/workload-03/q04-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/q04-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.9 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.90, data[100s]))", + "rqes": [ + "random/seed=862/workload-03/q04-quantile/values/100s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/topk4_q06-topk-sum/keys/60s", + "k": 4, + "lookback_ms": 60000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region) (4, sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-03/topk4_q06-topk-sum/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/topk4_q07-topk-sum/keys/1200s", + "k": 4, + "lookback_ms": 1200000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 30, + "promql": "topk by (region) (4, sum_over_time(data[20m]))", + "rqes": [ + "random/seed=862/workload-03/topk4_q07-topk-sum/keys/1200s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 150000.0, + "covered_min_N": 150000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-03/q01-sum-fine/keys/60s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 60.0, + "max_N": 150000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 150000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-03/q02-sum-coarse/keys/60s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 60.0, + "max_N": 1500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/q03-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-03/q04-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 7500000.0, + "covered_min_N": 7500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "topk", + "grid_K": 12500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-03/topk4_q06-topk-sum/keys/60s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 4, + "keys_per_window": 12500 + }, + "lookback_secs": 60.0, + "max_N": 7500000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 7500000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 150000000.0, + "covered_min_N": 150000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-03", + "families": [ + { + "family": "topk", + "grid_K": 12500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-03/topk4_q07-topk-sum/keys/1200s", + "instant": false, + "interval_secs": 30, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 4, + "keys_per_window": 12500 + }, + "lookback_secs": 1200.0, + "max_N": 150000000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 150000000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "1200s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/inference_config.yaml new file mode 100644 index 00000000..3e9e32f5 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/inference_config.yaml @@ -0,0 +1,80 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 60 + query: sum by (region, service) (sum_over_time(data[1m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[1m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 60 + query: sum by (region, service, job) (sum_over_time(data[1m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 60 + query: topk by (region) (4, sum_over_time(data[1m])) + planned_subquery: topk by (region) (4, sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 40 + query: topk by (region) (4, sum_over_time(data[20m])) + planned_subquery: topk by (region) (4, sum_over_time(data[20m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region, service) (quantile_over_time(0.95, data[100s])) + planned_subquery: quantile_over_time(0.95, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region, service) (quantile_over_time(0.90, data[100s])) + planned_subquery: quantile_over_time(0.9, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region, service, job) (quantile_over_time(0.90, data[100s])) + planned_subquery: quantile_over_time(0.9, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/plans.json.gz new file mode 100644 index 00000000..0ae2b998 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/streaming_config.yaml new file mode 100644 index 00000000..d1b13eb9 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 20000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 1000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 240 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 1000 + windowType: tumbling +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 160 + width: 4096 + slideIntervalMs: 30000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03.json new file mode 100644 index 00000000..a99c8b3c --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-03.json @@ -0,0 +1,361 @@ +{ + "data_facts": { + "backfill_history_ms": 1200000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 50000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-03", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 1000, + "lookback_ms": 60000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 1000, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 1000, + "lookback_ms": 60000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 1000, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.90)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.90, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.9 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.90)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.90, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.9 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 60000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 4, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q07-topk-sum", + "interval_ms": 30000, + "lookback_ms": 1200000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 1) * 1 - 60) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 1) * 1 - 60)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 1) * 1 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 1) * 1 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 1000, + "lookback_ms": 60000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, increase(data_total[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 1000, + "k": 8, + "lookback_ms": 60000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 1200 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 30) * 30 - 1200) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 30) * 30 - 1200)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 30) * 30 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 30) * 30 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 30000, + "lookback_ms": 1200000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, rate(data_total[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 1) * 1 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality", + "interval_ms": 1000, + "lookback_ms": 60000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 1000, + "lookback_ms": 60000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, job, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -60, NOW()) AND NOW() GROUP BY region, service, job", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "x5", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/eval_table.json new file mode 100644 index 00000000..fd46f62b --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/eval_table.json @@ -0,0 +1,519 @@ +{ + "inputs": { + "workload-04.json": "e7c90d990fbfad54afd2ebb4ec6f0a049bd9bfbd8227bda623b099fb0e7bfa6d" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-04", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 50000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-04/q01-sum-fine/keys/600s", + "lookback_ms": 600000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service, job) (sum_over_time(data[10m]))", + "rqes": [ + "random/seed=862/workload-04/q01-sum-fine/keys/600s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-04/q02-sum-coarse/keys/600s", + "lookback_ms": 600000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service) (sum_over_time(data[10m]))", + "rqes": [ + "random/seed=862/workload-04/q02-sum-coarse/keys/600s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + "random/seed=862/workload-04/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + "random/seed=862/workload-04/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/q05-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + "random/seed=862/workload-04/q05-quantile/values/100s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/topk4_q06-topk-sum/keys/60s", + "k": 4, + "lookback_ms": 60000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 2, + "promql": "topk by (region, service) (4, sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-04/topk4_q06-topk-sum/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/topk4_q07-topk-sum/keys/1200s", + "k": 4, + "lookback_ms": 1200000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 30, + "promql": "topk by (region) (4, sum_over_time(data[20m]))", + "rqes": [ + "random/seed=862/workload-04/topk4_q07-topk-sum/keys/1200s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-04/q01-sum-fine/keys/600s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 600.0, + "max_N": 1500000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "600s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 15000000.0, + "covered_min_N": 15000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-04/q02-sum-coarse/keys/600s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 600.0, + "max_N": 15000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 15000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "600s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/q03-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-04/q05-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-04/topk4_q06-topk-sum/keys/60s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 60.0, + "max_N": 1500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 150000000.0, + "covered_min_N": 150000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-04", + "families": [ + { + "family": "topk", + "grid_K": 12500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-04/topk4_q07-topk-sum/keys/1200s", + "instant": false, + "interval_secs": 30, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 4, + "keys_per_window": 12500 + }, + "lookback_secs": 1200.0, + "max_N": 150000000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 150000000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "1200s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/inference_config.yaml new file mode 100644 index 00000000..ec06c999 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/inference_config.yaml @@ -0,0 +1,77 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 60 + query: sum by (region, service) (sum_over_time(data[10m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[10m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 60 + query: sum by (region, service, job) (sum_over_time(data[10m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[10m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 40 + query: topk by (region) (4, sum_over_time(data[20m])) + planned_subquery: topk by (region) (4, sum_over_time(data[20m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 30 + query: topk by (region, service) (4, sum_over_time(data[1m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region) (quantile_over_time(0.75, data[100s])) + planned_subquery: quantile_over_time(0.75, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region, service) (quantile_over_time(0.75, data[100s])) + planned_subquery: quantile_over_time(0.75, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region) (quantile_over_time(0.95, data[100s])) + planned_subquery: quantile_over_time(0.95, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/plans.json.gz new file mode 100644 index 00000000..65800729 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/streaming_config.yaml new file mode 100644 index 00000000..636436db --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 20000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 10000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 10000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 160 + width: 4096 + slideIntervalMs: 30000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: tumbling +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 120 + width: 1024 + slideIntervalMs: 2000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 2000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04.json new file mode 100644 index 00000000..9f66741e --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-04.json @@ -0,0 +1,357 @@ +{ + "data_facts": { + "backfill_history_ms": 1200000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 50000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-04", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 10000, + "lookback_ms": 600000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 10000, + "lookback_ms": 600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 10000, + "lookback_ms": 600000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 10000, + "lookback_ms": 600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 2000, + "lookback_ms": 60000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 2000, + "k": 4, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q07-topk-sum", + "interval_ms": 30000, + "lookback_ms": 1200000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 10) * 10 - 600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 10) * 10 - 600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 10) * 10 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 10) * 10 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 10000, + "lookback_ms": 600000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, increase(data_total[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 10000, + "k": 4, + "lookback_ms": 600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 1200 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 30) * 30 - 1200) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 30) * 30 - 1200)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 30) * 30 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 30) * 30 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 30000, + "lookback_ms": 1200000, + "output_groups": 4, + "output_series_upper_bound": 32, + "promql": "topk by (region) (8, rate(data_total[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 30000, + "k": 8, + "lookback_ms": 1200000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 10) * 10 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality", + "interval_ms": 10000, + "lookback_ms": 600000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 10000, + "lookback_ms": 600000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, job, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -600, NOW()) AND NOW() GROUP BY region, service, job", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "x5", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/eval_table.json new file mode 100644 index 00000000..0d854a9b --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/eval_table.json @@ -0,0 +1,571 @@ +{ + "inputs": { + "workload-05.json": "e83eefeeb44dfb69e530507221d0fd7cead9f0ce037ceb538dc62f2103da1dce" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-05", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 50000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-05/q01-sum-fine/keys/300s", + "lookback_ms": 300000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service, job) (sum_over_time(data[5m]))", + "rqes": [ + "random/seed=862/workload-05/q01-sum-fine/keys/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-05/q02-sum-coarse/keys/300s", + "lookback_ms": 300000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service) (sum_over_time(data[5m]))", + "rqes": [ + "random/seed=862/workload-05/q02-sum-coarse/keys/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.99 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.99, data[100s]))", + "rqes": [ + "random/seed=862/workload-05/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q04-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.5 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.50, data[100s]))", + "rqes": [ + "random/seed=862/workload-05/q04-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q05-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.9 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.90, data[100s]))", + "rqes": [ + "random/seed=862/workload-05/q05-quantile/values/100s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/topk8_q06-topk-sum/keys/60s", + "k": 8, + "lookback_ms": 60000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region, service) (8, sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-05/topk8_q06-topk-sum/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/topk4_q07-topk-sum/keys/1200s", + "k": 4, + "lookback_ms": 1200000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 60, + "promql": "topk by (region) (4, sum_over_time(data[20m]))", + "rqes": [ + "random/seed=862/workload-05/topk4_q07-topk-sum/keys/1200s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 750000.0, + "covered_min_N": 750000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-05/q01-sum-fine/keys/300s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 750000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 750000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "300s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 7500000.0, + "covered_min_N": 7500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-05/q02-sum-coarse/keys/300s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 7500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 7500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "300s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q03-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q04-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-05/q05-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-05/topk8_q06-topk-sum/keys/60s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 60.0, + "max_N": 1500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q06-topk-sum", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 150000000.0, + "covered_min_N": 150000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-05", + "families": [ + { + "family": "topk", + "grid_K": 12500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-05/topk4_q07-topk-sum/keys/1200s", + "instant": false, + "interval_secs": 60, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 4, + "keys_per_window": 12500 + }, + "lookback_secs": 1200.0, + "max_N": 150000000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 150000000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "1200s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/inference_config.yaml new file mode 100644 index 00000000..f2f5f02f --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/inference_config.yaml @@ -0,0 +1,79 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service) (sum_over_time(data[5m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[5m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service, job) (sum_over_time(data[5m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[5m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 40 + query: topk by (region) (4, sum_over_time(data[20m])) + planned_subquery: topk by (region) (4, sum_over_time(data[20m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 59 + query: topk by (region, service) (8, sum_over_time(data[1m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region, service) (quantile_over_time(0.99, data[100s])) + planned_subquery: quantile_over_time(0.99, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region, service, job) (quantile_over_time(0.50, data[100s])) + planned_subquery: quantile_over_time(0.5, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region) (quantile_over_time(0.90, data[100s])) + planned_subquery: quantile_over_time(0.9, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/plans.json.gz new file mode 100644 index 00000000..72647b05 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/streaming_config.yaml new file mode 100644 index 00000000..4a3b70b1 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 25000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 10000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 10000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 160 + width: 4096 + slideIntervalMs: 30000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: tumbling +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 240 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 2000 + windowType: sliding +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05.json new file mode 100644 index 00000000..9705c2e8 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-05.json @@ -0,0 +1,361 @@ +{ + "data_facts": { + "backfill_history_ms": 1200000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 50000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-05", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 10000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 10000, + "lookback_ms": 300000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 10000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 10000, + "lookback_ms": 300000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.99)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.99, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.99 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.50)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.50, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.5 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.90)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.90, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.9 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 60000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 8, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q07-topk-sum", + "interval_ms": 60000, + "lookback_ms": 1200000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 60000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 10) * 10 - 300) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 10) * 10 - 300)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 10) * 10 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 10) * 10 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 10000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, increase(data_total[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 10000, + "k": 8, + "lookback_ms": 300000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 1200 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 60) * 60 - 1200) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 60) * 60 - 1200)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 60) * 60 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 60) * 60 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 60000, + "lookback_ms": 1200000, + "output_groups": 4, + "output_series_upper_bound": 32, + "promql": "topk by (region) (8, rate(data_total[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 60000, + "k": 8, + "lookback_ms": 1200000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 10) * 10 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality", + "interval_ms": 10000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 10000, + "lookback_ms": 300000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, job, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -300, NOW()) AND NOW() GROUP BY region, service, job", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "x5", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/eval_table.json new file mode 100644 index 00000000..ff0150fa --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/eval_table.json @@ -0,0 +1,523 @@ +{ + "inputs": { + "workload-06.json": "6a0ee3ebc8b01451479c8bcfbcbea49d7c21cc3ebd5e618e55f6a82d859e3133" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-06", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 50000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-06/q01-sum-fine/keys/300s", + "lookback_ms": 300000, + "metric": "data" + } + }, + "interval_secs": 5, + "promql": "sum by (region, service, job) (sum_over_time(data[5m]))", + "rqes": [ + "random/seed=862/workload-06/q01-sum-fine/keys/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-06/q02-sum-coarse/keys/300s", + "lookback_ms": 300000, + "metric": "data" + } + }, + "interval_secs": 5, + "promql": "sum by (region, service) (sum_over_time(data[5m]))", + "rqes": [ + "random/seed=862/workload-06/q02-sum-coarse/keys/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.5 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.50, data[100s]))", + "rqes": [ + "random/seed=862/workload-06/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.5 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.50, data[100s]))", + "rqes": [ + "random/seed=862/workload-06/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/q05-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.9 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.90, data[100s]))", + "rqes": [ + "random/seed=862/workload-06/q05-quantile/values/100s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/topk4_q06-topk-sum/keys/60s", + "k": 4, + "lookback_ms": 60000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 2, + "promql": "topk by (region, service) (4, sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-06/topk4_q06-topk-sum/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/topk8_q07-topk-sum/keys/1200s", + "k": 8, + "lookback_ms": 1200000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 60, + "promql": "topk by (region, service) (8, sum_over_time(data[20m]))", + "rqes": [ + "random/seed=862/workload-06/topk8_q07-topk-sum/keys/1200s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 750000.0, + "covered_min_N": 750000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-06/q01-sum-fine/keys/300s", + "instant": false, + "interval_secs": 5, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 750000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 750000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "300s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 7500000.0, + "covered_min_N": 7500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-06/q02-sum-coarse/keys/300s", + "instant": false, + "interval_secs": 5, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 7500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 7500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "300s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/q03-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-06/q05-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-06/topk4_q06-topk-sum/keys/60s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 60.0, + "max_N": 1500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 30000000.0, + "covered_min_N": 30000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-06", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-06/topk8_q07-topk-sum/keys/1200s", + "instant": false, + "interval_secs": 60, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 1200.0, + "max_N": 30000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 30000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q07-topk-sum", + "range": "1200s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/inference_config.yaml new file mode 100644 index 00000000..d31f2ec0 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/inference_config.yaml @@ -0,0 +1,79 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 60 + query: sum by (region, service) (sum_over_time(data[5m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[5m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 60 + query: sum by (region, service, job) (sum_over_time(data[5m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[5m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 30 + query: topk by (region, service) (4, sum_over_time(data[1m])) + planned_subquery: topk by (region, service) (4, sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 20 + query: topk by (region, service) (8, sum_over_time(data[20m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[20m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region, service, job) (quantile_over_time(0.50, data[100s])) + planned_subquery: quantile_over_time(0.5, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region, service) (quantile_over_time(0.50, data[100s])) + planned_subquery: quantile_over_time(0.5, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region) (quantile_over_time(0.90, data[100s])) + planned_subquery: quantile_over_time(0.9, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/plans.json.gz new file mode 100644 index 00000000..ce910f1e Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/streaming_config.yaml new file mode 100644 index 00000000..38466937 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 20000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 5000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 5000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 120 + width: 1024 + slideIntervalMs: 2000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 2000 + windowType: tumbling +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 160 + width: 4096 + slideIntervalMs: 60000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 60000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06.json new file mode 100644 index 00000000..6c263d1b --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-06.json @@ -0,0 +1,365 @@ +{ + "data_facts": { + "backfill_history_ms": 1200000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 50000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-06", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 5000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 5000, + "lookback_ms": 300000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 5000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 5000, + "lookback_ms": 300000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.50)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.50, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.5 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.50)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.50, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.5 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.90)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.90, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.9 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 2000, + "lookback_ms": 60000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 2000, + "k": 4, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 60000, + "lookback_ms": 1200000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 60000, + "k": 8, + "lookback_ms": 1200000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 5) * 5 - 300) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 5) * 5 - 300)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 5) * 5 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 5) * 5 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 5) * 5 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 5000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, increase(data_total[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 5000, + "k": 8, + "lookback_ms": 300000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 1200 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 60) * 60 - 1200) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 60) * 60 - 1200)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 60) * 60 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 60) * 60 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q09-rate", + "interval_ms": 60000, + "lookback_ms": 1200000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, rate(data_total[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region", + "service" + ], + "id": "q09-rate/rqe", + "interval_ms": 60000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 5) * 5 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 5) * 5, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality", + "interval_ms": 5000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 5000, + "lookback_ms": 300000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, job, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -300, NOW()) AND NOW() GROUP BY region, service, job", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "x5", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/eval_table.json new file mode 100644 index 00000000..3dfbaa0c --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/eval_table.json @@ -0,0 +1,572 @@ +{ + "inputs": { + "workload-07.json": "f859320bd314c45178a1b6443d01dba201ebe1ac8af1b20734a8f5e8ec84fea3" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-07", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 50000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-07/q01-sum-fine/keys/600s", + "lookback_ms": 600000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service, job) (sum_over_time(data[10m]))", + "rqes": [ + "random/seed=862/workload-07/q01-sum-fine/keys/600s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-07/q02-sum-coarse/keys/600s", + "lookback_ms": 600000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service) (sum_over_time(data[10m]))", + "rqes": [ + "random/seed=862/workload-07/q02-sum-coarse/keys/600s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.99 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[100s]))", + "rqes": [ + "random/seed=862/workload-07/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q04-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + "random/seed=862/workload-07/q04-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q05-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.5 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.50, data[100s]))", + "rqes": [ + "random/seed=862/workload-07/q05-quantile/values/100s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/topk4_q06-topk-sum/keys/60s", + "k": 4, + "lookback_ms": 60000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 2, + "promql": "topk by (region) (4, sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-07/topk4_q06-topk-sum/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/topk8_q07-topk-sum/keys/1200s", + "k": 8, + "lookback_ms": 1200000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 60, + "promql": "topk by (region, service) (8, sum_over_time(data[20m]))", + "rqes": [ + "random/seed=862/workload-07/topk8_q07-topk-sum/keys/1200s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-07/q01-sum-fine/keys/600s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 600.0, + "max_N": 1500000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "600s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 15000000.0, + "covered_min_N": 15000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-07/q02-sum-coarse/keys/600s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 600.0, + "max_N": 15000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 15000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "600s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q03-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q04-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-07/q05-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 7500000.0, + "covered_min_N": 7500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "topk", + "grid_K": 12500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-07/topk4_q06-topk-sum/keys/60s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 4, + "keys_per_window": 12500 + }, + "lookback_secs": 60.0, + "max_N": 7500000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 7500000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 30000000.0, + "covered_min_N": 30000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-07", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-07/topk8_q07-topk-sum/keys/1200s", + "instant": false, + "interval_secs": 60, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 1200.0, + "max_N": 30000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 30000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q07-topk-sum", + "range": "1200s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/inference_config.yaml new file mode 100644 index 00000000..7832e815 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/inference_config.yaml @@ -0,0 +1,80 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service) (sum_over_time(data[10m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[10m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service, job) (sum_over_time(data[10m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[10m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 30 + query: topk by (region) (4, sum_over_time(data[1m])) + planned_subquery: topk by (region) (4, sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 20 + query: topk by (region, service) (8, sum_over_time(data[20m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[20m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region, service, job) (quantile_over_time(0.99, data[100s])) + planned_subquery: quantile_over_time(0.99, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region, service, job) (quantile_over_time(0.95, data[100s])) + planned_subquery: quantile_over_time(0.95, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region) (quantile_over_time(0.50, data[100s])) + planned_subquery: quantile_over_time(0.5, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/plans.json.gz new file mode 100644 index 00000000..920b2ec5 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/streaming_config.yaml new file mode 100644 index 00000000..f7150067 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 25000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 20000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 20000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 120 + width: 4096 + slideIntervalMs: 2000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 2000 + windowType: tumbling +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 160 + width: 4096 + slideIntervalMs: 60000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 60000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07.json new file mode 100644 index 00000000..4eb1693d --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-07.json @@ -0,0 +1,359 @@ +{ + "data_facts": { + "backfill_history_ms": 1200000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 50000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-07", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 20000, + "lookback_ms": 600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 20000, + "lookback_ms": 600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.99)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.99, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.99 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.50)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.50, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.5 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q06-topk-sum", + "interval_ms": 2000, + "lookback_ms": 60000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 2000, + "k": 4, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 60000, + "lookback_ms": 1200000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 60000, + "k": 8, + "lookback_ms": 1200000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 20) * 20 - 600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 20) * 20 - 600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 20) * 20 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 20) * 20 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q08-topk-count", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, increase(data_total[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 20000, + "k": 4, + "lookback_ms": 600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 1200 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 60) * 60 - 1200) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 60) * 60 - 1200)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 60) * 60 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 60) * 60 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q09-rate", + "interval_ms": 60000, + "lookback_ms": 1200000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, rate(data_total[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region", + "service" + ], + "id": "q09-rate/rqe", + "interval_ms": 60000, + "k": 8, + "lookback_ms": 1200000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q10-cardinality", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 20000, + "lookback_ms": 600000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -600, NOW()) AND NOW() GROUP BY region", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "x5", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/eval_table.json new file mode 100644 index 00000000..85075a94 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/eval_table.json @@ -0,0 +1,518 @@ +{ + "inputs": { + "workload-08.json": "4a9afa0519f228231a77fd756cbf5dbf7905d172a07feafc74c3df4bdd14a514" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-08", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 50000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-08/q01-sum-fine/keys/300s", + "lookback_ms": 300000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service, job) (sum_over_time(data[5m]))", + "rqes": [ + "random/seed=862/workload-08/q01-sum-fine/keys/300s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-08/q02-sum-coarse/keys/300s", + "lookback_ms": 300000, + "metric": "data" + } + }, + "interval_secs": 10, + "promql": "sum by (region, service) (sum_over_time(data[5m]))", + "rqes": [ + "random/seed=862/workload-08/q02-sum-coarse/keys/300s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + "random/seed=862/workload-08/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/q04-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + "random/seed=862/workload-08/q04-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/q04-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + "random/seed=862/workload-08/q04-quantile/values/100s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/topk4_q06-topk-sum/keys/60s", + "k": 4, + "lookback_ms": 60000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region) (4, sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-08/topk4_q06-topk-sum/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/topk4_q07-topk-sum/keys/1200s", + "k": 4, + "lookback_ms": 1200000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 30, + "promql": "topk by (region) (4, sum_over_time(data[20m]))", + "rqes": [ + "random/seed=862/workload-08/topk4_q07-topk-sum/keys/1200s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 750000.0, + "covered_min_N": 750000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-08/q01-sum-fine/keys/300s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 750000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 750000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "300s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 7500000.0, + "covered_min_N": 7500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-08/q02-sum-coarse/keys/300s", + "instant": false, + "interval_secs": 10, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 300.0, + "max_N": 7500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 7500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "300s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/q03-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-08/q04-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 7500000.0, + "covered_min_N": 7500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "topk", + "grid_K": 12500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-08/topk4_q06-topk-sum/keys/60s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 4, + "keys_per_window": 12500 + }, + "lookback_secs": 60.0, + "max_N": 7500000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 7500000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q06-topk-sum", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 150000000.0, + "covered_min_N": 150000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-08", + "families": [ + { + "family": "topk", + "grid_K": 12500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-08/topk4_q07-topk-sum/keys/1200s", + "instant": false, + "interval_secs": 30, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 4, + "keys_per_window": 12500 + }, + "lookback_secs": 1200.0, + "max_N": 150000000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 150000000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk4_q07-topk-sum", + "range": "1200s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/inference_config.yaml new file mode 100644 index 00000000..76fac1df --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/inference_config.yaml @@ -0,0 +1,78 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service) (sum_over_time(data[5m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[5m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service, job) (sum_over_time(data[5m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[5m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 60 + query: topk by (region) (4, sum_over_time(data[1m])) + planned_subquery: topk by (region) (4, sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 40 + query: topk by (region) (4, sum_over_time(data[20m])) + planned_subquery: topk by (region) (4, sum_over_time(data[20m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region, service) (quantile_over_time(0.75, data[100s])) + planned_subquery: quantile_over_time(0.75, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region, service) (quantile_over_time(0.95, data[100s])) + planned_subquery: quantile_over_time(0.95, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region) (quantile_over_time(0.95, data[100s])) + planned_subquery: quantile_over_time(0.95, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/plans.json.gz new file mode 100644 index 00000000..a699051a Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/streaming_config.yaml new file mode 100644 index 00000000..c1479350 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 20000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 10000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 10000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 240 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 1000 + windowType: tumbling +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 160 + width: 4096 + slideIntervalMs: 30000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08.json new file mode 100644 index 00000000..75133fba --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-08.json @@ -0,0 +1,351 @@ +{ + "data_facts": { + "backfill_history_ms": 1200000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 50000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-08", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 10000, + "lookback_ms": 300000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 10000, + "lookback_ms": 300000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 10000, + "lookback_ms": 300000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 10000, + "lookback_ms": 300000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 60000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 4, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q07-topk-sum", + "interval_ms": 30000, + "lookback_ms": 1200000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, sum_over_time(data[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 10) * 10 - 300) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 10) * 10 - 300)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 10) * 10 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 10) * 10 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 10) * 10 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region", + "grouping": [ + "region" + ], + "id": "q08-topk-count", + "interval_ms": 10000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 32, + "promql": "topk by (region) (8, increase(data_total[5m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 10000, + "k": 8, + "lookback_ms": 300000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 1200 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 30) * 30 - 1200) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 30) * 30 - 1200)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 30) * 30 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 30) * 30 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q09-rate", + "interval_ms": 30000, + "lookback_ms": 1200000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, rate(data_total[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region" + ], + "id": "q09-rate/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 10) * 10 - 300, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 10) * 10, 3) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q10-cardinality", + "interval_ms": 10000, + "lookback_ms": 300000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 10000, + "lookback_ms": 300000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -300, NOW()) AND NOW() GROUP BY region", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "x5", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/eval_table.json new file mode 100644 index 00000000..5689cacc --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/eval_table.json @@ -0,0 +1,525 @@ +{ + "inputs": { + "workload-09.json": "d1955cd40ad27a583d2477126bec28273ac95cb4d8c88a10dafd6b43458cb681" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-09", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 50000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-09/q01-sum-fine/keys/60s", + "lookback_ms": 60000, + "metric": "data" + } + }, + "interval_secs": 2, + "promql": "sum by (region, service, job) (sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-09/q01-sum-fine/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-09/q02-sum-coarse/keys/60s", + "lookback_ms": 60000, + "metric": "data" + } + }, + "interval_secs": 2, + "promql": "sum by (region, service) (sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-09/q02-sum-coarse/keys/60s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + "random/seed=862/workload-09/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service", + "job" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/q04-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service, job) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + "random/seed=862/workload-09/q04-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + "random/seed=862/workload-09/q03-quantile/values/100s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/topk8_q06-topk-sum/keys/60s", + "k": 8, + "lookback_ms": 60000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 1, + "promql": "topk by (region, service) (8, sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-09/topk8_q06-topk-sum/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/topk8_q07-topk-sum/keys/1200s", + "k": 8, + "lookback_ms": 1200000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 30, + "promql": "topk by (region, service) (8, sum_over_time(data[20m]))", + "rqes": [ + "random/seed=862/workload-09/topk8_q07-topk-sum/keys/1200s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 150000.0, + "covered_min_N": 150000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-09/q01-sum-fine/keys/60s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 60.0, + "max_N": 150000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 150000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-09/q02-sum-coarse/keys/60s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 60.0, + "max_N": 1500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/q03-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-09/q04-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-09/topk8_q06-topk-sum/keys/60s", + "instant": false, + "interval_secs": 1, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 60.0, + "max_N": 1500000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q06-topk-sum", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 30000000.0, + "covered_min_N": 30000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-09", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-09/topk8_q07-topk-sum/keys/1200s", + "instant": false, + "interval_secs": 30, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 1200.0, + "max_N": 30000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 30000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q07-topk-sum", + "range": "1200s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/inference_config.yaml new file mode 100644 index 00000000..a21787b7 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/inference_config.yaml @@ -0,0 +1,81 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service) (sum_over_time(data[1m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[1m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service, job) (sum_over_time(data[1m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 59 + query: topk by (region, service) (8, sum_over_time(data[1m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 40 + query: topk by (region, service) (8, sum_over_time(data[20m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[20m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region, service, job) (quantile_over_time(0.75, data[100s])) + planned_subquery: quantile_over_time(0.75, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region, service, job) (quantile_over_time(0.95, data[100s])) + planned_subquery: quantile_over_time(0.95, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + - job + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 81 + query: avg by (region, service) (quantile_over_time(0.75, data[100s])) + planned_subquery: quantile_over_time(0.75, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/plans.json.gz new file mode 100644 index 00000000..6cff5e72 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/streaming_config.yaml new file mode 100644 index 00000000..ca977a18 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 20000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 2000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 2000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 240 + width: 1024 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 2000 + windowType: sliding +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 320 + width: 4096 + slideIntervalMs: 30000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 30000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09.json new file mode 100644 index 00000000..2b8ca993 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-09.json @@ -0,0 +1,365 @@ +{ + "data_facts": { + "backfill_history_ms": 1200000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 50000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-09", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 2000, + "lookback_ms": 60000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 2000, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 2000, + "lookback_ms": 60000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 2000, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.95)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "avg by (region, service, job) (quantile_over_time(0.95, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.95 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q06-topk-sum", + "interval_ms": 1000, + "lookback_ms": 60000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 1000, + "k": 8, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 30000, + "lookback_ms": 1200000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 30000, + "k": 8, + "lookback_ms": 1200000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 2) * 2 - 60) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 2) * 2 - 60)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 2) * 2 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 2) * 2 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region", + "grouping": [ + "region" + ], + "id": "q08-topk-count", + "interval_ms": 2000, + "lookback_ms": 60000, + "output_groups": 4, + "output_series_upper_bound": 16, + "promql": "topk by (region) (4, increase(data_total[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 2000, + "k": 4, + "lookback_ms": 60000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 1200 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 30) * 30 - 1200) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 30) * 30 - 1200)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 30) * 30 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 30) * 30 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 30) * 30 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 30) * 30, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q09-rate", + "interval_ms": 30000, + "lookback_ms": 1200000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, rate(data_total[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region", + "service" + ], + "id": "q09-rate/rqe", + "interval_ms": 30000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 2) * 2 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q10-cardinality", + "interval_ms": 2000, + "lookback_ms": 60000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region", + "service" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 2000, + "lookback_ms": 60000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, service, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -60, NOW()) AND NOW() GROUP BY region, service", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "x5", + "version": 1 +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/eval_table.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/eval_table.json new file mode 100644 index 00000000..aa61925b --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/eval_table.json @@ -0,0 +1,569 @@ +{ + "inputs": { + "workload-10.json": "19abdf76da8cf2c810d0962563c135553bd106cad4c9f6c294d02e59c57eb458" + }, + "plan": "ProjectASAP/ASAPQuery#879", + "schema_version": 1, + "sketch_bench_revision": "a3753f2e3fdbe686db450179b8c018e95f02e17f", + "workloads": [ + { + "dataset": "random/seed=862/workload-10", + "e2e": { + "metrics": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "samples_per_sec_per_series": 10, + "type": "gauge", + "values": { + "dist": { + "pareto": 2.0 + }, + "value": { + "keys": 50000, + "zipf": 1.1 + } + } + } + }, + "queries": [ + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-10/q01-sum-fine/keys/600s", + "lookback_ms": 600000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service, job) (sum_over_time(data[10m]))", + "rqes": [ + "random/seed=862/workload-10/q01-sum-fine/keys/600s" + ] + }, + { + "expr": { + "rqe": { + "capability": "sum", + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-10/q02-sum-coarse/keys/600s", + "lookback_ms": 600000, + "metric": "data" + } + }, + "interval_secs": 20, + "promql": "sum by (region, service) (sum_over_time(data[10m]))", + "rqes": [ + "random/seed=862/workload-10/q02-sum-coarse/keys/600s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region", + "service" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q03-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.99 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region, service) (quantile_over_time(0.99, data[100s]))", + "rqes": [ + "random/seed=862/workload-10/q03-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q04-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + "random/seed=862/workload-10/q04-quantile/values/100s" + ] + }, + { + "expr": { + "agg": "avg", + "by": [ + "region" + ], + "of": { + "rqe": { + "capability": "quantile", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q05-quantile/values/100s", + "lookback_ms": 100000, + "metric": "data", + "phi": 0.9 + } + } + }, + "interval_secs": 1, + "promql": "avg by (region) (quantile_over_time(0.90, data[100s]))", + "rqes": [ + "random/seed=862/workload-10/q05-quantile/values/100s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/topk8_q06-topk-sum/keys/60s", + "k": 8, + "lookback_ms": 60000, + "metric": "data", + "topk_by": [ + "region" + ] + } + }, + "interval_secs": 2, + "promql": "topk by (region) (8, sum_over_time(data[1m]))", + "rqes": [ + "random/seed=862/workload-10/topk8_q06-topk-sum/keys/60s" + ] + }, + { + "expr": { + "rqe": { + "capability": "topk_by_value", + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/topk8_q07-topk-sum/keys/1200s", + "k": 8, + "lookback_ms": 1200000, + "metric": "data", + "topk_by": [ + "region", + "service" + ] + } + }, + "interval_secs": 60, + "promql": "topk by (region, service) (8, sum_over_time(data[20m]))", + "rqes": [ + "random/seed=862/workload-10/topk8_q07-topk-sum/keys/1200s" + ] + } + ] + }, + "rqes": [ + { + "assumptions": [], + "capability": "sum", + "covered_groups": 200, + "covered_max_N": 1500000.0, + "covered_min_N": 1500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service", + "job" + ], + "id": "random/seed=862/workload-10/q01-sum-fine/keys/600s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 200, + "keys_per_window": null + }, + "lookback_secs": 600.0, + "max_N": 1500000.0, + "max_covered_share": 0.005, + "metric": "data", + "min_N": 1500000.0, + "min_covered_share": 0.005, + "queries_per_instance": 1, + "query_id": "q01-sum-fine", + "range": "600s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "sum", + "covered_groups": 20, + "covered_max_N": 15000000.0, + "covered_min_N": 15000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "exact-sum", + "grid_K": null, + "grid_param": null, + "sketch": "exact-sum", + "target": 0.0 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-10/q02-sum-coarse/keys/600s", + "instant": false, + "interval_secs": 20, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": null + }, + "lookback_secs": 600.0, + "max_N": 15000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 15000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "q02-sum-coarse", + "range": "600s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q03-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q03-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q04-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q04-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "quantile", + "covered_groups": 50000, + "covered_max_N": 1000.0, + "covered_min_N": 1000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "kll", + "grid_K": null, + "grid_param": 2.0, + "sketch": "kll-percall", + "target": 0.01 + }, + { + "family": "dd", + "grid_K": null, + "grid_param": 2.0, + "sketch": "dd", + "target": 0.01 + } + ], + "grouping": [ + "region", + "service", + "job", + "label_0" + ], + "id": "random/seed=862/workload-10/q05-quantile/values/100s", + "instant": false, + "interval_secs": 1, + "kind": "values", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 50000, + "keys_per_window": null + }, + "lookback_secs": 100.0, + "max_N": 1000.0, + "max_covered_share": 2e-05, + "metric": "data", + "min_N": 1000.0, + "min_covered_share": 2e-05, + "queries_per_instance": 1, + "query_id": "q05-quantile", + "range": "100s", + "stream": "data/dist" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 4, + "covered_max_N": 7500000.0, + "covered_min_N": 7500000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "topk", + "grid_K": 12500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region" + ], + "id": "random/seed=862/workload-10/topk8_q06-topk-sum/keys/60s", + "instant": false, + "interval_secs": 2, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 4, + "keys_per_window": 12500 + }, + "lookback_secs": 60.0, + "max_N": 7500000.0, + "max_covered_share": 0.25, + "metric": "data", + "min_N": 7500000.0, + "min_covered_share": 0.25, + "queries_per_instance": 1, + "query_id": "topk8_q06-topk-sum", + "range": "60s", + "stream": "data/value" + }, + { + "assumptions": [], + "capability": "topk", + "covered_groups": 20, + "covered_max_N": 30000000.0, + "covered_min_N": 30000000.0, + "covers_share": null, + "dataset": "random/seed=862/workload-10", + "families": [ + { + "family": "topk", + "grid_K": 2500, + "grid_param": 1.1, + "sketch": "cms-heap-topk-fastpath-vector2d", + "target": 0.95 + } + ], + "grouping": [ + "region", + "service" + ], + "id": "random/seed=862/workload-10/topk8_q07-topk-sum/keys/1200s", + "instant": false, + "interval_secs": 60, + "kind": "keys", + "label_set": { + "arrival_rate_per_sec": 500000, + "groups": 20, + "keys_per_window": 2500 + }, + "lookback_secs": 1200.0, + "max_N": 30000000.0, + "max_covered_share": 0.05, + "metric": "data", + "min_N": 30000000.0, + "min_covered_share": 0.05, + "queries_per_instance": 1, + "query_id": "topk8_q07-topk-sum", + "range": "1200s", + "stream": "data/value" + } + ], + "schemas": { + "data": { + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ] + } + } + } + ] +} diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/inference_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/inference_config.yaml new file mode 100644 index 00000000..f9dc1204 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/inference_config.yaml @@ -0,0 +1,77 @@ +cleanup_policy: + name: circular_buffer +metrics: + data: + - job + - label_0 + - region + - service +queries: +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service) (sum_over_time(data[10m])) + planned_subquery: sum by (job, region, service) (sum_over_time(data[10m])) + query_time_aggregations: + - operator: sum + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 2 + num_aggregates_to_retain: 30 + query: sum by (region, service, job) (sum_over_time(data[10m])) + planned_subquery: sum by (region, service, job) (sum_over_time(data[10m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 3 + num_aggregates_to_retain: 30 + query: topk by (region) (8, sum_over_time(data[1m])) + planned_subquery: topk by (region) (8, sum_over_time(data[1m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 4 + num_aggregates_to_retain: 20 + query: topk by (region, service) (8, sum_over_time(data[20m])) + planned_subquery: topk by (region, service) (8, sum_over_time(data[20m])) + query_time_aggregations: [] +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region, service) (quantile_over_time(0.99, data[100s])) + planned_subquery: quantile_over_time(0.99, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + - service + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region) (quantile_over_time(0.75, data[100s])) + planned_subquery: quantile_over_time(0.75, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null +- aggregations: + - aggregation_id: 1 + num_aggregates_to_retain: 76 + query: avg by (region) (quantile_over_time(0.90, data[100s])) + planned_subquery: quantile_over_time(0.9, data[1m40s]) + query_time_aggregations: + - operator: avg + grouping: + mode: by + labels: + - region + parameter: null diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/plans.json.gz b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/plans.json.gz new file mode 100644 index 00000000..9b8e17a4 Binary files /dev/null and b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/plans.json.gz differ diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/streaming_config.yaml b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/streaming_config.yaml new file mode 100644 index 00000000..6f3d2736 --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10-pilot/streaming_config.yaml @@ -0,0 +1,89 @@ +aggregations: +- aggregationId: 1 + aggregationSubType: '' + aggregationType: DDSketch + labels: + aggregated: [] + grouping: + - job + - label_0 + - region + - service + rollup: [] + metric: data + parameters: + alpha: 0.1 + slideIntervalMs: 1000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 25000 + windowType: sliding +- aggregationId: 2 + aggregationSubType: sum + aggregationType: MultipleSum + labels: + aggregated: + - job + - region + - service + grouping: [] + rollup: [] + metric: data + parameters: {} + slideIntervalMs: 20000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 20000 + windowType: tumbling +- aggregationId: 3 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + - service + grouping: + - region + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 240 + width: 4096 + slideIntervalMs: 2000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 2000 + windowType: tumbling +- aggregationId: 4 + aggregationSubType: sum + aggregationType: CountMinSketchWithHeap + labels: + aggregated: + - job + - label_0 + grouping: + - region + - service + rollup: [] + metric: data + parameters: + depth: 3 + heapsize: 160 + width: 4096 + slideIntervalMs: 60000 + spatialFilter: '' + table_name: null + value_column: null + windowSizeMs: 60000 + windowType: tumbling +metrics: + data: + - job + - label_0 + - region + - service diff --git a/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10.json b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10.json new file mode 100644 index 00000000..bf6652ff --- /dev/null +++ b/asap-tools/experiments/datasets/fake_metric/random_workloads/seed-862-x5/workload-10.json @@ -0,0 +1,355 @@ +{ + "data_facts": { + "backfill_history_ms": 1200000, + "events": { + "assignment": "deterministic_rotating_pool_with_cross_leaf_overlap", + "distinct_key": "user_id", + "table": "events", + "time_column": "ts", + "user_id_universe_size": 10000, + "user_ids_per_leaf": 1000 + }, + "feeder_seed": 862, + "metrics": { + "data": { + "kind": "gauge", + "pareto_shape": 2.0, + "value_shape": "rank_scaled_pareto" + }, + "data_total": { + "increment_shape": "rank_scaled_positive_deterministic", + "kind": "counter", + "resets": "none" + } + }, + "scrape_interval_ms": 100, + "series": { + "leaf_count": 50000, + "ranking": { + "exponent": 1.1, + "kind": "deterministic_zipf_like", + "rank_scope": "leaf_series" + } + } + }, + "id": "workload-10", + "labels": [ + { + "cardinality": 4, + "name": "region" + }, + { + "cardinality": 5, + "child_of": "region", + "name": "service" + }, + { + "cardinality": 10, + "child_of": "service", + "name": "job" + }, + { + "cardinality": 250, + "child_of": "job", + "name": "label_0" + } + ], + "queries": [ + { + "clickhouse_sql": "SELECT region, service, job, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job", + "grouping": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 200, + "output_series_upper_bound": 200, + "promql": "sum by (region, service, job) (sum_over_time(data[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service", + "job" + ], + "id": "q01-sum-fine/rqe", + "interval_ms": 20000, + "lookback_ms": 600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q02-sum-coarse", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "sum by (region, service) (sum_over_time(data[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "sum", + "grouping_labels": [ + "region", + "service" + ], + "id": "q02-sum-coarse/rqe", + "interval_ms": 20000, + "lookback_ms": 600000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.99)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q03-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 20, + "output_series_upper_bound": 20, + "promql": "avg by (region, service) (quantile_over_time(0.99, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region", + "service" + ], + "id": "q03-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.99 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.75)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q04-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.75, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q04-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.75 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, avg(value) AS value FROM (SELECT region, service, job, label_0, quantileExactInclusive(0.90)(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 1) * 1 - 100, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 1) * 1, 3) GROUP BY region, service, job, label_0) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q05-quantile", + "interval_ms": 1000, + "lookback_ms": 100000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": "avg by (region) (quantile_over_time(0.90, data[100s]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "quantile", + "grouping_labels": [ + "region" + ], + "id": "q05-quantile/rqe", + "interval_ms": 1000, + "lookback_ms": 100000, + "metric": "data", + "phi": 0.9 + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 2) * 2 - 60, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 2) * 2, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region", + "grouping": [ + "region" + ], + "id": "q06-topk-sum", + "interval_ms": 2000, + "lookback_ms": 60000, + "output_groups": 4, + "output_series_upper_bound": 32, + "promql": "topk by (region) (8, sum_over_time(data[1m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region" + ], + "id": "q06-topk-sum/rqe", + "interval_ms": 2000, + "k": 8, + "lookback_ms": 60000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, sum(value) AS value FROM data WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q07-topk-sum", + "interval_ms": 60000, + "lookback_ms": 1200000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, sum_over_time(data[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_value", + "grouping_labels": [ + "region", + "service" + ], + "id": "q07-topk-sum/rqe", + "interval_ms": 60000, + "k": 8, + "lookback_ms": 1200000, + "metric": "data" + } + ], + "sql": null, + "support": "common-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 20) * 20 - 600) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 20) * 20 - 600)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 20) * 20 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 20) * 20 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 8 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q08-topk-count", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 20, + "output_series_upper_bound": 160, + "promql": "topk by (region, service) (8, increase(data_total[10m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "topk_by_count", + "grouping_labels": [ + "region", + "service" + ], + "id": "q08-topk-count/rqe", + "interval_ms": 20000, + "k": 8, + "lookback_ms": 600000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, service, job, label_0, delta * (sampled + to_start + to_end) / sampled / 1200 AS value FROM (SELECT region, service, job, label_0, last_v - first_v AS delta, first_v, last_t - first_t AS sampled, sampled / (n - 1) AS avg_step, if(first_t - (intDiv({{ end_time }}, 60) * 60 - 1200) >= 1.1 * avg_step, avg_step / 2, first_t - (intDiv({{ end_time }}, 60) * 60 - 1200)) AS to_start_clamped, if(delta > 0 AND first_v >= 0, least(to_start_clamped, sampled * first_v / delta), to_start_clamped) AS to_start, if(intDiv({{ end_time }}, 60) * 60 - last_t >= 1.1 * avg_step, avg_step / 2, intDiv({{ end_time }}, 60) * 60 - last_t) AS to_end FROM (SELECT region, service, job, label_0, argMin(value, ts) AS first_v, argMax(value, ts) AS last_v, toFloat64(min(ts)) AS first_t, toFloat64(max(ts)) AS last_t, count() AS n FROM data_total WHERE ts >= toDateTime64(intDiv({{ end_time }}, 60) * 60 - 1200, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 60) * 60, 3) GROUP BY region, service, job, label_0 HAVING n >= 2)) ORDER BY value DESC, region, service, job, label_0 LIMIT 4 BY region, service", + "grouping": [ + "region", + "service" + ], + "id": "q09-rate", + "interval_ms": 60000, + "lookback_ms": 1200000, + "output_groups": 20, + "output_series_upper_bound": 80, + "promql": "topk by (region, service) (4, rate(data_total[20m]))", + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "rate", + "grouping_labels": [ + "region", + "service" + ], + "id": "q09-rate/rqe", + "interval_ms": 60000, + "k": 4, + "lookback_ms": 1200000, + "metric": "data_total" + } + ], + "sql": null, + "support": "counter-gated-promql" + }, + { + "clickhouse_sql": "SELECT region, uniqExact(user_id) AS value FROM events WHERE ts > toDateTime64(intDiv({{ end_time }}, 20) * 20 - 600, 3) AND ts <= toDateTime64(intDiv({{ end_time }}, 20) * 20, 3) GROUP BY region", + "grouping": [ + "region" + ], + "id": "q10-cardinality", + "interval_ms": 20000, + "lookback_ms": 600000, + "output_groups": 4, + "output_series_upper_bound": 4, + "promql": null, + "rqes": [ + { + "accuracy_sla": 0.95, + "capability": "cardinality", + "grouping_labels": [ + "region" + ], + "id": "q10-cardinality/rqe", + "interval_ms": 20000, + "lookback_ms": 600000, + "metric": "events", + "value": "user_id" + } + ], + "sql": "SELECT region, COUNT(DISTINCT user_id) FROM events WHERE ts BETWEEN DATEADD(s, -600, NOW()) AND NOW() GROUP BY region", + "support": "sql-only" + } + ], + "samples_per_sec_per_series": 10, + "seed": 862, + "variant": "x5", + "version": 1 +} diff --git a/asap-tools/experiments/experiment_utils/services/docker-compose.victoriametrics.yml.j2 b/asap-tools/experiments/experiment_utils/services/docker-compose.victoriametrics.yml.j2 index c47bec7f..735cb6d2 100644 --- a/asap-tools/experiments/experiment_utils/services/docker-compose.victoriametrics.yml.j2 +++ b/asap-tools/experiments/experiment_utils/services/docker-compose.victoriametrics.yml.j2 @@ -2,7 +2,7 @@ version: '3.8' services: vmsingle: - image: victoriametrics/victoria-metrics:latest + image: victoriametrics/victoria-metrics:v1.154.0 container_name: {{ vmsingle_container_name }} user: "{{ user_id }}:{{ group_id }}" network_mode: host @@ -36,7 +36,7 @@ services: restart: "no" vmagent: - image: victoriametrics/vmagent:latest + image: victoriametrics/vmagent:v1.154.0 container_name: {{ vmagent_container_name }} user: "{{ user_id }}:{{ group_id }}" network_mode: host diff --git a/asap-tools/experiments/tests/test_random_workload_artifacts.py b/asap-tools/experiments/tests/test_random_workload_artifacts.py index 9f192828..47ba9ddd 100644 --- a/asap-tools/experiments/tests/test_random_workload_artifacts.py +++ b/asap-tools/experiments/tests/test_random_workload_artifacts.py @@ -35,6 +35,19 @@ CLICKHOUSE = shutil.which("clickhouse") +def all_workloads(): + return [ + w + for variant in workloads.VARIANTS + for w in workloads.generate_workloads(seed=862, variant=variant) + ] + + +def pilot_dir_of(workload): + set_dir = PILOT_DIR.parent.parent / artifacts.workload_set(workload) + return set_dir / f"{workload['id']}-pilot" + + def pilot(): workload = workloads.generate_workloads(seed=862)[0] files = artifacts.pilot_configs(workload, PILOT_DIR) @@ -93,9 +106,9 @@ def test_paced_feeder_table_preserves_all_manifest_data_facts(self): def test_archived_pilot_plans_read_the_manifests_pilot_queries(self): # An archived plan is only valid for the queries it was solved for. - for workload in workloads.generate_workloads(seed=862): - with self.subTest(workload=workload["id"]): - pilot_dir = PILOT_DIR.parent / f"{workload['id']}-pilot" + for workload in all_workloads(): + with self.subTest(workload=workload["id"], variant=workload.get("variant")): + pilot_dir = pilot_dir_of(workload) with open(pilot_dir / "eval_table.json") as f: e2e = json.load(f)["workloads"][0]["e2e"] self.assertEqual( @@ -116,9 +129,9 @@ def test_archived_pilot_plans_read_the_manifests_pilot_queries(self): ) def test_every_workload_renders_its_pilot_configs(self): - for workload in workloads.generate_workloads(seed=862): - with self.subTest(workload=workload["id"]): - pilot_dir = PILOT_DIR.parent / f"{workload['id']}-pilot" + for workload in all_workloads(): + with self.subTest(workload=workload["id"], variant=workload.get("variant")): + pilot_dir = pilot_dir_of(workload) files = artifacts.pilot_configs(workload, pilot_dir) self.assertEqual( sum(path.suffix == ".yaml" for path in files), 4, sorted(files) @@ -209,7 +222,9 @@ def compose(self, name): ): return compose( "config", - overrides=[f"experiment_type=random_workload/workload-01/{name}"], + overrides=[ + f"experiment_type=random_workload/seed-862/workload-01/{name}" + ], ) def test_e2e_and_victoriametrics_configs_validate(self): diff --git a/asap-tools/experiments/tests/test_random_workloads.py b/asap-tools/experiments/tests/test_random_workloads.py index 00a8bc97..953e2c3e 100644 --- a/asap-tools/experiments/tests/test_random_workloads.py +++ b/asap-tools/experiments/tests/test_random_workloads.py @@ -81,6 +81,26 @@ def test_quantiles_cover_a_thousand_samples_per_series(self): self.assertIn("data[100s]", query["promql"]) self.assertEqual(query["interval_ms"], workloads.SECOND_MS) + def test_variants_pair_with_the_base_query_for_query(self): + # A variant stretches one dimension and keeps every random choice, so + # its results compare with the base's query for query. + base = workloads.generate_workloads(seed=862) + for variant, scale, series in (("long", 3, 10_000), ("x5", 1, 50_000)): + for b, v in zip( + base, workloads.generate_workloads(seed=862, variant=variant) + ): + with self.subTest(variant=variant, workload=b["id"]): + self.assertEqual(v["variant"], variant) + self.assertEqual(v["data_facts"]["series"]["leaf_count"], series) + for bq, vq in zip(b["queries"], v["queries"]): + self.assertEqual(vq["lookback_ms"], scale * bq["lookback_ms"]) + bq_rqe, vq_rqe = bq["rqes"][0], vq["rqes"][0] + for key in ("capability", "grouping_labels", "interval_ms"): + self.assertEqual(vq_rqe[key], bq_rqe[key]) + self.assertEqual(vq_rqe.get("phi"), bq_rqe.get("phi")) + self.assertEqual(vq_rqe.get("k"), bq_rqe.get("k")) + self.assertNotIn("variant", base[0]) + def test_manifest_declares_deterministic_feeder_facts(self): facts = workloads.generate_workloads(seed=4)[0]["data_facts"]