From e670d84b727362258e067fbe4bf4ce49122c32ef Mon Sep 17 00:00:00 2001
From: Mryange <59914473+Mryange@users.noreply.github.com>
Date: Thu, 3 Aug 2023 13:12:32 +0800
Subject: [PATCH] [feature](executor) using max_instance_num to limit
automatically instance (#22521)
---
docs/en/docs/admin-manual/config/fe-config.md | 9 ---------
.../pipeline-execution-engine.md | 1 +
.../docs/admin-manual/config/fe-config.md | 8 --------
.../pipeline-execution-engine.md | 2 +-
.../java/org/apache/doris/common/Config.java | 7 -------
.../java/org/apache/doris/analysis/SetVar.java | 18 +-----------------
.../org/apache/doris/qe/SessionVariable.java | 7 ++++++-
7 files changed, 9 insertions(+), 43 deletions(-)
diff --git a/docs/en/docs/admin-manual/config/fe-config.md b/docs/en/docs/admin-manual/config/fe-config.md
index 0477f43813..a1ed75684c 100644
--- a/docs/en/docs/admin-manual/config/fe-config.md
+++ b/docs/en/docs/admin-manual/config/fe-config.md
@@ -2732,15 +2732,6 @@ MasterOnly: false
Controls whether to enable query hit statistics. The default is false.
-#### `max_instance_num`
-
-
-
-Default: 128
-
-This is used to limit the setting of "parallel_fragment_exec_instance_num".
-"parallel_fragment_exec_instance_num" cannot be set higher than "max_instance_num".
-
#### `div_precision_increment`
diff --git a/docs/en/docs/query-acceleration/pipeline-execution-engine.md b/docs/en/docs/query-acceleration/pipeline-execution-engine.md
index d32ca42217..8d3a2697c1 100644
--- a/docs/en/docs/query-acceleration/pipeline-execution-engine.md
+++ b/docs/en/docs/query-acceleration/pipeline-execution-engine.md
@@ -77,3 +77,4 @@ If the user upgrades from a lower version, the default value will be the paralle
```
set parallel_pipeline_task_num = 0;
```
+You can limit the automatically configured concurrency by setting "max_instance_num."(The default value is 64)
diff --git a/docs/zh-CN/docs/admin-manual/config/fe-config.md b/docs/zh-CN/docs/admin-manual/config/fe-config.md
index d404f2cf4e..8eb3436939 100644
--- a/docs/zh-CN/docs/admin-manual/config/fe-config.md
+++ b/docs/zh-CN/docs/admin-manual/config/fe-config.md
@@ -2724,14 +2724,6 @@ show data (其他用法:HELP SHOW DATA)
这个参数主要用于避免因 external catalog 无法访问、信息过多等原因导致的查询 `information_schema` 超时的问题。
-#### `max_instance_num`
-
-
-
-默认值:128
-
-用于限制parallel_fragment_exec_instance_num的设置,set parallel_fragment_exec_instance_num不能超过max_instance_num
-
#### `enable_query_hit_stats`
diff --git a/docs/zh-CN/docs/query-acceleration/pipeline-execution-engine.md b/docs/zh-CN/docs/query-acceleration/pipeline-execution-engine.md
index 0ce0f65448..3953d9c8d8 100644
--- a/docs/zh-CN/docs/query-acceleration/pipeline-execution-engine.md
+++ b/docs/zh-CN/docs/query-acceleration/pipeline-execution-engine.md
@@ -77,4 +77,4 @@ set enable_pipeline_engine = true;
```
set parallel_pipeline_task_num = 0;
```
-
+可以通过设置max_instance_num来限制自动设置的并发数(默认为64)
diff --git a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
index 730aa08680..11c85db137 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/common/Config.java
@@ -1961,13 +1961,6 @@ public class Config extends ConfigBase {
"Now default set to true, not support create complex type(array/struct/map) nested complex type "
+ "when we create table, only support array type nested array"})
public static boolean disable_nested_complex_type = true;
- /*
- * "max_instance_num" is used to set the maximum concurrency. When the value set
- * by "parallel_fragment_exec_instance_num" is greater than "max_instance_num",
- * an error will be reported.
- */
- @ConfField(mutable = true)
- public static int max_instance_num = 128;
/*
* This variable indicates the number of digits by which to increase the scale
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SetVar.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SetVar.java
index a0d61248a5..6142feec89 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SetVar.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SetVar.java
@@ -19,7 +19,6 @@ package org.apache.doris.analysis;
import org.apache.doris.catalog.Env;
import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.Config;
import org.apache.doris.common.ErrorCode;
import org.apache.doris.common.ErrorReport;
import org.apache.doris.common.UserException;
@@ -179,22 +178,7 @@ public class SetVar {
this.value = new StringLiteral(TimeUtils.checkTimeZoneValidAndStandardize(getResult().getStringValue()));
this.result = (LiteralExpr) this.value;
}
- if (getVariable().equalsIgnoreCase(SessionVariable.PARALLEL_FRAGMENT_EXEC_INSTANCE_NUM)) {
- int instanceNum = Integer.parseInt(getResult().getStringValue());
- if (instanceNum > Config.max_instance_num) {
- ErrorReport.reportAnalysisException(ErrorCode.ERR_WRONG_VALUE_FOR_VAR,
- SessionVariable.PARALLEL_FRAGMENT_EXEC_INSTANCE_NUM,
- instanceNum + "(Should not be set to more than " + Config.max_instance_num + ")");
- }
- }
- if (getVariable().equalsIgnoreCase(SessionVariable.PARALLEL_PIPELINE_TASK_NUM)) {
- int instanceNum = Integer.parseInt(getValue().getStringValue());
- if (instanceNum > Config.max_instance_num) {
- ErrorReport.reportAnalysisException(ErrorCode.ERR_WRONG_VALUE_FOR_VAR,
- SessionVariable.PARALLEL_PIPELINE_TASK_NUM,
- instanceNum + "(Should not be set to more than " + Config.max_instance_num + ")");
- }
- }
+
if (getVariable().equalsIgnoreCase(SessionVariable.EXEC_MEM_LIMIT)) {
this.value = new StringLiteral(Long.toString(ParseUtil.analyzeDataVolumn(getResult().getStringValue())));
this.result = (LiteralExpr) this.value;
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 9e87681d3d..b2b9e9a7a4 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
@@ -106,6 +106,7 @@ public class SessionVariable implements Serializable, Writable {
public static final String ENABLE_BUCKET_SHUFFLE_JOIN = "enable_bucket_shuffle_join";
public static final String PARALLEL_FRAGMENT_EXEC_INSTANCE_NUM = "parallel_fragment_exec_instance_num";
public static final String PARALLEL_PIPELINE_TASK_NUM = "parallel_pipeline_task_num";
+ public static final String MAX_INSTANCE_NUM = "max_instance_num";
public static final String ENABLE_INSERT_STRICT = "enable_insert_strict";
public static final String ENABLE_SPILLING = "enable_spilling";
public static final String ENABLE_EXCHANGE_NODE_PARALLEL_MERGE = "enable_exchange_node_parallel_merge";
@@ -566,6 +567,9 @@ public class SessionVariable implements Serializable, Writable {
@VariableMgr.VarAttr(name = PARALLEL_PIPELINE_TASK_NUM, fuzzy = true)
public int parallelPipelineTaskNum = 0;
+ @VariableMgr.VarAttr(name = MAX_INSTANCE_NUM)
+ public int maxInstanceNum = 64;
+
@VariableMgr.VarAttr(name = ENABLE_INSERT_STRICT, needForward = true)
public boolean enableInsertStrict = true;
@@ -1476,7 +1480,8 @@ public class SessionVariable implements Serializable, Writable {
public int getParallelExecInstanceNum() {
if (enablePipelineEngine && parallelPipelineTaskNum == 0) {
int size = Env.getCurrentSystemInfo().getMinPipelineExecutorSize();
- return (size + 1) / 2;
+ int autoInstance = (size + 1) / 2;
+ return Math.min(autoInstance, maxInstanceNum);
} else if (enablePipelineEngine) {
return parallelPipelineTaskNum;
} else {