This is an automated email from the ASF dual-hosted git repository.
caogaofei pushed a commit to branch beyyes/explain
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/beyyes/explain by this push:
new cd810641f08 fix dispatch
cd810641f08 is described below
commit cd810641f08f61590819e8a823386cd931d55452
Author: Beyyes <[email protected]>
AuthorDate: Fri Jul 12 19:16:36 2024 +0800
fix dispatch
---
.../iotdb/db/queryengine/common/MPPQueryContext.java | 15 ++++++---------
.../plan/scheduler/FragmentInstanceDispatcherImpl.java | 6 +++---
.../statistics/FragmentInstanceStatisticsDrawer.java | 4 +++-
.../db/queryengine/statistics/QueryPlanStatistics.java | 14 +++++++-------
4 files changed, 19 insertions(+), 20 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 b8ac5a4fb31..a117d9f421d 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,8 +258,12 @@ public class MPPQueryContext {
return queryPlanStatistics.getLogicalOptimizationCost();
}
- public long getDispatchCost() {
- return queryPlanStatistics.getDispatchCost();
+ public void setDispatchStartTime(long time) {
+ this.queryPlanStatistics.setDispatchStartTime(time);
+ }
+
+ public long getDispatchStartTime() {
+ return queryPlanStatistics.getDispatchStartTime();
}
public void setAnalyzeCost(long analyzeCost) {
@@ -304,13 +308,6 @@ 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/plan/scheduler/FragmentInstanceDispatcherImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FragmentInstanceDispatcherImpl.java
index bb83aca6a14..986eb8c9b15 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
@@ -125,6 +125,7 @@ public class FragmentInstanceDispatcherImpl implements
IFragInstanceDispatcher {
// topological dispatch according to dependency relations between
FragmentInstances
private Future<FragInstanceDispatchResult>
dispatchRead(List<FragmentInstance> instances) {
long startTime = System.nanoTime();
+ queryContext.setDispatchStartTime(startTime);
for (FragmentInstance instance : instances) {
try (SetThreadName threadName = new
SetThreadName(instance.getId().getFullId())) {
dispatchOneInstance(instance);
@@ -146,11 +147,10 @@ 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 4db9679377b..71638a9c83f 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
@@ -72,7 +72,9 @@ public class FragmentInstanceStatisticsDrawer {
addLine(
planHeader,
0,
- String.format("Dispatch Cost: %.3f ms", context.getDispatchCost() *
NS_TO_MS_FACTOR));
+ String.format(
+ "Single Dispatch Cost: %.3f ms",
+ (System.nanoTime() - context.getDispatchStartTime()) *
NS_TO_MS_FACTOR));
}
public List<StatisticLine> renderFragmentInstances(
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 845934aae1b..ad4d549e697 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,7 +26,7 @@ public class QueryPlanStatistics {
private long logicalPlanCost;
private long logicalOptimizationCost;
private long distributionPlanCost;
- private long dispatchCost = 0;
+ private long dispatchStartTime = 0;
public void setAnalyzeCost(long analyzeCost) {
this.analyzeCost = analyzeCost;
@@ -52,10 +52,6 @@ public class QueryPlanStatistics {
this.logicalOptimizationCost = logicalOptimizationCost;
}
- public void recordDispatchCost(long dispatchCost) {
- this.dispatchCost += dispatchCost;
- }
-
public long getAnalyzeCost() {
return analyzeCost;
}
@@ -80,7 +76,11 @@ public class QueryPlanStatistics {
return logicalOptimizationCost;
}
- public long getDispatchCost() {
- return dispatchCost;
+ public void setDispatchStartTime(long dispatchStartTime) {
+ this.dispatchStartTime = dispatchStartTime;
+ }
+
+ public long getDispatchStartTime() {
+ return dispatchStartTime;
}
}