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

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


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 1910f2925b7 [fix](statistics)Release StmtExecutor in AnalysisTask 
object when sql execution finished to release memory #31212 (#31233)
1910f2925b7 is described below

commit 1910f2925b7a5e23b70bb9798f447ab3938fd20d
Author: Jibing-Li <[email protected]>
AuthorDate: Wed Feb 21 20:49:34 2024 +0800

    [fix](statistics)Release StmtExecutor in AnalysisTask object when sql 
execution finished to release memory #31212 (#31233)
---
 .../java/org/apache/doris/statistics/BaseAnalysisTask.java | 10 +++++++++-
 .../java/org/apache/doris/statistics/OlapAnalysisTask.java | 14 ++++++++++++--
 2 files changed, 21 insertions(+), 3 deletions(-)

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 62a1365e321..68767843507 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
@@ -22,6 +22,7 @@ import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.DatabaseIf;
 import org.apache.doris.catalog.Env;
 import org.apache.doris.catalog.TableIf;
+import org.apache.doris.common.util.DebugUtil;
 import org.apache.doris.datasource.CatalogIf;
 import org.apache.doris.qe.AutoCloseConnectContext;
 import org.apache.doris.qe.StmtExecutor;
@@ -304,13 +305,20 @@ public abstract class BaseAnalysisTask {
 
     protected void runQuery(String sql) {
         long startTime = System.currentTimeMillis();
+        String queryId = "";
         try (AutoCloseConnectContext a  = 
StatisticsUtil.buildConnectContext()) {
             stmtExecutor = new StmtExecutor(a.connectContext, sql);
             ColStatsData colStatsData = new 
ColStatsData(stmtExecutor.executeInternalQuery().get(0));
             
Env.getCurrentEnv().getStatisticsCache().syncColStats(colStatsData);
+            queryId = DebugUtil.printId(stmtExecutor.getContext().queryId());
             job.appendBuf(this, Collections.singletonList(colStatsData));
         } finally {
-            LOG.debug("End cost time in secs: " + (System.currentTimeMillis() 
- startTime) / 1000);
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("End cost time in millisec: " + 
(System.currentTimeMillis() - startTime)
+                        + " Analyze SQL: " + sql + " QueryId: " + queryId);
+            }
+            // Release the reference to stmtExecutor, reduce memory usage.
+            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 577dac1c6b6..051fe53f5b3 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
@@ -26,6 +26,7 @@ import org.apache.doris.catalog.OlapTable;
 import org.apache.doris.catalog.Partition;
 import org.apache.doris.common.FeConstants;
 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;
@@ -181,14 +182,23 @@ public class OlapAnalysisTask extends BaseAnalysisTask {
                     tbl.getName(), col.getName());
             return null;
         }
+        long startTime = System.currentTimeMillis();
         Map<String, String> params = new HashMap<>();
         params.put("dbName", db.getFullName());
         params.put("colName", StatisticsUtil.escapeColumnName(info.colName));
         params.put("tblName", tbl.getName());
         params.put("index", getIndex());
         StringSubstitutor stringSubstitutor = new StringSubstitutor(params);
-        stmtExecutor = new StmtExecutor(context.connectContext, 
stringSubstitutor.replace(BASIC_STATS_TEMPLATE));
-        return stmtExecutor.executeInternalQuery().get(0);
+        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()));
+        }
+        // Release the reference to stmtExecutor, reduce memory usage.
+        stmtExecutor = null;
+        return resultRow;
     }
 
     /**


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to