This is an automated email from the ASF dual-hosted git repository.

lijibing pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new 19be696120a [Refactor](statistics)Refactor of statistics 
buildConnectContext. (#41553) (#41814)
19be696120a is described below

commit 19be696120ab1e16df1120717251fadb6a64f030
Author: Jibing-Li <64681310+jibing...@users.noreply.github.com>
AuthorDate: Mon Oct 14 22:09:57 2024 +0800

    [Refactor](statistics)Refactor of statistics buildConnectContext. (#41553) 
(#41814)
    
    backport: https://github.com/apache/doris/pull/41553
---
 .../doris/datasource/jdbc/JdbcExternalTable.java   |   2 +-
 .../java/org/apache/doris/qe/AuditLogHelper.java   |  18 ++-
 .../java/org/apache/doris/qe/ConnectProcessor.java |   2 +-
 .../apache/doris/statistics/BaseAnalysisTask.java  |   3 +-
 .../apache/doris/statistics/OlapAnalysisTask.java  | 140 ++++++++++-----------
 .../doris/statistics/util/StatisticsUtil.java      |   4 +-
 .../doris/statistics/OlapAnalysisTaskTest.java     |   6 +-
 7 files changed, 90 insertions(+), 85 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalTable.java
 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalTable.java
index 07ce183a589..20520d7c542 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalTable.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/JdbcExternalTable.java
@@ -119,7 +119,7 @@ public class JdbcExternalTable extends ExternalTable {
         params.put("tblName", name);
         switch (((JdbcExternalCatalog) catalog).getDatabaseTypeName()) {
             case JdbcResource.MYSQL:
-                try (AutoCloseConnectContext r = 
StatisticsUtil.buildConnectContext()) {
+                try (AutoCloseConnectContext r = 
StatisticsUtil.buildConnectContext(false)) {
                     StringSubstitutor stringSubstitutor = new 
StringSubstitutor(params);
                     String sql = 
stringSubstitutor.replace(MYSQL_ROW_COUNT_SQL);
                     StmtExecutor stmtExecutor = new 
StmtExecutor(r.connectContext, sql);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/AuditLogHelper.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/AuditLogHelper.java
index ed532a83303..4f221fe42d6 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/AuditLogHelper.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/AuditLogHelper.java
@@ -86,18 +86,24 @@ public class AuditLogHelper {
                 .setFuzzyVariables(!printFuzzyVariables ? "" : 
ctx.getSessionVariable().printFuzzyVariables());
 
         if (ctx.getState().isQuery()) {
-            MetricRepo.COUNTER_QUERY_ALL.increase(1L);
-            
MetricRepo.USER_COUNTER_QUERY_ALL.getOrAdd(ctx.getQualifiedUser()).increase(1L);
+            if (!ctx.getSessionVariable().internalSession) {
+                MetricRepo.COUNTER_QUERY_ALL.increase(1L);
+                
MetricRepo.USER_COUNTER_QUERY_ALL.getOrAdd(ctx.getQualifiedUser()).increase(1L);
+            }
             if (ctx.getState().getStateType() == MysqlStateType.ERR
                     && ctx.getState().getErrType() != 
QueryState.ErrType.ANALYSIS_ERR) {
                 // err query
-                MetricRepo.COUNTER_QUERY_ERR.increase(1L);
-                
MetricRepo.USER_COUNTER_QUERY_ERR.getOrAdd(ctx.getQualifiedUser()).increase(1L);
+                if (!ctx.getSessionVariable().internalSession) {
+                    MetricRepo.COUNTER_QUERY_ERR.increase(1L);
+                    
MetricRepo.USER_COUNTER_QUERY_ERR.getOrAdd(ctx.getQualifiedUser()).increase(1L);
+                }
             } else if (ctx.getState().getStateType() == MysqlStateType.OK
                     || ctx.getState().getStateType() == MysqlStateType.EOF) {
                 // ok query
-                MetricRepo.HISTO_QUERY_LATENCY.update(elapseMs);
-                
MetricRepo.USER_HISTO_QUERY_LATENCY.getOrAdd(ctx.getQualifiedUser()).update(elapseMs);
+                if (!ctx.getSessionVariable().internalSession) {
+                    MetricRepo.HISTO_QUERY_LATENCY.update(elapseMs);
+                    
MetricRepo.USER_HISTO_QUERY_LATENCY.getOrAdd(ctx.getQualifiedUser()).update(elapseMs);
+                }
 
                 if (elapseMs > Config.qe_slow_log_ms) {
                     String sqlDigest = DigestUtils.md5Hex(((Queriable) 
parsedStmt).toDigest());
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java
index 3a5b35e00d0..d1538284b22 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java
@@ -222,7 +222,7 @@ public abstract class ConnectProcessor {
     }
 
     public void executeQuery(MysqlCommand mysqlCommand, String originStmt) 
throws Exception {
-        if (MetricRepo.isInit) {
+        if (MetricRepo.isInit && !ctx.getSessionVariable().internalSession) {
             MetricRepo.COUNTER_REQUEST_ALL.increase(1L);
         }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java
index a7aaaf2c037..31fae23284b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/BaseAnalysisTask.java
@@ -290,7 +290,7 @@ public abstract class BaseAnalysisTask {
     protected void runQuery(String sql) {
         long startTime = System.currentTimeMillis();
         String queryId = "";
-        try (AutoCloseConnectContext a  = 
StatisticsUtil.buildConnectContext()) {
+        try (AutoCloseConnectContext a  = 
StatisticsUtil.buildConnectContext(info.jobType.equals(JobType.SYSTEM))) {
             stmtExecutor = new StmtExecutor(a.connectContext, sql);
             ColStatsData colStatsData = new 
ColStatsData(stmtExecutor.executeInternalQuery().get(0));
             // Update index row count after analyze.
@@ -316,5 +316,4 @@ public abstract class BaseAnalysisTask {
             stmtExecutor = null;
         }
     }
-
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
index 5e5d6ac4740..298450b878a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/OlapAnalysisTask.java
@@ -30,7 +30,6 @@ import org.apache.doris.common.Pair;
 import org.apache.doris.common.util.DebugUtil;
 import org.apache.doris.qe.AutoCloseConnectContext;
 import org.apache.doris.qe.StmtExecutor;
-import org.apache.doris.statistics.AnalysisInfo.JobType;
 import org.apache.doris.statistics.util.StatisticsUtil;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -113,75 +112,73 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
         String tabletStr = tabletIds.stream()
                 .map(Object::toString)
                 .collect(Collectors.joining(", "));
-        try (AutoCloseConnectContext r = 
StatisticsUtil.buildConnectContext(info.jobType.equals(JobType.SYSTEM))) {
-            // Get basic stats, including min and max.
-            ResultRow basicStats = collectBasicStat(r);
-            String min = StatisticsUtil.escapeSQL(basicStats != null && 
basicStats.getValues().size() > 0
-                    ? basicStats.get(0) : null);
-            String max = StatisticsUtil.escapeSQL(basicStats != null && 
basicStats.getValues().size() > 1
-                    ? basicStats.get(1) : null);
+        // Get basic stats, including min and max.
+        ResultRow basicStats = collectBasicStat();
+        String min = StatisticsUtil.escapeSQL(basicStats != null && 
basicStats.getValues().size() > 0
+                ? basicStats.get(0) : null);
+        String max = StatisticsUtil.escapeSQL(basicStats != null && 
basicStats.getValues().size() > 1
+                ? basicStats.get(1) : null);
 
-            boolean limitFlag = false;
-            long rowsToSample = pair.second;
-            Map<String, String> params = new HashMap<>();
-            params.put("internalDB", FeConstants.INTERNAL_DB_NAME);
-            params.put("columnStatTbl", StatisticConstants.STATISTIC_TBL_NAME);
-            params.put("catalogId", String.valueOf(catalog.getId()));
-            params.put("catalogName", catalog.getName());
-            params.put("dbId", String.valueOf(db.getId()));
-            params.put("tblId", String.valueOf(tbl.getId()));
-            params.put("idxId", String.valueOf(info.indexId));
-            params.put("colId", 
StatisticsUtil.escapeSQL(String.valueOf(info.colName)));
-            params.put("dataSizeFunction", getDataSizeFunction(col, false));
-            params.put("dbName", db.getFullName());
-            params.put("colName", 
StatisticsUtil.escapeColumnName(String.valueOf(info.colName)));
-            params.put("tblName", String.valueOf(tbl.getName()));
-            params.put("scaleFactor", String.valueOf(scaleFactor));
-            params.put("sampleHints", tabletStr.isEmpty() ? "" : 
String.format("TABLET(%s)", tabletStr));
-            params.put("ndvFunction", 
getNdvFunction(String.valueOf(totalRowCount)));
-            params.put("min", StatisticsUtil.quote(min));
-            params.put("max", StatisticsUtil.quote(max));
-            params.put("rowCount", String.valueOf(totalRowCount));
-            params.put("type", col.getType().toString());
-            params.put("limit", "");
-            params.put("index", getIndex());
-            if (needLimit()) {
-                // If the tablets to be sampled are too large, use limit to 
control the rows to read, and re-calculate
-                // the scaleFactor.
-                rowsToSample = Math.min(getSampleRows(), pair.second);
-                // Empty table doesn't need to limit.
-                if (rowsToSample > 0) {
-                    limitFlag = true;
-                    params.put("limit", "limit " + rowsToSample);
-                    params.put("scaleFactor", String.valueOf(scaleFactor * 
(double) pair.second / rowsToSample));
-                }
+        boolean limitFlag = false;
+        long rowsToSample = pair.second;
+        Map<String, String> params = new HashMap<>();
+        params.put("internalDB", FeConstants.INTERNAL_DB_NAME);
+        params.put("columnStatTbl", StatisticConstants.STATISTIC_TBL_NAME);
+        params.put("catalogId", String.valueOf(catalog.getId()));
+        params.put("catalogName", catalog.getName());
+        params.put("dbId", String.valueOf(db.getId()));
+        params.put("tblId", String.valueOf(tbl.getId()));
+        params.put("idxId", String.valueOf(info.indexId));
+        params.put("colId", 
StatisticsUtil.escapeSQL(String.valueOf(info.colName)));
+        params.put("dataSizeFunction", getDataSizeFunction(col, false));
+        params.put("dbName", db.getFullName());
+        params.put("colName", 
StatisticsUtil.escapeColumnName(String.valueOf(info.colName)));
+        params.put("tblName", String.valueOf(tbl.getName()));
+        params.put("scaleFactor", String.valueOf(scaleFactor));
+        params.put("sampleHints", tabletStr.isEmpty() ? "" : 
String.format("TABLET(%s)", tabletStr));
+        params.put("ndvFunction", 
getNdvFunction(String.valueOf(totalRowCount)));
+        params.put("min", StatisticsUtil.quote(min));
+        params.put("max", StatisticsUtil.quote(max));
+        params.put("rowCount", String.valueOf(totalRowCount));
+        params.put("type", col.getType().toString());
+        params.put("limit", "");
+        params.put("index", getIndex());
+        if (needLimit()) {
+            // If the tablets to be sampled are too large, use limit to 
control the rows to read, and re-calculate
+            // the scaleFactor.
+            rowsToSample = Math.min(getSampleRows(), pair.second);
+            // Empty table doesn't need to limit.
+            if (rowsToSample > 0) {
+                limitFlag = true;
+                params.put("limit", "limit " + rowsToSample);
+                params.put("scaleFactor", String.valueOf(scaleFactor * 
(double) pair.second / rowsToSample));
             }
-            StringSubstitutor stringSubstitutor = new 
StringSubstitutor(params);
-            String sql;
-            if (useLinearAnalyzeTemplate()) {
-                // For single unique key, use count as ndv.
-                if (isSingleUniqueKey()) {
-                    params.put("ndvFunction", String.valueOf(totalRowCount));
-                } else {
-                    params.put("ndvFunction", "ROUND(NDV(`${colName}`) * 
${scaleFactor})");
-                }
-                sql = stringSubstitutor.replace(LINEAR_ANALYZE_TEMPLATE);
+        }
+        StringSubstitutor stringSubstitutor = new StringSubstitutor(params);
+        String sql;
+        if (useLinearAnalyzeTemplate()) {
+            // For single unique key, use count as ndv.
+            if (isSingleUniqueKey()) {
+                params.put("ndvFunction", String.valueOf(totalRowCount));
             } else {
-                params.put("dataSizeFunction", getDataSizeFunction(col, true));
-                params.put("subStringColName", getStringTypeColName(col));
-                sql = stringSubstitutor.replace(DUJ1_ANALYZE_TEMPLATE);
+                params.put("ndvFunction", "ROUND(NDV(`${colName}`) * 
${scaleFactor})");
             }
-            LOG.info("Sample for column [{}]. Total rows [{}], rows to sample 
[{}], scale factor [{}], "
-                    + "limited [{}], distribute column [{}], partition column 
[{}], key column [{}], "
-                    + "is single unique key [{}]",
-                    col.getName(), params.get("rowCount"), rowsToSample, 
params.get("scaleFactor"),
-                    limitFlag, tbl.isDistributionColumn(col.getName()),
-                    tbl.isPartitionColumn(col.getName()), col.isKey(), 
isSingleUniqueKey());
-            runQuery(sql);
+            sql = stringSubstitutor.replace(LINEAR_ANALYZE_TEMPLATE);
+        } else {
+            params.put("dataSizeFunction", getDataSizeFunction(col, true));
+            params.put("subStringColName", getStringTypeColName(col));
+            sql = stringSubstitutor.replace(DUJ1_ANALYZE_TEMPLATE);
         }
+        LOG.info("Sample for column [{}]. Total rows [{}], rows to sample 
[{}], scale factor [{}], "
+                + "limited [{}], distribute column [{}], partition column 
[{}], key column [{}], "
+                + "is single unique key [{}]",
+                col.getName(), params.get("rowCount"), rowsToSample, 
params.get("scaleFactor"),
+                limitFlag, tbl.isDistributionColumn(col.getName()),
+                tbl.isPartitionColumn(col.getName()), col.isKey(), 
isSingleUniqueKey());
+        runQuery(sql);
     }
 
-    protected ResultRow collectBasicStat(AutoCloseConnectContext context) {
+    protected ResultRow collectBasicStat() {
         // Agg table value columns has no zone map.
         // For these columns, skip collecting min and max value to avoid scan 
whole table.
         if (((OlapTable) tbl).getKeysType().equals(KeysType.AGG_KEYS) && 
!col.isKey()) {
@@ -197,14 +194,17 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
         params.put("index", getIndex());
         StringSubstitutor stringSubstitutor = new StringSubstitutor(params);
         String sql = stringSubstitutor.replace(BASIC_STATS_TEMPLATE);
-        stmtExecutor = new StmtExecutor(context.connectContext, sql);
-        ResultRow resultRow = stmtExecutor.executeInternalQuery().get(0);
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Cost time in millisec: " + (System.currentTimeMillis() 
- startTime)
-                    + " Min max SQL: " + sql + " QueryId: " + 
DebugUtil.printId(stmtExecutor.getContext().queryId()));
+        ResultRow resultRow = null;
+        try (AutoCloseConnectContext r = 
StatisticsUtil.buildConnectContext(false)) {
+            stmtExecutor = new StmtExecutor(r.connectContext, sql);
+            resultRow = stmtExecutor.executeInternalQuery().get(0);
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Cost time in millisec: " + 
(System.currentTimeMillis() - startTime) + " Min max SQL: "
+                        + sql + " QueryId: " + 
DebugUtil.printId(stmtExecutor.getContext().queryId()));
+            }
+            // Release the reference to stmtExecutor, reduce memory usage.
+            stmtExecutor = null;
         }
-        // Release the reference to stmtExecutor, reduce memory usage.
-        stmtExecutor = null;
         return resultRow;
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
index dc1dba5d981..25563bf6c39 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java
@@ -142,7 +142,7 @@ public class StatisticsUtil {
 
     public static QueryState execUpdate(String sql) throws Exception {
         StmtExecutor stmtExecutor = null;
-        AutoCloseConnectContext r = StatisticsUtil.buildConnectContext();
+        AutoCloseConnectContext r = StatisticsUtil.buildConnectContext(false);
         try {
             r.connectContext.getSessionVariable().disableNereidsPlannerOnce();
             stmtExecutor = new StmtExecutor(r.connectContext, sql);
@@ -209,7 +209,7 @@ public class StatisticsUtil {
     }
 
     public static void analyze(StatementBase statementBase) throws 
UserException {
-        try (AutoCloseConnectContext r = buildConnectContext()) {
+        try (AutoCloseConnectContext r = buildConnectContext(false)) {
             Analyzer analyzer = new Analyzer(Env.getCurrentEnv(), 
r.connectContext);
             statementBase.analyze(analyzer);
         }
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java
index 5bb0920e433..a7283e351de 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/statistics/OlapAnalysisTaskTest.java
@@ -141,7 +141,7 @@ public class OlapAnalysisTaskTest {
             }
 
             @Mock
-            public ResultRow collectBasicStat(AutoCloseConnectContext context) 
{
+            public ResultRow collectBasicStat() {
                 List<String> values = Lists.newArrayList();
                 values.add("1");
                 values.add("2");
@@ -221,7 +221,7 @@ public class OlapAnalysisTaskTest {
             }
 
             @Mock
-            public ResultRow collectBasicStat(AutoCloseConnectContext context) 
{
+            public ResultRow collectBasicStat() {
                 List<String> values = Lists.newArrayList();
                 values.add("1");
                 values.add("2");
@@ -303,7 +303,7 @@ public class OlapAnalysisTaskTest {
             }
 
             @Mock
-            public ResultRow collectBasicStat(AutoCloseConnectContext context) 
{
+            public ResultRow collectBasicStat() {
                 List<String> values = Lists.newArrayList();
                 values.add("1");
                 values.add("2");


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to