From 6bbe6c9a591f379c62c5052d445b59e7aaea2219 Mon Sep 17 00:00:00 2001 From: Jibing-Li <64681310+Jibing-Li@users.noreply.github.com> Date: Wed, 21 Feb 2024 19:15:00 +0800 Subject: [PATCH] [fix](statistics)Release StmtExecutor in AnalysisTask object when sql execution finished to release memory. #31212 --- .../apache/doris/statistics/BaseAnalysisTask.java | 2 ++ .../apache/doris/statistics/OlapAnalysisTask.java | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 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 789ae0b563..6876784350 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 @@ -317,6 +317,8 @@ public abstract class BaseAnalysisTask { 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 a7e2f1f427..5a1d5829c8 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; @@ -183,14 +184,23 @@ public class OlapAnalysisTask extends BaseAnalysisTask { tbl.getName(), col.getName()); return null; } + long startTime = System.currentTimeMillis(); Map 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; } /**