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 34228a91cb9 Fix some query metric
34228a91cb9 is described below

commit 34228a91cb93dceb8131f6de67eca1eb44f22e03
Author: Jackie Tien <[email protected]>
AuthorDate: Sun Nov 24 15:05:46 2024 +0800

    Fix some query metric
---
 .../execution/operator/source/SeriesScanUtil.java  |  6 +-
 .../metric/SeriesScanCostMetricSet.java            | 22 +++----
 .../plan/planner/TableOperatorGenerator.java       | 75 ++++++++++++++++------
 .../plan/relational/sql/parser/SqlParser.java      |  8 +++
 .../iotdb/db/storageengine/buffer/ChunkCache.java  |  8 ++-
 5 files changed, 83 insertions(+), 36 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
index 15fe07161a6..c46f1e9ca5b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
@@ -49,6 +49,7 @@ import org.apache.tsfile.read.filter.basic.Filter;
 import org.apache.tsfile.read.reader.IPageReader;
 import org.apache.tsfile.read.reader.IPointReader;
 import org.apache.tsfile.read.reader.page.AlignedPageReader;
+import org.apache.tsfile.read.reader.page.TablePageReader;
 import org.apache.tsfile.read.reader.series.PaginationController;
 import org.apache.tsfile.utils.Accountable;
 import org.apache.tsfile.utils.RamUsageEstimator;
@@ -1228,7 +1229,10 @@ public class SeriesScanUtil implements Accountable {
       this.version = new MergeReaderPriority(fileTimestamp, version, offset, 
isSeq);
       this.data = data;
       this.isSeq = isSeq;
-      this.isAligned = data instanceof AlignedPageReader || data instanceof 
MemAlignedPageReader;
+      this.isAligned =
+          data instanceof AlignedPageReader
+              || data instanceof MemAlignedPageReader
+              || data instanceof TablePageReader;
       this.isMem = data instanceof MemPageReader || data instanceof 
MemAlignedPageReader;
     }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java
index ab6fb12f596..ebaa7c030d9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java
@@ -1107,28 +1107,28 @@ public class SeriesScanCostMetricSet implements 
IMetricSet {
   
/////////////////////////////////////////////////////////////////////////////////////////////////
   private static final String READ_CHUNK = "read_chunk";
   private static final String ALL = "all";
-  public static final String READ_CHUNK_ALL = READ_CHUNK + "_" + ALL;
+  public static final String READ_CHUNK_CACHE = READ_CHUNK + "_" + CACHE;
   public static final String READ_CHUNK_FILE = READ_CHUNK + "_" + FILE;
-  private Timer readChunkAllTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
+  private Timer readChunkCacheTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
   private Timer readChunkFileTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
 
   private void bindReadChunk(AbstractMetricService metricService) {
-    readChunkAllTimer =
+    readChunkCacheTimer =
         metricService.getOrCreateTimer(
             Metric.SERIES_SCAN_COST.toString(),
             MetricLevel.IMPORTANT,
             Tag.STAGE.toString(),
-            READ_CHUNK,
+            READ_CHUNK_CACHE,
             Tag.TYPE.toString(),
             NULL,
             Tag.FROM.toString(),
-            ALL);
+            CACHE);
     readChunkFileTimer =
         metricService.getOrCreateTimer(
             Metric.SERIES_SCAN_COST.toString(),
             MetricLevel.IMPORTANT,
             Tag.STAGE.toString(),
-            READ_CHUNK,
+            READ_CHUNK_FILE,
             Tag.TYPE.toString(),
             NULL,
             Tag.FROM.toString(),
@@ -1136,16 +1136,16 @@ public class SeriesScanCostMetricSet implements 
IMetricSet {
   }
 
   private void unbindReadChunk(AbstractMetricService metricService) {
-    readChunkAllTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
+    readChunkCacheTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
     readChunkFileTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
-    Arrays.asList(ALL, FILE)
+    Arrays.asList(CACHE, FILE)
         .forEach(
             from ->
                 metricService.remove(
                     MetricType.TIMER,
                     Metric.SERIES_SCAN_COST.toString(),
                     Tag.STAGE.toString(),
-                    READ_CHUNK,
+                    READ_CHUNK + "_" + from,
                     Tag.TYPE.toString(),
                     NULL,
                     Tag.FROM.toString(),
@@ -1571,8 +1571,8 @@ public class SeriesScanCostMetricSet implements 
IMetricSet {
       case READ_TIMESERIES_METADATA_FILE:
         readTimeseriesMetadataFileTimer.updateNanos(cost);
         break;
-      case READ_CHUNK_ALL:
-        readChunkAllTimer.updateNanos(cost);
+      case READ_CHUNK_CACHE:
+        readChunkCacheTimer.updateNanos(cost);
         break;
       case READ_CHUNK_FILE:
         readChunkFileTimer.updateNanos(cost);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
index fe0e8671f4a..adce0a3b607 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java
@@ -383,7 +383,7 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
             .addOperatorContext(
                 context.getNextOperatorId(),
                 node.getPlanNodeId(),
-                TableScanNode.class.getSimpleName());
+                TableScanOperator.class.getSimpleName());
 
     int maxTsBlockLineNum = 
TSFileDescriptor.getInstance().getConfig().getMaxTsBlockLineNumber();
     if (context.getTypeProvider().getTemplatedInfo() != null) {
@@ -1132,7 +1132,7 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
             .addOperatorContext(
                 context.getNextOperatorId(),
                 node.getPlanNodeId(),
-                StreamSortNode.class.getSimpleName());
+                TableStreamSortOperator.class.getSimpleName());
     List<TSDataType> dataTypes = getOutputColumnTypes(node, 
context.getTypeProvider());
     int sortItemsCount = node.getOrderingScheme().getOrderBy().size();
 
@@ -1176,11 +1176,6 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
 
   @Override
   public Operator visitJoin(JoinNode node, LocalExecutionPlanContext context) {
-    OperatorContext operatorContext =
-        context
-            .getDriverContext()
-            .addOperatorContext(
-                context.getNextOperatorId(), node.getPlanNodeId(), 
JoinNode.class.getSimpleName());
     List<TSDataType> dataTypes = getOutputColumnTypes(node, 
context.getTypeProvider());
 
     Operator leftChild = node.getLeftChild().accept(this, context);
@@ -1221,6 +1216,13 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
     }
 
     if (requireNonNull(node.getJoinType()) == JoinNode.JoinType.INNER) {
+      OperatorContext operatorContext =
+          context
+              .getDriverContext()
+              .addOperatorContext(
+                  context.getNextOperatorId(),
+                  node.getPlanNodeId(),
+                  TableInnerJoinOperator.class.getSimpleName());
       return new TableInnerJoinOperator(
           operatorContext,
           leftChild,
@@ -1232,6 +1234,13 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
           ASC_TIME_COMPARATOR,
           dataTypes);
     } else if (requireNonNull(node.getJoinType()) == JoinNode.JoinType.FULL) {
+      OperatorContext operatorContext =
+          context
+              .getDriverContext()
+              .addOperatorContext(
+                  context.getNextOperatorId(),
+                  node.getPlanNodeId(),
+                  TableFullOuterJoinOperator.class.getSimpleName());
       return new TableFullOuterJoinOperator(
           operatorContext,
           leftChild,
@@ -1357,25 +1366,28 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
 
   @Override
   public Operator visitAggregation(AggregationNode node, 
LocalExecutionPlanContext context) {
-    OperatorContext operatorContext =
-        context
-            .getDriverContext()
-            .addOperatorContext(
-                context.getNextOperatorId(),
-                node.getPlanNodeId(),
-                AggregationNode.class.getSimpleName());
+
     Operator child = node.getChild().accept(this, context);
 
     if (node.getGroupingKeys().isEmpty()) {
-      return planGlobalAggregation(node, child, context.getTypeProvider(), 
operatorContext);
+      return planGlobalAggregation(node, child, context.getTypeProvider(), 
context);
     }
 
-    return planGroupByAggregation(node, child, context.getTypeProvider(), 
operatorContext);
+    return planGroupByAggregation(node, child, context.getTypeProvider(), 
context);
   }
 
   private Operator planGlobalAggregation(
-      AggregationNode node, Operator child, TypeProvider typeProvider, 
OperatorContext context) {
-
+      AggregationNode node,
+      Operator child,
+      TypeProvider typeProvider,
+      LocalExecutionPlanContext context) {
+    OperatorContext operatorContext =
+        context
+            .getDriverContext()
+            .addOperatorContext(
+                context.getNextOperatorId(),
+                node.getPlanNodeId(),
+                AggregationOperator.class.getSimpleName());
     Map<Symbol, AggregationNode.Aggregation> aggregationMap = 
node.getAggregations();
     ImmutableList.Builder<TableAggregator> aggregatorBuilder = new 
ImmutableList.Builder<>();
     Map<Symbol, Integer> childLayout =
@@ -1393,7 +1405,7 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
                         typeProvider,
                         true,
                         null)));
-    return new AggregationOperator(context, child, aggregatorBuilder.build());
+    return new AggregationOperator(operatorContext, child, 
aggregatorBuilder.build());
   }
 
   // timeColumnName will only be set for AggTableScan.
@@ -1438,7 +1450,7 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
       AggregationNode node,
       Operator child,
       TypeProvider typeProvider,
-      OperatorContext operatorContext) {
+      LocalExecutionPlanContext context) {
     Map<Symbol, Integer> childLayout =
         makeLayoutFromOutputSymbols(node.getChild().getOutputSymbols());
 
@@ -1458,6 +1470,13 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
                         buildAggregator(
                             childLayout, k, v, node.getStep(), typeProvider, 
true, null)));
 
+        OperatorContext operatorContext =
+            context
+                .getDriverContext()
+                .addOperatorContext(
+                    context.getNextOperatorId(),
+                    node.getPlanNodeId(),
+                    StreamingAggregationOperator.class.getSimpleName());
         return new StreamingAggregationOperator(
             operatorContext,
             child,
@@ -1499,6 +1518,13 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
       }
 
       List<Integer> preGroupedChannels = preGroupedChannelsBuilder.build();
+      OperatorContext operatorContext =
+          context
+              .getDriverContext()
+              .addOperatorContext(
+                  context.getNextOperatorId(),
+                  node.getPlanNodeId(),
+                  StreamingHashAggregationOperator.class.getSimpleName());
       return new StreamingHashAggregationOperator(
           operatorContext,
           child,
@@ -1522,6 +1548,13 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
             (k, v) ->
                 aggregatorBuilder.add(
                     buildGroupByAggregator(childLayout, k, v, node.getStep(), 
typeProvider)));
+    OperatorContext operatorContext =
+        context
+            .getDriverContext()
+            .addOperatorContext(
+                context.getNextOperatorId(),
+                node.getPlanNodeId(),
+                HashAggregationOperator.class.getSimpleName());
 
     return new HashAggregationOperator(
         operatorContext,
@@ -1739,7 +1772,7 @@ public class TableOperatorGenerator extends 
PlanVisitor<Operator, LocalExecution
             .addOperatorContext(
                 context.getNextOperatorId(),
                 node.getPlanNodeId(),
-                AggregationTableScanNode.class.getSimpleName());
+                TableAggregationTableScanOperator.class.getSimpleName());
     SeriesScanOptions.Builder scanOptionsBuilder =
         node.getTimePredicate().isPresent()
             ? getSeriesScanOptionsBuilder(context, 
node.getTimePredicate().get())
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/SqlParser.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/SqlParser.java
index b20fb829326..1ee59aea651 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/SqlParser.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/SqlParser.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.plan.relational.sql.parser;
 
+import org.apache.iotdb.commons.service.metric.PerformanceOverviewMetrics;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DataType;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression;
 import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Node;
@@ -54,6 +55,10 @@ import java.util.function.Function;
 import static java.util.Objects.requireNonNull;
 
 public class SqlParser {
+
+  private static final PerformanceOverviewMetrics PERFORMANCE_OVERVIEW_METRICS 
=
+      PerformanceOverviewMetrics.getInstance();
+
   private static final ANTLRErrorListener LEXER_ERROR_LISTENER =
       new BaseErrorListener() {
         @Override
@@ -131,6 +136,7 @@ public class SqlParser {
       Optional<NodeLocation> location,
       Function<RelationalSqlParser, ParserRuleContext> parseFunction,
       ZoneId zoneId) {
+    long startTime = System.nanoTime();
     try {
       RelationalSqlLexer lexer =
           new RelationalSqlLexer(new 
CaseInsensitiveStream(CharStreams.fromString(sql)));
@@ -190,6 +196,8 @@ public class SqlParser {
       return new AstBuilder(location.orElse(null), zoneId).visit(tree);
     } catch (StackOverflowError e) {
       throw new ParsingException(name + " is too large (stack overflow while 
parsing)");
+    } finally {
+      PERFORMANCE_OVERVIEW_METRICS.recordParseCost(System.nanoTime() - 
startTime);
     }
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
index 5914272c7cc..a604409035f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
@@ -47,7 +47,7 @@ import java.util.Objects;
 import java.util.function.Function;
 import java.util.function.LongConsumer;
 
-import static 
org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.READ_CHUNK_ALL;
+import static 
org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.READ_CHUNK_CACHE;
 import static 
org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.READ_CHUNK_FILE;
 
 /**
@@ -162,11 +162,13 @@ public class ChunkCache {
     } finally {
       if (chunkLoader.isCacheMiss()) {
         cacheMissAdder.accept(1);
+        SERIES_SCAN_COST_METRIC_SET.recordSeriesScanCost(
+            READ_CHUNK_FILE, System.nanoTime() - startTime);
       } else {
         cacheHitAdder.accept(1);
+        SERIES_SCAN_COST_METRIC_SET.recordSeriesScanCost(
+            READ_CHUNK_CACHE, System.nanoTime() - startTime);
       }
-      SERIES_SCAN_COST_METRIC_SET.recordSeriesScanCost(
-          READ_CHUNK_ALL, System.nanoTime() - startTime);
     }
   }
 

Reply via email to