This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit cb5a94d4fca7aba9665dcaa89bc2c5f6cdd40546 Author: Mingyu Chen <[email protected]> AuthorDate: Sat Apr 20 00:44:24 2024 +0800 [opt](coord) use single instance only with small limit (#33888) --- .../src/main/java/org/apache/doris/planner/ScanNode.java | 5 +++-- fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java | 4 ++-- .../src/main/java/org/apache/doris/qe/SessionVariable.java | 11 ++++++++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java index f92b44ccf4b..ea20916e482 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java @@ -740,7 +740,8 @@ public abstract class ScanNode extends PlanNode { return Integer.MAX_VALUE; } - public boolean shouldUseOneInstance() { - return hasLimit() && conjuncts.isEmpty(); + public boolean shouldUseOneInstance(ConnectContext ctx) { + long limitRowsForSingleInstance = ctx == null ? 10000 : ctx.getSessionVariable().limitRowsForSingleInstance; + return hasLimit() && getLimit() < limitRowsForSingleInstance && conjuncts.isEmpty(); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java index 87873d35640..49fa87e9ac9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java @@ -2077,7 +2077,7 @@ public class Coordinator implements CoordInterface { expectedInstanceNum = Math.max(expectedInstanceNum, 1); // if have limit and no conjuncts, only need 1 instance to save cpu and // mem resource - if (node.get().shouldUseOneInstance()) { + if (node.get().shouldUseOneInstance(context)) { expectedInstanceNum = 1; } @@ -2090,7 +2090,7 @@ public class Coordinator implements CoordInterface { } // if have limit and no conjuncts, only need 1 instance to save cpu and // mem resource - if (node.get().shouldUseOneInstance()) { + if (node.get().shouldUseOneInstance(context)) { expectedInstanceNum = 1; } 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 6c71f621860..ddb530cf4d2 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 @@ -547,6 +547,8 @@ public class SessionVariable implements Serializable, Writable { public static final String ENABLE_STATS = "enable_stats"; + public static final String LIMIT_ROWS_FOR_SINGLE_INSTANCE = "limit_rows_for_single_instance"; + // CLOUD_VARIABLES_BEGIN public static final String CLOUD_CLUSTER = "cloud_cluster"; public static final String DISABLE_EMPTY_PARTITION_PRUNE = "disable_empty_partition_prune"; @@ -1074,7 +1076,6 @@ public class SessionVariable implements Serializable, Writable { this.maxJoinNumberOfReorder = maxJoinNumberOfReorder; } - @VariableMgr.VarAttr(name = MAX_JOIN_NUMBER_BUSHY_TREE) private int maxJoinNumBushyTree = 8; @@ -1117,6 +1118,14 @@ public class SessionVariable implements Serializable, Writable { @VariableMgr.VarAttr(name = NTH_OPTIMIZED_PLAN) private int nthOptimizedPlan = 1; + @VariableMgr.VarAttr(name = LIMIT_ROWS_FOR_SINGLE_INSTANCE, + description = {"当一个 ScanNode 上没有过滤条件,且 limit 值小于这个阈值时," + + "系统会将这个算子的并发度调整为1,以减少简单查询的扇出", + "When a ScanNode has no filter conditions and the limit value is less than this threshold, " + + "the system will adjust the concurrency of this operator to 1 " + + "to reduce the fan-out of simple queries"}) + public long limitRowsForSingleInstance = 10000; + public boolean isEnableLeftZigZag() { return enableLeftZigZag; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
