You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2022/11/07 06:22:52 UTC

[iotdb] 04/04: add metrics (execution)

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

hui pushed a commit to branch QueryMetrics0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit c1804bf3997d876e3f29b1043d8f511765d7500d
Author: Minghui Liu <li...@foxmail.com>
AuthorDate: Mon Nov 7 14:16:51 2022 +0800

    add metrics (execution)
---
 .../apache/iotdb/db/qp/executor/PlanExecutor.java    |  6 +++++-
 .../iotdb/db/query/control/QueryStatistics.java      |  8 ++++++++
 .../reader/series/SeriesRawDataBatchReader.java      | 20 ++++++++++++++++++++
 .../iotdb/db/query/reader/series/SeriesReader.java   |  7 ++++++-
 .../iotdb/db/service/thrift/impl/TSServiceImpl.java  |  4 ++++
 5 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
index 3d6104045e..b8a49f847f 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
@@ -274,8 +274,12 @@ public class PlanExecutor implements IPlanExecutor {
   public QueryDataSet processQuery(PhysicalPlan queryPlan, QueryContext context)
       throws IOException, StorageEngineException, QueryFilterOptimizationException,
           QueryProcessException, MetadataException, InterruptedException {
+    long startTime = System.nanoTime();
     if (queryPlan instanceof QueryPlan) {
-      return processDataQuery((QueryPlan) queryPlan, context);
+      QueryDataSet queryDataSet = processDataQuery((QueryPlan) queryPlan, context);
+      QueryStatistics.getInstance()
+          .addCost(QueryStatistics.INIT_QUERY_DATASET, System.nanoTime() - startTime);
+      return queryDataSet;
     } else if (queryPlan instanceof AuthorPlan) {
       return processAuthorQuery((AuthorPlan) queryPlan);
     } else if (queryPlan instanceof ShowPlan) {
diff --git a/server/src/main/java/org/apache/iotdb/db/query/control/QueryStatistics.java b/server/src/main/java/org/apache/iotdb/db/query/control/QueryStatistics.java
index 3ce09646f0..af40cc1bd4 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/control/QueryStatistics.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/control/QueryStatistics.java
@@ -47,6 +47,14 @@ public class QueryStatistics {
   public static final String PARSER = "Parser";
   public static final String PLANNER = "Planner";
 
+  public static final String INIT_QUERY_DATASET = "InitQueryDataset";
+  public static final String QUERY_EXECUTION = "QueryExecution";
+  public static final String SERIES_RAW_DATA_BATCH_READER_NEXT =
+      "SeriesRawDataBatchReader.nextBatch()";
+  public static final String SERIES_RAW_DATA_BATCH_READER_HAS_NEXT =
+      "SeriesRawDataBatchReader.hasNextBatch()";
+  public static final String PAGE_READER = "PageReader";
+
   private QueryStatistics() {
     ScheduledExecutorService scheduledExecutor =
         IoTDBThreadPoolFactory.newScheduledThreadPool(1, "Query-Statistics-Print");
diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
index ca3aab0074..693cee134b 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
@@ -22,6 +22,7 @@ import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.metadata.path.PartialPath;
 import org.apache.iotdb.db.query.context.QueryContext;
+import org.apache.iotdb.db.query.control.QueryStatistics;
 import org.apache.iotdb.db.query.filter.TsFileFilter;
 import org.apache.iotdb.db.utils.TestOnly;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -43,6 +44,8 @@ public class SeriesRawDataBatchReader implements ManagedSeriesReader {
   private BatchData batchData;
   private boolean hasCachedBatchData = false;
 
+  private final QueryStatistics QUERY_STATISTICS = QueryStatistics.getInstance();
+
   public SeriesRawDataBatchReader(SeriesReader seriesReader) {
     this.seriesReader = seriesReader;
   }
@@ -99,8 +102,11 @@ public class SeriesRawDataBatchReader implements ManagedSeriesReader {
    */
   @Override
   public boolean hasNextBatch() throws IOException {
+    long startTime = System.nanoTime();
 
     if (hasCachedBatchData) {
+      QUERY_STATISTICS.addCost(
+          QueryStatistics.SERIES_RAW_DATA_BATCH_READER_HAS_NEXT, System.nanoTime() - startTime);
       return true;
     }
 
@@ -109,6 +115,8 @@ public class SeriesRawDataBatchReader implements ManagedSeriesReader {
      */
     if (readPageData()) {
       hasCachedBatchData = true;
+      QUERY_STATISTICS.addCost(
+          QueryStatistics.SERIES_RAW_DATA_BATCH_READER_HAS_NEXT, System.nanoTime() - startTime);
       return true;
     }
 
@@ -117,6 +125,8 @@ public class SeriesRawDataBatchReader implements ManagedSeriesReader {
      */
     if (readChunkData()) {
       hasCachedBatchData = true;
+      QUERY_STATISTICS.addCost(
+          QueryStatistics.SERIES_RAW_DATA_BATCH_READER_HAS_NEXT, System.nanoTime() - startTime);
       return true;
     }
 
@@ -126,16 +136,26 @@ public class SeriesRawDataBatchReader implements ManagedSeriesReader {
     while (seriesReader.hasNextFile()) {
       if (readChunkData()) {
         hasCachedBatchData = true;
+        QUERY_STATISTICS.addCost(
+            QueryStatistics.SERIES_RAW_DATA_BATCH_READER_HAS_NEXT, System.nanoTime() - startTime);
         return true;
       }
     }
+
+    QUERY_STATISTICS.addCost(
+        QueryStatistics.SERIES_RAW_DATA_BATCH_READER_HAS_NEXT, System.nanoTime() - startTime);
     return hasCachedBatchData;
   }
 
   @Override
   public BatchData nextBatch() throws IOException {
+    long startTime = System.nanoTime();
+
     if (hasCachedBatchData || hasNextBatch()) {
       hasCachedBatchData = false;
+
+      QUERY_STATISTICS.addCost(
+          QueryStatistics.SERIES_RAW_DATA_BATCH_READER_NEXT, System.nanoTime() - startTime);
       return batchData;
     }
     throw new IOException("no next batch");
diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
index ab5fbb742a..f4d1ae15c6 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
@@ -23,6 +23,7 @@ import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.metadata.idtable.IDTable;
 import org.apache.iotdb.db.metadata.path.PartialPath;
 import org.apache.iotdb.db.query.context.QueryContext;
+import org.apache.iotdb.db.query.control.QueryStatistics;
 import org.apache.iotdb.db.query.control.QueryTimeManager;
 import org.apache.iotdb.db.query.control.tracing.TracingManager;
 import org.apache.iotdb.db.query.filter.TsFileFilter;
@@ -1172,7 +1173,11 @@ public class SeriesReader {
     }
 
     BatchData getAllSatisfiedPageData(boolean ascending) throws IOException {
-      return data.getAllSatisfiedPageData(ascending);
+      long startTime = System.nanoTime();
+      BatchData batchData = data.getAllSatisfiedPageData(ascending);
+      QueryStatistics.getInstance()
+          .addCost(QueryStatistics.PAGE_READER, System.nanoTime() - startTime);
+      return batchData;
     }
 
     void setFilter(Filter filter) {
diff --git a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
index 3f98f7a06d..e0b99aae43 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/thrift/impl/TSServiceImpl.java
@@ -65,6 +65,7 @@ import org.apache.iotdb.db.qp.physical.sys.SetTemplatePlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowQueryProcesslistPlan;
 import org.apache.iotdb.db.qp.physical.sys.UnsetTemplatePlan;
 import org.apache.iotdb.db.query.context.QueryContext;
+import org.apache.iotdb.db.query.control.QueryStatistics;
 import org.apache.iotdb.db.query.control.clientsession.IClientSession;
 import org.apache.iotdb.db.query.control.tracing.TracingConstant;
 import org.apache.iotdb.db.query.dataset.DirectAlignByTimeDataSet;
@@ -854,7 +855,10 @@ public class TSServiceImpl implements TSIService.Iface {
       resp.setNonAlignQueryDataSet(fillRpcNonAlignReturnData(fetchSize, newDataSet, username));
     } else {
       try {
+        long startTime = System.nanoTime();
         TSQueryDataSet tsQueryDataSet = fillRpcReturnData(fetchSize, newDataSet, username);
+        QueryStatistics.getInstance()
+            .addCost(QueryStatistics.QUERY_EXECUTION, System.nanoTime() - startTime);
         resp.setQueryDataSet(tsQueryDataSet);
       } catch (RedirectException e) {
         if (plan.isEnableRedirect()) {