This is an automated email from the ASF dual-hosted git repository. ycycse pushed a commit to branch ycy/fixEA in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit a8d1e9e3d5934f36721604bf327e57f657a5881c Author: ycycse <[email protected]> AuthorDate: Thu Jul 11 17:01:14 2024 +0800 feat: modify the metric in ExplainAnalyze --- .../apache/iotdb/db/queryengine/common/MPPQueryContext.java | 11 +++++++++++ .../db/queryengine/execution/fragment/QueryStatistics.java | 3 ++- .../execution/operator/process/FilterAndProjectOperator.java | 4 +++- .../plan/scheduler/FragmentInstanceDispatcherImpl.java | 5 +++-- .../statistics/FragmentInstanceStatisticsDrawer.java | 9 +++++++++ .../iotdb/db/queryengine/statistics/QueryPlanStatistics.java | 9 +++++++++ .../thrift-datanode/src/main/thrift/datanode.thrift | 3 ++- 7 files changed, 39 insertions(+), 5 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java index ed4516223b5..b8ac5a4fb31 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java @@ -258,6 +258,10 @@ public class MPPQueryContext { return queryPlanStatistics.getLogicalOptimizationCost(); } + public long getDispatchCost() { + return queryPlanStatistics.getDispatchCost(); + } + public void setAnalyzeCost(long analyzeCost) { if (queryPlanStatistics == null) { queryPlanStatistics = new QueryPlanStatistics(); @@ -300,6 +304,13 @@ public class MPPQueryContext { queryPlanStatistics.setLogicalOptimizationCost(logicalOptimizeCost); } + public void recordDispatchCost(long dispatchCost) { + if (queryPlanStatistics == null) { + queryPlanStatistics = new QueryPlanStatistics(); + } + queryPlanStatistics.recordDispatchCost(dispatchCost); + } + // region =========== FE memory related, make sure its not called concurrently =========== /** diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryStatistics.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryStatistics.java index 82094467034..52c9f42c12a 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryStatistics.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryStatistics.java @@ -104,6 +104,7 @@ public class QueryStatistics { pageReadersDecodeNonAlignedDiskCount.get(), pageReadersDecodeNonAlignedDiskTime.get(), pageReadersDecodeNonAlignedMemCount.get(), - pageReadersDecodeNonAlignedMemTime.get()); + pageReadersDecodeNonAlignedMemTime.get(), + pageReaderMaxUsedMemorySize.get()); } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java index 407874ae8b3..654e8bf15ec 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/FilterAndProjectOperator.java @@ -72,6 +72,8 @@ public class FilterAndProjectOperator implements ProcessOperator { // false when we only need to do projection private final boolean hasFilter; + private long filteredRowCount = 0; + @SuppressWarnings("squid:S107") public FilterAndProjectOperator( OperatorContext operatorContext, @@ -114,7 +116,7 @@ public class FilterAndProjectOperator implements ProcessOperator { long inputRowCount = input.getPositionCount(); TsBlock filterResult = getFilterTsBlock(input); - long filteredRowCount = + filteredRowCount += filterResult == null ? inputRowCount : inputRowCount - filterResult.getPositionCount(); operatorContext.recordSpecifiedInfo("Filtered Rows", Long.toString(filteredRowCount)); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FragmentInstanceDispatcherImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FragmentInstanceDispatcherImpl.java index 7fe941a6f83..2b0738ea59f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FragmentInstanceDispatcherImpl.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FragmentInstanceDispatcherImpl.java @@ -146,8 +146,9 @@ public class FragmentInstanceDispatcherImpl implements IFragInstanceDispatcher { // TypeProvider is not used in EXPLAIN ANALYZE, so we can clear it instance.getFragment().clearTypeProvider(); } - QUERY_EXECUTION_METRIC_SET.recordExecutionCost( - DISPATCH_READ, System.nanoTime() - startTime); + long dispatchReadTime = System.nanoTime() - startTime; + QUERY_EXECUTION_METRIC_SET.recordExecutionCost(DISPATCH_READ, dispatchReadTime); + queryContext.recordDispatchCost(dispatchReadTime); } } return immediateFuture(new FragInstanceDispatchResult(true)); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsDrawer.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsDrawer.java index e7ca8ab887e..41a4f368528 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsDrawer.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsDrawer.java @@ -69,6 +69,10 @@ public class FragmentInstanceStatisticsDrawer { String.format( "Distribution Plan Cost: %.3f ms", context.getDistributionPlanCost() * NS_TO_MS_FACTOR)); + addLine( + planHeader, + 0, + String.format("Dispatch Cost: %.3f ms", context.getDispatchCost() * NS_TO_MS_FACTOR)); } public List<StatisticLine> renderFragmentInstances( @@ -324,6 +328,11 @@ public class FragmentInstanceStatisticsDrawer { 2, "pageReadersDecodeNonAlignedMemTime", queryStatistics.pageReadersDecodeNonAlignedMemTime * NS_TO_MS_FACTOR); + addLineWithValueCheck( + singleFragmentInstanceArea, + 2, + "pageReaderMaxUsedMemorySize", + queryStatistics.pageReaderMaxUsedMemorySize); } private void addLine(List<StatisticLine> resultForSingleInstance, int level, String value) { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/QueryPlanStatistics.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/QueryPlanStatistics.java index cb8a4a6a8c6..845934aae1b 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/QueryPlanStatistics.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/QueryPlanStatistics.java @@ -26,6 +26,7 @@ public class QueryPlanStatistics { private long logicalPlanCost; private long logicalOptimizationCost; private long distributionPlanCost; + private long dispatchCost = 0; public void setAnalyzeCost(long analyzeCost) { this.analyzeCost = analyzeCost; @@ -51,6 +52,10 @@ public class QueryPlanStatistics { this.logicalOptimizationCost = logicalOptimizationCost; } + public void recordDispatchCost(long dispatchCost) { + this.dispatchCost += dispatchCost; + } + public long getAnalyzeCost() { return analyzeCost; } @@ -74,4 +79,8 @@ public class QueryPlanStatistics { public long getLogicalOptimizationCost() { return logicalOptimizationCost; } + + public long getDispatchCost() { + return dispatchCost; + } } diff --git a/iotdb-protocol/thrift-datanode/src/main/thrift/datanode.thrift b/iotdb-protocol/thrift-datanode/src/main/thrift/datanode.thrift index 60e605a6a34..a568d961bfb 100644 --- a/iotdb-protocol/thrift-datanode/src/main/thrift/datanode.thrift +++ b/iotdb-protocol/thrift-datanode/src/main/thrift/datanode.thrift @@ -592,7 +592,8 @@ struct TQueryStatistics { 29: i64 pageReadersDecodeNonAlignedDiskCount, 30: i64 pageReadersDecodeNonAlignedDiskTime, 31: i64 pageReadersDecodeNonAlignedMemCount, - 32: i64 pageReadersDecodeNonAlignedMemTime + 32: i64 pageReadersDecodeNonAlignedMemTime, + 33: i64 pageReaderMaxUsedMemorySize }
