Skip to content

Commit d5c37ef

Browse files
luoluoyuyuJackieTien97
authored andcommitted
perf: Optimize TypeManager allocation in StatementAnalyzer (#16870)
(cherry picked from commit 1b2b32b)
1 parent ad448bc commit d5c37ef

File tree

9 files changed

+59
-27
lines changed

9 files changed

+59
-27
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
import org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
123123
import org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
124124
import org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
125+
import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
125126
import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement;
126127
import org.apache.iotdb.db.queryengine.plan.statement.Statement;
127128
import org.apache.iotdb.db.utils.SetThreadName;
@@ -189,9 +190,11 @@ public class Coordinator {
189190
private final List<PlanOptimizer> logicalPlanOptimizers;
190191
private final List<PlanOptimizer> distributionPlanOptimizers;
191192
private final DataNodeLocationSupplierFactory.DataNodeLocationSupplier dataNodeLocationSupplier;
193+
private final TypeManager typeManager;
192194

193195
private Coordinator() {
194196
this.queryExecutionMap = new ConcurrentHashMap<>();
197+
this.typeManager = new InternalTypeManager();
195198
this.executor = getQueryExecutor();
196199
this.writeOperationExecutor = getWriteExecutor();
197200
this.scheduledExecutor = getScheduledExecutor();
@@ -205,13 +208,11 @@ private Coordinator() {
205208
this.statementRewrite = new StatementRewriteFactory().getStatementRewrite();
206209
this.logicalPlanOptimizers =
207210
new LogicalOptimizeFactory(
208-
new PlannerContext(
209-
LocalExecutionPlanner.getInstance().metadata, new InternalTypeManager()))
211+
new PlannerContext(LocalExecutionPlanner.getInstance().metadata, typeManager))
210212
.getPlanOptimizers();
211213
this.distributionPlanOptimizers =
212214
new DistributedOptimizeFactory(
213-
new PlannerContext(
214-
LocalExecutionPlanner.getInstance().metadata, new InternalTypeManager()))
215+
new PlannerContext(LocalExecutionPlanner.getInstance().metadata, typeManager))
215216
.getPlanOptimizers();
216217
this.dataNodeLocationSupplier = DataNodeLocationSupplierFactory.getSupplier();
217218
}
@@ -399,7 +400,8 @@ private IQueryExecution createQueryExecutionForTableModel(
399400
logicalPlanOptimizers,
400401
distributionPlanOptimizers,
401402
AuthorityChecker.getAccessControl(),
402-
dataNodeLocationSupplier);
403+
dataNodeLocationSupplier,
404+
typeManager);
403405
return new QueryExecution(tableModelPlanner, queryContext, executor);
404406
}
405407

@@ -480,7 +482,7 @@ private IQueryExecution createQueryExecutionForTableModel(
480482
executor,
481483
statement.accept(
482484
new TableConfigTaskVisitor(
483-
clientSession, metadata, AuthorityChecker.getAccessControl()),
485+
clientSession, metadata, AuthorityChecker.getAccessControl(), typeManager),
484486
queryContext));
485487
}
486488
if (statement instanceof WrappedInsertStatement) {
@@ -498,7 +500,8 @@ private IQueryExecution createQueryExecutionForTableModel(
498500
logicalPlanOptimizers,
499501
distributionPlanOptimizers,
500502
AuthorityChecker.getAccessControl(),
501-
dataNodeLocationSupplier);
503+
dataNodeLocationSupplier,
504+
typeManager);
502505
return new QueryExecution(tableModelPlanner, queryContext, executor);
503506
}
504507

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TableConfigTaskVisitor.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@
219219
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ViewFieldDefinition;
220220
import org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
221221
import org.apache.iotdb.db.queryengine.plan.relational.type.AuthorRType;
222+
import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
222223
import org.apache.iotdb.db.queryengine.plan.relational.type.TypeNotFoundException;
223224
import org.apache.iotdb.db.queryengine.plan.statement.metadata.DatabaseSchemaStatement;
224225
import org.apache.iotdb.db.queryengine.plan.statement.metadata.RemoveAINodeStatement;
@@ -281,13 +282,17 @@ public class TableConfigTaskVisitor extends AstVisitor<IConfigTask, MPPQueryCont
281282

282283
private final AccessControl accessControl;
283284

285+
private final TypeManager typeManager;
286+
284287
public TableConfigTaskVisitor(
285288
final IClientSession clientSession,
286289
final Metadata metadata,
287-
final AccessControl accessControl) {
290+
final AccessControl accessControl,
291+
final TypeManager typeManager) {
288292
this.clientSession = clientSession;
289293
this.metadata = metadata;
290294
this.accessControl = accessControl;
295+
this.typeManager = typeManager;
291296
}
292297

293298
@Override
@@ -868,7 +873,7 @@ protected IConfigTask visitDeleteDevice(final DeleteDevice node, final MPPQueryC
868873
new Analyzer(
869874
context,
870875
context.getSession(),
871-
new StatementAnalyzerFactory(metadata, null, accessControl),
876+
new StatementAnalyzerFactory(metadata, null, accessControl, typeManager),
872877
Collections.emptyList(),
873878
Collections.emptyMap(),
874879
StatementRewrite.NOOP,

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,6 @@
192192
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WithQuery;
193193
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement;
194194
import org.apache.iotdb.db.queryengine.plan.relational.type.CompatibleResolver;
195-
import org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
196195
import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
197196
import org.apache.iotdb.db.queryengine.plan.statement.component.FillPolicy;
198197
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertBaseStatement;
@@ -307,12 +306,12 @@ public class StatementAnalyzer {
307306

308307
private final SessionInfo sessionContext;
309308

310-
private final TypeManager typeManager = new InternalTypeManager();
311-
312309
private final Metadata metadata;
313310

314311
private final CorrelationSupport correlationSupport;
315312

313+
private final TypeManager typeManager;
314+
316315
public StatementAnalyzer(
317316
StatementAnalyzerFactory statementAnalyzerFactory,
318317
Analysis analysis,
@@ -321,7 +320,8 @@ public StatementAnalyzer(
321320
WarningCollector warningCollector,
322321
SessionInfo sessionContext,
323322
Metadata metadata,
324-
CorrelationSupport correlationSupport) {
323+
CorrelationSupport correlationSupport,
324+
TypeManager typeManager) {
325325
this.statementAnalyzerFactory = statementAnalyzerFactory;
326326
this.analysis = analysis;
327327
this.queryContext = queryContext;
@@ -330,6 +330,7 @@ public StatementAnalyzer(
330330
this.sessionContext = sessionContext;
331331
this.metadata = metadata;
332332
this.correlationSupport = correlationSupport;
333+
this.typeManager = typeManager;
333334
}
334335

335336
public Scope analyze(Node node) {

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzerFactory.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.apache.iotdb.db.queryengine.plan.relational.metadata.Metadata;
2626
import org.apache.iotdb.db.queryengine.plan.relational.security.AccessControl;
2727
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
28+
import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
2829

2930
import static java.util.Objects.requireNonNull;
3031

@@ -33,16 +34,21 @@ public class StatementAnalyzerFactory {
3334
private final Metadata metadata;
3435
private final SqlParser sqlParser;
3536
private final AccessControl accessControl;
37+
private final TypeManager typeManager;
3638

3739
public StatementAnalyzerFactory(
38-
final Metadata metadata, final SqlParser sqlParser, final AccessControl accessControl) {
40+
final Metadata metadata,
41+
final SqlParser sqlParser,
42+
final AccessControl accessControl,
43+
final TypeManager typeManager) {
3944
this.metadata = requireNonNull(metadata, "plannerContext is null");
4045
this.sqlParser = sqlParser;
4146
this.accessControl = requireNonNull(accessControl, "accessControl is null");
47+
this.typeManager = requireNonNull(typeManager, "typeManager is null");
4248
}
4349

4450
public StatementAnalyzerFactory withSpecializedAccessControl(AccessControl accessControl) {
45-
return new StatementAnalyzerFactory(metadata, sqlParser, accessControl);
51+
return new StatementAnalyzerFactory(metadata, sqlParser, accessControl, typeManager);
4652
}
4753

4854
public StatementAnalyzer createStatementAnalyzer(
@@ -59,12 +65,13 @@ public StatementAnalyzer createStatementAnalyzer(
5965
warningCollector,
6066
session,
6167
metadata,
62-
correlationSupport);
68+
correlationSupport,
69+
typeManager);
6370
}
6471

6572
public static StatementAnalyzerFactory createTestingStatementAnalyzerFactory(
66-
Metadata metadata, AccessControl accessControl) {
67-
return new StatementAnalyzerFactory(metadata, new SqlParser(), accessControl);
73+
Metadata metadata, AccessControl accessControl, TypeManager typeManager) {
74+
return new StatementAnalyzerFactory(metadata, new SqlParser(), accessControl, typeManager);
6875
}
6976

7077
public AccessControl getAccessControl() {

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableModelPlanner.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.WrappedInsertStatement;
4848
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
4949
import org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
50+
import org.apache.iotdb.db.queryengine.plan.relational.type.TypeManager;
5051
import org.apache.iotdb.db.queryengine.plan.scheduler.ClusterScheduler;
5152
import org.apache.iotdb.db.queryengine.plan.scheduler.IScheduler;
5253
import org.apache.iotdb.db.queryengine.plan.scheduler.load.LoadTsFileScheduler;
@@ -87,6 +88,8 @@ public class TableModelPlanner implements IPlanner {
8788

8889
private final DataNodeLocationSupplierFactory.DataNodeLocationSupplier dataNodeLocationSupplier;
8990

91+
private final TypeManager typeManager;
92+
9093
public TableModelPlanner(
9194
final Statement statement,
9295
final SqlParser sqlParser,
@@ -100,7 +103,8 @@ public TableModelPlanner(
100103
final List<PlanOptimizer> logicalPlanOptimizers,
101104
final List<PlanOptimizer> distributionPlanOptimizers,
102105
final AccessControl accessControl,
103-
final DataNodeLocationSupplierFactory.DataNodeLocationSupplier dataNodeLocationSupplier) {
106+
final DataNodeLocationSupplierFactory.DataNodeLocationSupplier dataNodeLocationSupplier,
107+
final TypeManager typeManager) {
104108
this.statement = statement;
105109
this.sqlParser = sqlParser;
106110
this.metadata = metadata;
@@ -112,14 +116,15 @@ public TableModelPlanner(
112116
this.distributionPlanOptimizers = distributionPlanOptimizers;
113117
this.accessControl = accessControl;
114118
this.dataNodeLocationSupplier = dataNodeLocationSupplier;
119+
this.typeManager = typeManager;
115120
}
116121

117122
@Override
118123
public IAnalysis analyze(final MPPQueryContext context) {
119124
return new Analyzer(
120125
context,
121126
context.getSession(),
122-
new StatementAnalyzerFactory(metadata, sqlParser, accessControl),
127+
new StatementAnalyzerFactory(metadata, sqlParser, accessControl, typeManager),
123128
Collections.emptyList(),
124129
Collections.emptyMap(),
125130
statementRewrite,

iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AnalyzerTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
7373
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
7474
import org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
75+
import org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
7576
import org.apache.iotdb.db.queryengine.plan.statement.StatementTestUtils;
7677
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertRowStatement;
7778
import org.apache.iotdb.db.queryengine.plan.statement.crud.InsertTabletStatement;
@@ -1261,7 +1262,8 @@ public static Analysis analyzeStatement(
12611262
final SessionInfo session) {
12621263
try {
12631264
final StatementAnalyzerFactory statementAnalyzerFactory =
1264-
new StatementAnalyzerFactory(metadata, sqlParser, nopAccessControl);
1265+
new StatementAnalyzerFactory(
1266+
metadata, sqlParser, nopAccessControl, new InternalTypeManager());
12651267

12661268
Analyzer analyzer =
12671269
new Analyzer(
@@ -1285,7 +1287,8 @@ public static Analysis analyzeStatementWithException(
12851287
final SqlParser sqlParser,
12861288
final SessionInfo session) {
12871289
final StatementAnalyzerFactory statementAnalyzerFactory =
1288-
new StatementAnalyzerFactory(metadata, sqlParser, nopAccessControl);
1290+
new StatementAnalyzerFactory(
1291+
metadata, sqlParser, nopAccessControl, new InternalTypeManager());
12891292
Analyzer analyzer =
12901293
new Analyzer(
12911294
context,

iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/AuthTest.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
3333
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
3434
import org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewrite;
35+
import org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
3536

3637
import org.junit.Test;
3738
import org.mockito.Mockito;
@@ -224,7 +225,8 @@ private void analyzeSQL(
224225
new StatementAnalyzerFactory(
225226
TEST_MATADATA,
226227
sqlParser,
227-
new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()));
228+
new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()),
229+
new InternalTypeManager());
228230
MPPQueryContext context = new MPPQueryContext(sql, QUERY_ID, 0, session, null, null);
229231
Analyzer analyzer =
230232
new Analyzer(
@@ -251,7 +253,8 @@ private void analyzeConfigTask(String sql, String userName, ITableAuthChecker au
251253
new TableConfigTaskVisitor(
252254
Mockito.mock(IClientSession.class),
253255
TEST_MATADATA,
254-
new AccessControlImpl(authChecker, new TreeAccessCheckVisitor())),
256+
new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()),
257+
new InternalTypeManager()),
255258
context);
256259
}
257260

@@ -266,7 +269,8 @@ private void analyzeConfigTask(
266269
new TableConfigTaskVisitor(
267270
clientSession,
268271
TEST_MATADATA,
269-
new AccessControlImpl(authChecker, new TreeAccessCheckVisitor())),
272+
new AccessControlImpl(authChecker, new TreeAccessCheckVisitor()),
273+
new InternalTypeManager()),
270274
context);
271275
}
272276
}

iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/RowPatternRecognitionTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
2424
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
2525
import org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
26+
import org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
2627

2728
import org.junit.Assert;
2829
import org.junit.Test;
@@ -475,7 +476,8 @@ public static void analyzeStatement(
475476
final SqlParser sqlParser,
476477
final SessionInfo session) {
477478
final StatementAnalyzerFactory statementAnalyzerFactory =
478-
new StatementAnalyzerFactory(metadata, sqlParser, nopAccessControl);
479+
new StatementAnalyzerFactory(
480+
metadata, sqlParser, nopAccessControl, new InternalTypeManager());
479481

480482
Analyzer analyzer =
481483
new Analyzer(

iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/planner/PlanTester.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement;
4444
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
4545
import org.apache.iotdb.db.queryengine.plan.relational.sql.rewrite.StatementRewriteFactory;
46+
import org.apache.iotdb.db.queryengine.plan.relational.type.InternalTypeManager;
4647

4748
import com.google.common.collect.ImmutableList;
4849
import org.mockito.Mockito;
@@ -170,7 +171,8 @@ public static Analysis analyzeStatement(
170171
SessionInfo session) {
171172
try {
172173
StatementAnalyzerFactory statementAnalyzerFactory =
173-
new StatementAnalyzerFactory(metadata, sqlParser, new AllowAllAccessControl());
174+
new StatementAnalyzerFactory(
175+
metadata, sqlParser, new AllowAllAccessControl(), new InternalTypeManager());
174176

175177
Analyzer analyzer =
176178
new Analyzer(

0 commit comments

Comments
 (0)