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()) {