This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 1b2b32bc2a3 perf: Optimize TypeManager allocation in StatementAnalyzer
(#16870)
1b2b32bc2a3 is described below
commit 1b2b32bc2a3113a93a8855162b9759ffd547cf0a
Author: Zhenyu Luo <[email protected]>
AuthorDate: Fri Dec 5 12:38:27 2025 +0800
perf: Optimize TypeManager allocation in StatementAnalyzer (#16870)
---
.../apache/iotdb/db/queryengine/plan/Coordinator.java | 17 ++++++++++-------
.../plan/execution/config/TableConfigTaskVisitor.java | 9 +++++++--
.../plan/relational/analyzer/StatementAnalyzer.java | 9 +++++----
.../relational/analyzer/StatementAnalyzerFactory.java | 17 ++++++++++++-----
.../plan/relational/planner/TableModelPlanner.java | 9 +++++++--
.../plan/relational/analyzer/AnalyzerTest.java | 7 +++++--
.../queryengine/plan/relational/analyzer/AuthTest.java | 10 +++++++---
.../relational/analyzer/RowPatternRecognitionTest.java | 4 +++-
.../queryengine/plan/relational/planner/PlanTester.java | 4 +++-
9 files changed, 59 insertions(+), 27 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
index 3a900b4bc12..f10600cbda9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
@@ -122,6 +122,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
import
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
+import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
import org.apache.iotdb.db.utils.SetThreadName;
@@ -189,9 +190,11 @@ public class Coordinator {
private final List<PlanOptimizer> logicalPlanOptimizers;
private final List<PlanOptimizer> distributionPlanOptimizers;
private final DataNodeLocationSupplierFactory.DataNodeLocationSupplier
dataNodeLocationSupplier;
+ private final TypeManager typeManager;
private Coordinator() {
this.queryExecutionMap = new ConcurrentHashMap<>();
+ this.typeManager = new InternalTypeManager();
this.executor = getQueryExecutor();
this.writeOperationExecutor = getWriteExecutor();
this.scheduledExecutor = getScheduledExecutor();
@@ -205,13 +208,11 @@ public class Coordinator {
this.statementRewrite = new
StatementRewriteFactory().getStatementRewrite();
this.logicalPlanOptimizers =
new LogicalOptimizeFactory(
- new PlannerContext(
- LocalExecutionPlanner.getInstance().metadata, new
InternalTypeManager()))
+ new
PlannerContext(LocalExecutionPlanner.getInstance().metadata, typeManager))
.getPlanOptimizers();
this.distributionPlanOptimizers =
new DistributedOptimizeFactory(
- new PlannerContext(
- LocalExecutionPlanner.getInstance().metadata, new
InternalTypeManager()))
+ new
PlannerContext(LocalExecutionPlanner.getInstance().metadata, typeManager))
.getPlanOptimizers();
this.dataNodeLocationSupplier =
DataNodeLocationSupplierFactory.getSupplier();
}
@@ -399,7 +400,8 @@ public class Coordinator {
logicalPlanOptimizers,
distributionPlanOptimizers,
AuthorityChecker.getAccessControl(),
- dataNodeLocationSupplier);
+ dataNodeLocationSupplier,
+ typeManager);
return new QueryExecution(tableModelPlanner, queryContext, executor);
}
@@ -480,7 +482,7 @@ public class Coordinator {
executor,
statement.accept(
new TableConfigTaskVisitor(
- clientSession, metadata,
AuthorityChecker.getAccessControl()),
+ clientSession, metadata,
AuthorityChecker.getAccessControl(), typeManager),
queryContext));
}
if (statement instanceof WrappedInsertStatement) {
@@ -498,7 +500,8 @@ public class Coordinator {
logicalPlanOptimizers,
distributionPlanOptimizers,
AuthorityChecker.getAccessControl(),
- dataNodeLocationSupplier);
+ dataNodeLocationSupplier,
+ typeManager);
return new QueryExecution(tableModelPlanner, queryContext, executor);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
index b7fe3f7eb68..424a5306bf2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java
@@ -219,6 +219,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Use;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ViewFieldDefinition;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
import org.apache.iotdb.db.queryengine.plan.relational.type.AuthorRType;
+import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
import
org.apache.iotdb.db.queryengine.plan.relational.type.TypeNotFoundException;
import
org.apache.iotdb.db.queryengine.plan.statement.metadata.DatabaseSchemaStatement;
import
org.apache.iotdb.db.queryengine.plan.statement.metadata.RemoveAINodeStatement;
@@ -281,13 +282,17 @@ public class TableConfigTaskVisitor extends
AstVisitor<IConfigTask, MPPQueryCont
private final AccessControl accessControl;
+ private final TypeManager typeManager;
+
public TableConfigTaskVisitor(
final IClientSession clientSession,
final Metadata metadata,
- final AccessControl accessControl) {
+ final AccessControl accessControl,
+ final TypeManager typeManager) {
this.clientSession = clientSession;
this.metadata = metadata;
this.accessControl = accessControl;
+ this.typeManager = typeManager;
}
@Override
@@ -868,7 +873,7 @@ public class TableConfigTaskVisitor extends
AstVisitor<IConfigTask, MPPQueryCont
new Analyzer(
context,
context.getSession(),
- new StatementAnalyzerFactory(metadata, null, accessControl),
+ new StatementAnalyzerFactory(metadata, null, accessControl,
typeManager),
Collections.emptyList(),
Collections.emptyMap(),
StatementRewrite.NOOP,
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
index 4941176a89b..c01308f9f37 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java
@@ -192,7 +192,6 @@ import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.With;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WithQuery;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement;
import org.apache.iotdb.db.queryengine.plan.relational.type.CompatibleResolver;
-import
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
import org.apache.iotdb.db.queryengine.plan.statement.component.FillPolicy;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
@@ -306,12 +305,12 @@ public class StatementAnalyzer {
private final SessionInfo sessionContext;
- private final TypeManager typeManager = new InternalTypeManager();
-
private final Metadata metadata;
private final CorrelationSupport correlationSupport;
+ private final TypeManager typeManager;
+
public StatementAnalyzer(
StatementAnalyzerFactory statementAnalyzerFactory,
Analysis analysis,
@@ -320,7 +319,8 @@ public class StatementAnalyzer {
WarningCollector warningCollector,
SessionInfo sessionContext,
Metadata metadata,
- CorrelationSupport correlationSupport) {
+ CorrelationSupport correlationSupport,
+ TypeManager typeManager) {
this.statementAnalyzerFactory = statementAnalyzerFactory;
this.analysis = analysis;
this.queryContext = queryContext;
@@ -329,6 +329,7 @@ public class StatementAnalyzer {
this.sessionContext = sessionContext;
this.metadata = metadata;
this.correlationSupport = correlationSupport;
+ this.typeManager = typeManager;
}
public Scope analyze(Node node) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
index ba63eb40990..53c300f3ce3 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java
@@ -25,6 +25,7 @@ import
org.apache.iotdb.db.queryengine.execution.warnings.WarningCollector;
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
+import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
import static java.util.Objects.requireNonNull;
@@ -33,16 +34,21 @@ public class StatementAnalyzerFactory {
private final Metadata metadata;
private final SqlParser sqlParser;
private final AccessControl accessControl;
+ private final TypeManager typeManager;
public StatementAnalyzerFactory(
- final Metadata metadata, final SqlParser sqlParser, final AccessControl
accessControl) {
+ final Metadata metadata,
+ final SqlParser sqlParser,
+ final AccessControl accessControl,
+ final TypeManager typeManager) {
this.metadata = requireNonNull(metadata, "plannerContext is null");
this.sqlParser = sqlParser;
this.accessControl = requireNonNull(accessControl, "accessControl is
null");
+ this.typeManager = requireNonNull(typeManager, "typeManager is null");
}
public StatementAnalyzerFactory withSpecializedAccessControl(AccessControl
accessControl) {
- return new StatementAnalyzerFactory(metadata, sqlParser, accessControl);
+ return new StatementAnalyzerFactory(metadata, sqlParser, accessControl,
typeManager);
}
public StatementAnalyzer createStatementAnalyzer(
@@ -59,12 +65,13 @@ public class StatementAnalyzerFactory {
warningCollector,
session,
metadata,
- correlationSupport);
+ correlationSupport,
+ typeManager);
}
public static StatementAnalyzerFactory createTestingStatementAnalyzerFactory(
- Metadata metadata, AccessControl accessControl) {
- return new StatementAnalyzerFactory(metadata, new SqlParser(),
accessControl);
+ Metadata metadata, AccessControl accessControl, TypeManager typeManager)
{
+ return new StatementAnalyzerFactory(metadata, new SqlParser(),
accessControl, typeManager);
}
public AccessControl getAccessControl() {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java
index 8d7ce3cebbb..fddff825f0d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java
@@ -47,6 +47,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
+import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
import org.apache.iotdb.db.queryengine.plan.scheduler.ClusterScheduler;
import org.apache.iotdb.db.queryengine.plan.scheduler.IScheduler;
import org.apache.iotdb.db.queryengine.plan.scheduler.load.LoadTsFileScheduler;
@@ -87,6 +88,8 @@ public class TableModelPlanner implements IPlanner {
private final DataNodeLocationSupplierFactory.DataNodeLocationSupplier
dataNodeLocationSupplier;
+ private final TypeManager typeManager;
+
public TableModelPlanner(
final Statement statement,
final SqlParser sqlParser,
@@ -100,7 +103,8 @@ public class TableModelPlanner implements IPlanner {
final List<PlanOptimizer> logicalPlanOptimizers,
final List<PlanOptimizer> distributionPlanOptimizers,
final AccessControl accessControl,
- final DataNodeLocationSupplierFactory.DataNodeLocationSupplier
dataNodeLocationSupplier) {
+ final DataNodeLocationSupplierFactory.DataNodeLocationSupplier
dataNodeLocationSupplier,
+ final TypeManager typeManager) {
this.statement = statement;
this.sqlParser = sqlParser;
this.metadata = metadata;
@@ -112,6 +116,7 @@ public class TableModelPlanner implements IPlanner {
this.distributionPlanOptimizers = distributionPlanOptimizers;
this.accessControl = accessControl;
this.dataNodeLocationSupplier = dataNodeLocationSupplier;
+ this.typeManager = typeManager;
}
@Override
@@ -119,7 +124,7 @@ public class TableModelPlanner implements IPlanner {
return new Analyzer(
context,
context.getSession(),
- new StatementAnalyzerFactory(metadata, sqlParser, accessControl),
+ new StatementAnalyzerFactory(metadata, sqlParser, accessControl,
typeManager),
Collections.emptyList(),
Collections.emptyMap(),
statementRewrite,
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
index de38c52a0c5..b50c7cbd33b 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java
@@ -72,6 +72,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LogicalExpression
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
+import
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
import org.apache.iotdb.db.queryengine.plan.statement.StatementTestUtils;
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
import
org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
@@ -1261,7 +1262,8 @@ public class AnalyzerTest {
final SessionInfo session) {
try {
final StatementAnalyzerFactory statementAnalyzerFactory =
- new StatementAnalyzerFactory(metadata, sqlParser, nopAccessControl);
+ new StatementAnalyzerFactory(
+ metadata, sqlParser, nopAccessControl, new
InternalTypeManager());
Analyzer analyzer =
new Analyzer(
@@ -1285,7 +1287,8 @@ public class AnalyzerTest {
final SqlParser sqlParser,
final SessionInfo session) {
final StatementAnalyzerFactory statementAnalyzerFactory =
- new StatementAnalyzerFactory(metadata, sqlParser, nopAccessControl);
+ new StatementAnalyzerFactory(
+ metadata, sqlParser, nopAccessControl, new InternalTypeManager());
Analyzer analyzer =
new Analyzer(
context,
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java
index 7a2174769a0..631640d5dda 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java
@@ -32,6 +32,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.security.TreeAccessCheckV
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
+import
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
import org.junit.Test;
import org.mockito.Mockito;
@@ -224,7 +225,8 @@ public class AuthTest {
new StatementAnalyzerFactory(
TEST_MATADATA,
sqlParser,
- new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()));
+ new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()),
+ new InternalTypeManager());
MPPQueryContext context = new MPPQueryContext(sql, QUERY_ID, 0, session,
null, null);
Analyzer analyzer =
new Analyzer(
@@ -251,7 +253,8 @@ public class AuthTest {
new TableConfigTaskVisitor(
Mockito.mock(IClientSession.class),
TEST_MATADATA,
- new AccessControlImpl(authChecker, new TreeAccessCheckVisitor())),
+ new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()),
+ new InternalTypeManager()),
context);
}
@@ -266,7 +269,8 @@ public class AuthTest {
new TableConfigTaskVisitor(
clientSession,
TEST_MATADATA,
- new AccessControlImpl(authChecker, new TreeAccessCheckVisitor())),
+ new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()),
+ new InternalTypeManager()),
context);
}
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/RowPatternRecognitionTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/RowPatternRecognitionTest.java
index c96747ff720..ecb8c6fb266 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/RowPatternRecognitionTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/RowPatternRecognitionTest.java
@@ -23,6 +23,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.security.AllowAllAccessCo
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
+import
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
import org.junit.Assert;
import org.junit.Test;
@@ -475,7 +476,8 @@ public class RowPatternRecognitionTest {
final SqlParser sqlParser,
final SessionInfo session) {
final StatementAnalyzerFactory statementAnalyzerFactory =
- new StatementAnalyzerFactory(metadata, sqlParser, nopAccessControl);
+ new StatementAnalyzerFactory(
+ metadata, sqlParser, nopAccessControl, new InternalTypeManager());
Analyzer analyzer =
new Analyzer(
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
index 1d388876b29..a4cef177d81 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java
@@ -43,6 +43,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.security.AllowAllAccessCo
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
import
org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
+import
org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
import com.google.common.collect.ImmutableList;
import org.mockito.Mockito;
@@ -170,7 +171,8 @@ public class PlanTester {
SessionInfo session) {
try {
StatementAnalyzerFactory statementAnalyzerFactory =
- new StatementAnalyzerFactory(metadata, sqlParser, new
AllowAllAccessControl());
+ new StatementAnalyzerFactory(
+ metadata, sqlParser, new AllowAllAccessControl(), new
InternalTypeManager());
Analyzer analyzer =
new Analyzer(