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 (StarRocks#53513)

Signed-off-by: stephen <stephen5217@163.com>
  • Loading branch information
stephen-shelby authored Dec 5, 2024
1 parent 06d7135 commit f8a9af9
Show file tree
Hide file tree
Showing 6 changed files with 205 additions and 5 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
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ void testStreamingAnalyzer() throws Exception {
ExecPlan execPlan = getExecPlan(sql);
OptExpression root = execPlan.getPhysicalPlan();

NodeExecStats localAgg = new NodeExecStats(1, 3000000000L, 2000000000L, 0, 0, 0);
NodeExecStats localAgg = new NodeExecStats(1, 3000000000L, 2000000L, 0, 0, 0);
NodeExecStats globalAgg = new NodeExecStats(3, 500000, 7, 0, 0, 0);
Map<Integer, NodeExecStats> map = Maps.newHashMap();
map.put(1, localAgg);
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
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 @@ -27,5 +27,4 @@ function: assert_explain_not_contains("select count(*) from (select * from c1_sk
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 f8a9af9

Please sign in to comment.