You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ja...@apache.org on 2022/11/08 05:11:45 UTC
[doris] branch master updated: [fix](Nereids) Use simple cost to calculate benefit and avoid unuseless calculation (#14056)
This is an automated email from the ASF dual-hosted git repository.
jakevin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 61d4974ba1 [fix](Nereids) Use simple cost to calculate benefit and avoid unuseless calculation (#14056)
61d4974ba1 is described below
commit 61d4974ba1d5c1affd7e69a31cfc98e693711f32
Author: 谢健 <ji...@gmail.com>
AuthorDate: Tue Nov 8 13:11:38 2022 +0800
[fix](Nereids) Use simple cost to calculate benefit and avoid unuseless calculation (#14056)
In GraphSimplifier, we can use simple cost to calculate the benefit.
And only when the best neighbor of the apply step is the processing edge, we need to update recursively.
---
.../joinreorder/hypergraph/GraphSimplifier.java | 11 +++++------
.../nereids/rules/joinreorder/hypergraph/Node.java | 1 -
.../joinreorder/hypergraph/GraphSimplifierTest.java | 20 ++++++++++----------
3 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/GraphSimplifier.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/GraphSimplifier.java
index 693b0f2044..1bfb0e1a38 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/GraphSimplifier.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/GraphSimplifier.java
@@ -128,7 +128,9 @@ public class GraphSimplifier {
edgeIndex1)) {
continue;
}
- processNeighbors(edgeIndex2, 0, edgeSize);
+ if (bestSimplification.bestNeighbor == edgeIndex1) {
+ processNeighbors(edgeIndex2, 0, edgeSize);
+ }
}
// Go through the neighbors with higher index, we only need to recalculate all related steps
@@ -289,17 +291,14 @@ public class GraphSimplifier {
private LogicalJoin simulateJoin(Plan plan1, LogicalJoin join, Plan plan2) {
// In Graph Simplifier, we use the simple cost model, that is
- // Plan.cost = Plan.rowCount + Plan.children1.cost + ...
+ // Plan.cost = Plan.rowCount + Plan.children1.cost + Plan.children2.cost
// The reason is that this cost model has ASI (adjacent sequence interchange) property.
// TODO: consider network, data distribution cost
- double cost = 0;
LogicalJoin newJoin = new LogicalJoin(join.getJoinType(), plan1, plan2);
List<Group> children = new ArrayList<>();
- cost += getGroup(plan1).getStatistics().getRowCount();
children.add(getGroup(plan1));
- cost += getGroup(plan2).getStatistics().getRowCount();
children.add(getGroup(plan2));
-
+ double cost = getSimpleCost(plan1) + getSimpleCost(plan2);
GroupExpression groupExpression = new GroupExpression(newJoin, children);
Group group = new Group();
group.addGroupExpression(groupExpression);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/Node.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/Node.java
index 8fa93d223f..a2d7696c85 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/Node.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/Node.java
@@ -97,7 +97,6 @@ class Node {
} else {
complexEdges.remove(edge);
}
- assert false : String.format("removed edge %d at %d that does not exists", edge.getIndex(), index);
}
public String getName() {
diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/GraphSimplifierTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/GraphSimplifierTest.java
index d0c71ebfd2..6f599ef763 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/GraphSimplifierTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/joinreorder/hypergraph/GraphSimplifierTest.java
@@ -48,22 +48,22 @@ public class GraphSimplifierTest {
+ " rowCount=40.00\"];\n"
+ " LOGICAL_OLAP_SCAN4 [label=\"LOGICAL_OLAP_SCAN4 \n"
+ " rowCount=50.00\"];\n"
- + "e0 [shape=circle, width=.001, label=\"\"]\n"
- + "LOGICAL_OLAP_SCAN0 -> e0 [arrowhead=none, label=\"0.10\"]\n"
- + "LOGICAL_OLAP_SCAN2 -> e0 [arrowhead=none, label=\"0.10\"]\n"
- + "LOGICAL_OLAP_SCAN3 -> e0 [arrowhead=none, label=\"0.10\"]\n"
- + "LOGICAL_OLAP_SCAN4 -> e0 [arrowhead=none, label=\"0.10\"]\n"
- + "LOGICAL_OLAP_SCAN1 -> e0 [arrowhead=none, label=\"\"]\n"
+ + "LOGICAL_OLAP_SCAN0 -> LOGICAL_OLAP_SCAN1 [label=\"0.10\",arrowhead=none]\n"
+ "e1 [shape=circle, width=.001, label=\"\"]\n"
+ "LOGICAL_OLAP_SCAN0 -> e1 [arrowhead=none, label=\"0.05\"]\n"
- + "LOGICAL_OLAP_SCAN3 -> e1 [arrowhead=none, label=\"0.05\"]\n"
- + "LOGICAL_OLAP_SCAN4 -> e1 [arrowhead=none, label=\"0.05\"]\n"
+ + "LOGICAL_OLAP_SCAN1 -> e1 [arrowhead=none, label=\"0.05\"]\n"
+ "LOGICAL_OLAP_SCAN2 -> e1 [arrowhead=none, label=\"\"]\n"
+ "e2 [shape=circle, width=.001, label=\"\"]\n"
+ "LOGICAL_OLAP_SCAN0 -> e2 [arrowhead=none, label=\"0.03\"]\n"
- + "LOGICAL_OLAP_SCAN4 -> e2 [arrowhead=none, label=\"0.03\"]\n"
+ + "LOGICAL_OLAP_SCAN1 -> e2 [arrowhead=none, label=\"0.03\"]\n"
+ + "LOGICAL_OLAP_SCAN2 -> e2 [arrowhead=none, label=\"0.03\"]\n"
+ "LOGICAL_OLAP_SCAN3 -> e2 [arrowhead=none, label=\"\"]\n"
- + "LOGICAL_OLAP_SCAN0 -> LOGICAL_OLAP_SCAN4 [label=\"0.03\",arrowhead=none]\n"
+ + "e3 [shape=circle, width=.001, label=\"\"]\n"
+ + "LOGICAL_OLAP_SCAN0 -> e3 [arrowhead=none, label=\"0.03\"]\n"
+ + "LOGICAL_OLAP_SCAN1 -> e3 [arrowhead=none, label=\"0.03\"]\n"
+ + "LOGICAL_OLAP_SCAN2 -> e3 [arrowhead=none, label=\"0.03\"]\n"
+ + "LOGICAL_OLAP_SCAN3 -> e3 [arrowhead=none, label=\"0.03\"]\n"
+ + "LOGICAL_OLAP_SCAN4 -> e3 [arrowhead=none, label=\"\"]\n"
+ "}\n";
String dottyGraph = hyperGraph.toDottyHyperGraph();
assert dottyGraph.equals(target) : dottyGraph;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org