Skip to content

Commit 4cef4f0

Browse files
authored
perf(cubesql): Improve rules loading perf (#9014)
* Add rules loading benchmark * Add separate cheaper error type, without backtrace and input part * Avoid run-time formatting to add : * Avoid calls to replace when strip_prefix + to_string is enough
1 parent b2b9c1a commit 4cef4f0

File tree

3 files changed

+180
-127
lines changed

3 files changed

+180
-127
lines changed

rust/cubesql/cubesql/benches/benchmarks.rs

Lines changed: 75 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -404,58 +404,58 @@ pub fn long_simple_in_str_expr_1k(c: &mut Criterion) {
404404

405405
fn get_long_in_expr() -> String {
406406
r#"
407-
SELECT
408-
"WideCube"."dim1" as "column1",
409-
"WideCube"."dim2" as "column2",
410-
"WideCube"."dim3" as "column3",
411-
"WideCube"."dim4" as "column4",
412-
"WideCube"."dim5" as "column5",
413-
"WideCube"."dim6" as "column6",
414-
"WideCube"."dim7" as "column7",
415-
"WideCube"."dim8" as "column8",
416-
"WideCube"."dim9" as "column9",
417-
"WideCube"."dim10" as "column10",
418-
"WideCube"."dim11" as "column11",
419-
"WideCube"."dim12" as "column12",
420-
"WideCube"."dim13" as "column13",
421-
"WideCube"."dim14" as "column14",
422-
"WideCube"."dim15" as "column15",
423-
SUM("WideCube"."dim16") as "some_sum"
424-
FROM
425-
"WideCube"
426-
WHERE
427-
"WideCube"."dim1" = 1
428-
AND "WideCube"."dim2" = 2
429-
AND "WideCube"."dim3" = 3
430-
AND "WideCube"."dim4" = 4
431-
AND "WideCube"."dim5" = 5
432-
AND "WideCube"."dim6" = 6
433-
AND "WideCube"."dim7" = 7
434-
AND "WideCube"."dim8" = 8
435-
AND "WideCube"."dim9" = 9
436-
AND "WideCube"."dim10" = 10
437-
AND ("WideCube"."dim11" = 42 OR "WideCube"."dim11" IS NULL)
407+
SELECT
408+
"WideCube"."dim1" as "column1",
409+
"WideCube"."dim2" as "column2",
410+
"WideCube"."dim3" as "column3",
411+
"WideCube"."dim4" as "column4",
412+
"WideCube"."dim5" as "column5",
413+
"WideCube"."dim6" as "column6",
414+
"WideCube"."dim7" as "column7",
415+
"WideCube"."dim8" as "column8",
416+
"WideCube"."dim9" as "column9",
417+
"WideCube"."dim10" as "column10",
418+
"WideCube"."dim11" as "column11",
419+
"WideCube"."dim12" as "column12",
420+
"WideCube"."dim13" as "column13",
421+
"WideCube"."dim14" as "column14",
422+
"WideCube"."dim15" as "column15",
423+
SUM("WideCube"."dim16") as "some_sum"
424+
FROM
425+
"WideCube"
426+
WHERE
427+
"WideCube"."dim1" = 1
428+
AND "WideCube"."dim2" = 2
429+
AND "WideCube"."dim3" = 3
430+
AND "WideCube"."dim4" = 4
431+
AND "WideCube"."dim5" = 5
432+
AND "WideCube"."dim6" = 6
433+
AND "WideCube"."dim7" = 7
434+
AND "WideCube"."dim8" = 8
435+
AND "WideCube"."dim9" = 9
436+
AND "WideCube"."dim10" = 10
437+
AND ("WideCube"."dim11" = 42 OR "WideCube"."dim11" IS NULL)
438438
AND (
439439
"WideCube"."dim12" IN (
440-
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
440+
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
441441
27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50
442442
) OR "WideCube"."dim12" IS NULL
443-
) AND "WideCube"."dim20" = 55
444-
GROUP BY
445-
"WideCube"."dim1",
446-
"WideCube"."dim2",
447-
"WideCube"."dim3",
448-
"WideCube"."dim4",
449-
"WideCube"."dim5",
450-
"WideCube"."dim6",
451-
"WideCube"."dim7",
452-
"WideCube"."dim8",
453-
"WideCube"."dim9",
454-
"WideCube"."dim10",
455-
"WideCube"."dim11",
456-
"WideCube"."dim12",
457-
"WideCube"."dim13",
458-
"WideCube"."dim14",
443+
) AND "WideCube"."dim20" = 55
444+
GROUP BY
445+
"WideCube"."dim1",
446+
"WideCube"."dim2",
447+
"WideCube"."dim3",
448+
"WideCube"."dim4",
449+
"WideCube"."dim5",
450+
"WideCube"."dim6",
451+
"WideCube"."dim7",
452+
"WideCube"."dim8",
453+
"WideCube"."dim9",
454+
"WideCube"."dim10",
455+
"WideCube"."dim11",
456+
"WideCube"."dim12",
457+
"WideCube"."dim13",
458+
"WideCube"."dim14",
459459
"WideCube"."dim15"
460460
"#.into()
461461
}
@@ -482,8 +482,8 @@ pub fn tableau_logical_17(c: &mut Criterion) {
482482
fn get_ts_last_day_redshift_query() -> String {
483483
r#"
484484
WITH "qt_0" AS (
485-
SELECT
486-
DATE_TRUNC('month', "ta_1"."order_date") "ca_1",
485+
SELECT
486+
DATE_TRUNC('month', "ta_1"."order_date") "ca_1",
487487
CASE
488488
WHEN sum("ta_1"."sumPrice") IS NOT NULL THEN sum("ta_1"."sumPrice")
489489
ELSE 0
@@ -495,8 +495,8 @@ fn get_ts_last_day_redshift_query() -> String {
495495
)
496496
GROUP BY "ca_1"
497497
)
498-
SELECT
499-
min("ta_2"."ca_1") "ca_3",
498+
SELECT
499+
min("ta_2"."ca_1") "ca_3",
500500
max("ta_2"."ca_1") "ca_4"
501501
FROM "qt_0" "ta_2"
502502
"#
@@ -743,4 +743,26 @@ criterion_group! {
743743
targets = split_query, split_query_count_distinct, wrapped_query, power_bi_wrap, power_bi_sum_wrap, long_in_expr, long_simple_in_number_expr_1k, long_simple_in_str_expr_50, long_simple_in_str_expr_1k, tableau_logical_17,
744744
tableau_bugs_b8888, ts_last_day_redshift, quicksight_1, quicksight_2
745745
}
746-
criterion_main!(benches);
746+
747+
fn simple_rules_loading(c: &mut Criterion) {
748+
let context = Arc::new(
749+
futures::executor::block_on(create_test_postgresql_cube_context(get_test_tenant_ctx()))
750+
.unwrap(),
751+
);
752+
// preload rules at least once
753+
let _rules = rewrite_rules(context.clone());
754+
755+
c.bench_function("simple_rules_loading", |b| {
756+
b.iter(|| {
757+
rewrite_rules(context.clone());
758+
})
759+
});
760+
}
761+
762+
criterion_group! {
763+
name = rules_loading;
764+
config = Criterion::default();
765+
targets = simple_rules_loading
766+
}
767+
768+
criterion_main!(benches, rules_loading);

0 commit comments

Comments
 (0)