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 <[email protected]> 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()) {
