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 2a13d15d20 [feature](Nereids): disable join order when the join number
> 63 (#22708)
2a13d15d20 is described below
commit 2a13d15d20bd6b21266f2cad40fe0da14859b87a
Author: 谢健 <[email protected]>
AuthorDate: Wed Aug 9 17:09:38 2023 +0800
[feature](Nereids): disable join order when the join number > 63 (#22708)
---
.../apache/doris/nereids/jobs/executor/Optimizer.java | 4 +++-
.../java/org/apache/doris/qe/SessionVariable.java | 14 ++++++++++++++
.../doris/nereids/sqltest/JoinOrderJobTest.java | 19 +++++++++++++++++++
3 files changed, 36 insertions(+), 1 deletion(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Optimizer.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Optimizer.java
index a1c46cc3b1..b2bd5e63ec 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Optimizer.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Optimizer.java
@@ -56,7 +56,9 @@ public class Optimizer {
|| maxJoinCount >
getSessionVariable().getMaxTableCountUseCascadesJoinReorder();
cascadesContext.getStatementContext().setDpHyp(isDpHyp);
cascadesContext.getStatementContext().setOtherJoinReorder(false);
- if (!getSessionVariable().isDisableJoinReorder() && isDpHyp) {
+ if (!getSessionVariable().isDisableJoinReorder() && isDpHyp
+ && maxJoinCount <=
getSessionVariable().getMaxJoinNumberOfReorder()) {
+ //RightNow, dphyper can only order 64 join operators
dpHypOptimize();
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
index f4b40c036b..2d0b7737b3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java
@@ -175,6 +175,8 @@ public class SessionVariable implements Serializable,
Writable {
// turn off all automatic join reorder algorithms
public static final String DISABLE_JOIN_REORDER = "disable_join_reorder";
+ public static final String MAX_JOIN_NUMBER_OF_REORDER =
"max_join_number_of_reorder";
+
public static final String ENABLE_NEREIDS_DML = "enable_nereids_dml";
public static final String ENABLE_STRICT_CONSISTENCY_DML =
"enable_strict_consistency_dml";
@@ -745,6 +747,9 @@ public class SessionVariable implements Serializable,
Writable {
@VariableMgr.VarAttr(name = DISABLE_JOIN_REORDER)
private boolean disableJoinReorder = false;
+ @VariableMgr.VarAttr(name = MAX_JOIN_NUMBER_OF_REORDER)
+ private int maxJoinNumberOfReorder = 63;
+
@VariableMgr.VarAttr(name = ENABLE_BUSHY_TREE, needForward = true)
private boolean enableBushyTree = false;
@@ -756,6 +761,15 @@ public class SessionVariable implements Serializable,
Writable {
this.maxJoinNumBushyTree = maxJoinNumBushyTree;
}
+ public int getMaxJoinNumberOfReorder() {
+ return maxJoinNumberOfReorder;
+ }
+
+ public void setMaxJoinNumberOfReorder(int maxJoinNumberOfReorder) {
+ this.maxJoinNumberOfReorder = maxJoinNumberOfReorder;
+ }
+
+
@VariableMgr.VarAttr(name = MAX_JOIN_NUMBER_BUSHY_TREE)
private int maxJoinNumBushyTree = 5;
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/sqltest/JoinOrderJobTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/sqltest/JoinOrderJobTest.java
index 66f747aae8..259fb24ece 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/sqltest/JoinOrderJobTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/sqltest/JoinOrderJobTest.java
@@ -17,7 +17,12 @@
package org.apache.doris.nereids.sqltest;
+import org.apache.doris.nereids.CascadesContext;
import org.apache.doris.nereids.memo.Memo;
+import org.apache.doris.nereids.trees.plans.Plan;
+import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
+import org.apache.doris.nereids.util.HyperGraphBuilder;
+import org.apache.doris.nereids.util.MemoTestUtils;
import org.apache.doris.nereids.util.PlanChecker;
import org.junit.jupiter.api.Assertions;
@@ -122,4 +127,18 @@ public class JoinOrderJobTest extends SqlTestBase {
.getMemo();
Assertions.assertEquals(memo.countMaxContinuousJoin(), 2);
}
+
+ @Test
+ protected void test64TableJoin() {
+ HyperGraphBuilder hyperGraphBuilder = new HyperGraphBuilder();
+ Plan plan = hyperGraphBuilder
+ .randomBuildPlanWith(65, 65);
+ plan = new LogicalProject(plan.getOutput(), plan);
+ CascadesContext cascadesContext =
MemoTestUtils.createCascadesContext(connectContext, plan);
+
Assertions.assertEquals(cascadesContext.getMemo().countMaxContinuousJoin(), 64);
+ hyperGraphBuilder.initStats(cascadesContext);
+ PlanChecker.from(cascadesContext)
+ .optimize()
+ .getBestPlanTree();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]