Skip to content

Commit

Permalink
[BugFix] fix feedback when checking if a tuning guide needs to be gen…
Browse files Browse the repository at this point in the history
…erated

Signed-off-by: stephen <stephen5217@163.com>
  • Loading branch information
stephen-shelby committed Dec 4, 2024
1 parent 01c4145 commit a28f2ec
Show file tree
Hide file tree
Showing 5 changed files with 204 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public Void visitPhysicalHashAggregate(OptExpression optExpression, Void context
BlockingAggNode blockingAggNode = findBlockingAggNode(skeletonNode);
if (blockingAggNode != null) {
double blockingOutputRows = blockingAggNode.getNodeExecStats().getPullRows();
if (blockingOutputRows < inputRows && (inputRows / streamingOutputRows) < STREAMING_AGGREGATION_THRESHOLD
if (blockingOutputRows < inputRows && (inputRows / streamingOutputRows) > STREAMING_AGGREGATION_THRESHOLD
&& (inputRows / blockingOutputRows) > AGGREGATION_THRESHOLD) {
tuningGuides.addTuningGuide(skeletonNode.getNodeId(),
new StreamingAggTuningGuide((StreamingAggNode) skeletonNode));
Expand Down
143 changes: 143 additions & 0 deletions test/sql/test_feedback/R/test_agg_feedback
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
-- name: test_agg_feedback
CREATE TABLE `pre_agg_case` (
`c0` int(11) NULL COMMENT "",
`c1` char(50) NULL COMMENT "",
`c2` int(11) NULL COMMENT "",
`c3` int(11) NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`c0`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`c0`) BUCKETS 5
PROPERTIES (
"compression" = "LZ4",
"fast_schema_evolution" = "true",
"replicated_storage" = "true",
"replication_num" = "1"
);
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
-- result:
-- !result
analyze full table pre_agg_case with sync mode;
-- result:
[REGEX].*pre_agg_case analyze status OK
-- !result
set enable_plan_advisor=true;
-- result:
-- !result
set enable_plan_analyzer=true;
-- result:
-- !result
set enable_global_runtime_filter = false;
-- result:
-- !result
function: assert_explain_not_contains("select count(*) from pre_agg_case group by c3", "StreamingAggTuningGuide")
-- result:
None
-- !result
add into plan advisor select count(*) from pre_agg_case group by c3;
-- result:
[REGEX]Add query into plan advisor in FE
-- !result
function: assert_explain_contains("select count(*) from pre_agg_case group by c3", "StreamingAggTuningGuide")
-- result:
None
-- !result
clear plan advisor;
-- result:
[REGEX]Clear all plan advisor in FE
-- !result
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-- name: test_feedback
-- name: test_join_feedback
CREATE TABLE `c1_skew` (
`c0` int(11) NULL COMMENT "",
`c1` char(50) NULL COMMENT "",
Expand Down Expand Up @@ -53,10 +53,6 @@ function: assert_explain_contains("select count(*) from (select * from c1_skew t
-- result:
None
-- !result
function: assert_trace_values_contains("select count(*) from (select * from c1_skew t1 join (select * from c1_skew where c1 = 'f') t2 on t1.c2 = t2.c2) t", "RightChildEstimationErrorTuningGuide")
-- result:
None
-- !result
clear plan advisor;
-- result:
[REGEX]Clear all plan advisor in FE.*
Expand Down
58 changes: 58 additions & 0 deletions test/sql/test_feedback/T/test_agg_feedback
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
-- name: test_agg_feedback
CREATE TABLE `pre_agg_case` (
`c0` int(11) NULL COMMENT "",
`c1` char(50) NULL COMMENT "",
`c2` int(11) NULL COMMENT "",
`c3` int(11) NULL COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(`c0`)
COMMENT "OLAP"
DISTRIBUTED BY HASH(`c0`) BUCKETS 5
PROPERTIES (
"compression" = "LZ4",
"fast_schema_evolution" = "true",
"replicated_storage" = "true",
"replication_num" = "1"
);

insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));
insert into pre_agg_case select generate_series, generate_series, generate_series, generate_series from TABLE(generate_series(1, 50));

analyze full table pre_agg_case with sync mode;
set enable_plan_advisor=true;
set enable_plan_analyzer=true;
set enable_global_runtime_filter = false;
function: assert_explain_not_contains("select count(*) from pre_agg_case group by c3", "StreamingAggTuningGuide")
add into plan advisor select count(*) from pre_agg_case group by c3;
function: assert_explain_contains("select count(*) from pre_agg_case group by c3", "StreamingAggTuningGuide")
clear plan advisor;
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-- name: test_feedback
-- name: test_join_feedback
CREATE TABLE `c1_skew` (
`c0` int(11) NULL COMMENT "",
`c1` char(50) NULL COMMENT "",
Expand Down Expand Up @@ -26,6 +26,4 @@ set enable_global_runtime_filter = false;
function: assert_explain_not_contains("select count(*) from (select * from c1_skew t1 join (select * from c1_skew where c1 = 'f') t2 on t1.c2 = t2.c2) t", "RightChildEstimationErrorTuningGuide")
add into plan advisor select count(*) from (select * from c1_skew t1 join (select * from c1_skew where c1 = 'f') t2 on t1.c2 = t2.c2) t;
function: assert_explain_contains("select count(*) from (select * from c1_skew t1 join (select * from c1_skew where c1 = 'f') t2 on t1.c2 = t2.c2) t", "RightChildEstimationErrorTuningGuide")
function: assert_trace_values_contains("select count(*) from (select * from c1_skew t1 join (select * from c1_skew where c1 = 'f') t2 on t1.c2 = t2.c2) t", "RightChildEstimationErrorTuningGuide")

clear plan advisor;

0 comments on commit a28f2ec

Please sign in to comment.