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]

Reply via email to