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

Wei-hao-Li pushed a commit to branch deviceEntrySpill-dev
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit d6914dea463be7ed6dc364b33ee6fa56192d4e73
Author: Weihao Li <[email protected]>
AuthorDate: Wed Aug 12 09:48:45 2026 +0800

    modify
    
    Signed-off-by: Weihao Li <[email protected]>
---
 .../db/queryengine/common/MPPQueryContext.java     | 32 ++++------
 .../metadata/fetcher/TableDeviceSchemaFetcher.java | 74 ++++++++++------------
 .../spill/AbstractDeviceEntryMaterializer.java     |  4 +-
 .../metadata/spill/DeviceEntryDiskSpiller.java     |  1 -
 .../metadata/spill/DeviceEntryIOContext.java       | 19 +++---
 .../metadata/spill/DeviceEntryMaterializer.java    |  5 +-
 .../FragmentInstanceStatisticsDrawer.java          | 16 ++---
 .../FragmentInstanceStatisticsJsonDrawer.java      | 11 ++--
 .../statistics/QueryPlanStatistics.java            | 41 ++++--------
 .../FragmentInstanceStatisticsJsonDrawerTest.java  | 14 ++--
 10 files changed, 94 insertions(+), 123 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 f7ff41469ad..25edf3a4131 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
@@ -528,32 +528,28 @@ public class MPPQueryContext implements IAuditEntity {
     return queryPlanStatistics.getDispatchCost();
   }
 
-  public void recordDeviceEntryDiskIO(long bytes, long timeCost) {
-    getOrCreateQueryPlanStatistics().recordDeviceEntryDiskIO(bytes, timeCost);
+  public void recordDeviceEntryDiskIODuringFetchSchema(long bytes, long 
timeCost) {
+    
getOrCreateQueryPlanStatistics().recordDeviceEntryDiskIODuringFetchSchema(bytes,
 timeCost);
   }
 
-  public void recordDeviceEntrySegment() {
-    getOrCreateQueryPlanStatistics().recordDeviceEntrySegment();
+  public void recordDeviceEntryCount(long count) {
+    getOrCreateQueryPlanStatistics().recordDeviceEntryCount(count);
   }
 
-  public void recordDeviceEntrySortedRun() {
-    getOrCreateQueryPlanStatistics().recordDeviceEntrySortedRun();
+  public long getDiskIOSizeForDeviceEntryDuringFetchSchema() {
+    return queryPlanStatistics == null
+        ? 0
+        : queryPlanStatistics.getDiskIOSizeForDeviceEntryDuringFetchSchema();
   }
 
-  public long getDiskIOSizeForDeviceEntry() {
-    return queryPlanStatistics == null ? 0 : 
queryPlanStatistics.getDiskIOSizeForDeviceEntry();
+  public long getDiskIOTimeCostForDeviceEntryDuringFetchSchema() {
+    return queryPlanStatistics == null
+        ? 0
+        : 
queryPlanStatistics.getDiskIOTimeCostForDeviceEntryDuringFetchSchema();
   }
 
-  public long getDiskIOTimeCostForDeviceEntry() {
-    return queryPlanStatistics == null ? 0 : 
queryPlanStatistics.getDiskIOTimeCostForDeviceEntry();
-  }
-
-  public long getDeviceEntrySegmentCount() {
-    return queryPlanStatistics == null ? 0 : 
queryPlanStatistics.getDeviceEntrySegmentCount();
-  }
-
-  public long getDeviceEntrySortedRunCount() {
-    return queryPlanStatistics == null ? 0 : 
queryPlanStatistics.getDeviceEntrySortedRunCount();
+  public long getDeviceEntryCount() {
+    return queryPlanStatistics == null ? 0 : 
queryPlanStatistics.getDeviceEntryCount();
   }
 
   private QueryPlanStatistics getOrCreateQueryPlanStatistics() {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
index 57f20ba6d45..1ac6e1789a4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
@@ -245,14 +245,7 @@ public class TableDeviceSchemaFetcher {
         mayContainDuplicateDevice,
         false)) {
       fetchMissingDeviceSchemaForQuery(
-          database,
-          tableInstance,
-          attributeColumns,
-          statement,
-          deviceEntryMap,
-          null,
-          queryContext,
-          null);
+          database, tableInstance, attributeColumns, statement, 
deviceEntryMap, null, queryContext);
     }
 
     // TODO table metadata:  implement deduplicate during schemaRegion 
execution
@@ -278,8 +271,7 @@ public class TableDeviceSchemaFetcher {
     if (TreeViewSchema.isTreeViewTable(tableInstance)) {
       final Map<String, List<DeviceEntry>> deviceEntryMap = new HashMap<>();
       final AtomicBoolean mayContainDuplicateDevice = new AtomicBoolean(false);
-      // pass by reference
-      final AtomicBoolean containsNonAlignedDevice = new AtomicBoolean(false);
+      boolean containsNonAlignedDevice = false;
       final ShowDevice statement = new ShowDevice(database, table);
       try (DeviceEntryMaterializer materializer =
           new DeviceEntryMaterializer(
@@ -302,21 +294,21 @@ public class TableDeviceSchemaFetcher {
           for (DeviceEntry entry : entries) {
             appendToMaterializer(materializer, entry, queryContext, true);
             if (entry instanceof NonAlignedDeviceEntry) {
-              containsNonAlignedDevice.set(true);
+              containsNonAlignedDevice = true;
             }
           }
           entries.clear();
         }
         if (needRemoteFetch) {
-          fetchMissingDeviceSchemaForQuery(
-              database,
-              tableInstance,
-              attributeColumns,
-              statement,
-              deviceEntryMap,
-              materializer,
-              queryContext,
-              containsNonAlignedDevice);
+          containsNonAlignedDevice |=
+              fetchMissingDeviceSchemaForQuery(
+                  database,
+                  tableInstance,
+                  attributeColumns,
+                  statement,
+                  deviceEntryMap,
+                  materializer,
+                  queryContext);
         }
         if (deviceEntryMap.size() > 1) {
           throw new SemanticException(
@@ -327,7 +319,7 @@ public class TableDeviceSchemaFetcher {
         final String resultDatabase =
             deviceEntryMap.isEmpty() ? null : 
deviceEntryMap.keySet().iterator().next();
         return new DeviceEntryDataSetResult(
-            resultDatabase, materializer.finish(), 
containsNonAlignedDevice.get());
+            resultDatabase, materializer.finish(), containsNonAlignedDevice);
       } catch (IOException e) {
         throw new UncheckedIOException(e);
       }
@@ -357,8 +349,7 @@ public class TableDeviceSchemaFetcher {
             statement,
             cachedEntries,
             null,
-            queryContext,
-            null);
+            queryContext);
       }
       cachedEntries.put(
           database, new ArrayList<>(new 
LinkedHashSet<>(cachedEntries.get(database))));
@@ -383,8 +374,7 @@ public class TableDeviceSchemaFetcher {
             statement,
             cachedEntries,
             materializer,
-            queryContext,
-            null);
+            queryContext);
       }
       final DeviceEntryDataSet dataSet = materializer.finish();
       return new DeviceEntryDataSetResult(database, dataSet, false);
@@ -629,16 +619,16 @@ public class TableDeviceSchemaFetcher {
     return IDeviceID.Factory.DEFAULT_FACTORY.create(deviceIdNodes);
   }
 
-  private void fetchMissingDeviceSchemaForQuery(
+  private boolean fetchMissingDeviceSchemaForQuery(
       final String database,
       final TsTable tableInstance,
       final List<String> attributeColumns,
       final ShowDevice statement,
       final Map<String, List<DeviceEntry>> deviceEntryMap,
       final DeviceEntryMaterializer materializer,
-      final MPPQueryContext mppQueryContext,
-      final AtomicBoolean containsNonAlignedDevice) {
+      final MPPQueryContext mppQueryContext) {
     Throwable t = null;
+    boolean containsNonAlignedDevice = false;
 
     final long queryId = SessionManager.getInstance().requestQueryId();
     // For the correctness of attribute remote update
@@ -712,14 +702,14 @@ public class TableDeviceSchemaFetcher {
                 deviceEntryMap.get(database),
                 materializer);
           } else {
-            constructTreeResults(
-                tsBlock.get(),
-                columnHeaderList,
-                tableInstance,
-                mppQueryContext,
-                deviceEntryMap,
-                materializer,
-                containsNonAlignedDevice);
+            containsNonAlignedDevice |=
+                constructTreeResults(
+                    tsBlock.get(),
+                    columnHeaderList,
+                    tableInstance,
+                    mppQueryContext,
+                    deviceEntryMap,
+                    materializer);
           }
         }
       } else {
@@ -732,6 +722,7 @@ public class TableDeviceSchemaFetcher {
               TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode());
         }
       }
+      return containsNonAlignedDevice;
     } catch (final Throwable throwable) {
       t = throwable;
       throw throwable;
@@ -803,14 +794,14 @@ public class TableDeviceSchemaFetcher {
     }
   }
 
-  private void constructTreeResults(
+  private boolean constructTreeResults(
       final TsBlock tsBlock,
       final List<ColumnHeader> columnHeaderList,
       final TsTable tableInstance,
       final MPPQueryContext mppQueryContext,
       final Map<String, List<DeviceEntry>> deviceEntryMap,
-      final DeviceEntryMaterializer materializer,
-      final AtomicBoolean containsNonAlignedDevice) {
+      final DeviceEntryMaterializer materializer) {
+    boolean containsNonAlignedDevice = false;
     final Column[] columns = tsBlock.getValueColumns();
     for (int i = 0; i < tsBlock.getPositionCount(); i++) {
       final String[] nodes = new String[tableInstance.getTagNum()];
@@ -822,6 +813,7 @@ public class TableDeviceSchemaFetcher {
           columns[columns.length - 2].getBoolean(i)
               ? new AlignedDeviceEntry(deviceID, new Binary[0])
               : new NonAlignedDeviceEntry(deviceID, new Binary[0]);
+      containsNonAlignedDevice |= deviceEntry instanceof NonAlignedDeviceEntry;
       final List<DeviceEntry> deviceEntries =
           deviceEntryMap.computeIfAbsent(
               columns[columns.length - 
1].getBinary(i).getStringValue(TSFileConfig.STRING_CHARSET),
@@ -831,11 +823,9 @@ public class TableDeviceSchemaFetcher {
         deviceEntries.add(deviceEntry);
       } else {
         appendToMaterializer(materializer, deviceEntry, mppQueryContext, 
false);
-        if (deviceEntry instanceof NonAlignedDeviceEntry) {
-          containsNonAlignedDevice.set(true);
-        }
       }
     }
+    return containsNonAlignedDevice;
   }
 
   private void constructNodesArrayAndAttributeMap(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/AbstractDeviceEntryMaterializer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/AbstractDeviceEntryMaterializer.java
index 6959387a4aa..a481423b3b7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/AbstractDeviceEntryMaterializer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/AbstractDeviceEntryMaterializer.java
@@ -97,8 +97,8 @@ public abstract class AbstractDeviceEntryMaterializer 
implements AutoCloseable {
 
   public abstract void forceSpill() throws IOException;
 
-  public final void setQueryContext(MPPQueryContext queryContext) {
-    ioContext = new DeviceEntryIOContext(queryContext);
+  protected final void setQueryContext(MPPQueryContext queryContext, boolean 
duringFetchSchema) {
+    ioContext = new DeviceEntryIOContext(queryContext, duringFetchSchema);
   }
 
   protected final DeviceEntryIOContext ioContext() {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryDiskSpiller.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryDiskSpiller.java
index 50c3965dfee..53b8dda0632 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryDiskSpiller.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryDiskSpiller.java
@@ -101,7 +101,6 @@ public final class DeviceEntryDiskSpiller implements 
AutoCloseable {
     sealedSegments.add(sealedFile);
     if (ioContext != null) {
       ioContext.recordDiskIO(0, startNanos);
-      ioContext.recordSegment();
     }
     temporaryFile = null;
     currentBytes = 0;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryIOContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryIOContext.java
index c434e0fece7..653cb91f0f3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryIOContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryIOContext.java
@@ -27,11 +27,13 @@ import java.util.concurrent.TimeUnit;
 public final class DeviceEntryIOContext {
 
   private final MPPQueryContext queryContext;
+  private final boolean duringFetchSchema;
   private final long timeoutStartNanos;
   private final long remainingTimeoutNanos;
 
-  public DeviceEntryIOContext(MPPQueryContext queryContext) {
+  public DeviceEntryIOContext(MPPQueryContext queryContext, boolean 
duringFetchSchema) {
     this.queryContext = queryContext;
+    this.duringFetchSchema = duringFetchSchema;
     this.timeoutStartNanos = System.nanoTime();
     long elapsedMillis = Math.max(0, System.currentTimeMillis() - 
queryContext.getStartTime());
     long remainingTimeoutMillis = Math.max(0, queryContext.getTimeOut() - 
elapsedMillis);
@@ -46,15 +48,16 @@ public final class DeviceEntryIOContext {
   }
 
   public void recordDiskIO(long bytes, long startNanos) {
-    queryContext.recordDeviceEntryDiskIO(bytes, System.nanoTime() - 
startNanos);
+    long timeCost = System.nanoTime() - startNanos;
+    if (duringFetchSchema) {
+      queryContext.recordDeviceEntryDiskIODuringFetchSchema(bytes, timeCost);
+    }
     checkTimeout();
   }
 
-  public void recordSegment() {
-    queryContext.recordDeviceEntrySegment();
-  }
-
-  public void recordSortedRun() {
-    queryContext.recordDeviceEntrySortedRun();
+  public void recordDeviceEntryCount(long count) {
+    if (duringFetchSchema) {
+      queryContext.recordDeviceEntryCount(count);
+    }
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryMaterializer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryMaterializer.java
index 92d7cf64d48..41308337953 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryMaterializer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/spill/DeviceEntryMaterializer.java
@@ -47,7 +47,7 @@ public final class DeviceEntryMaterializer extends 
AbstractDeviceEntryMaterializ
       boolean rawSegment,
       MPPQueryContext queryContext) {
     this(queryId, planNodeId, thresholdInBytes, rawSegment);
-    setQueryContext(queryContext);
+    setQueryContext(queryContext, rawSegment);
   }
 
   @Override
@@ -97,6 +97,9 @@ public final class DeviceEntryMaterializer extends 
AbstractDeviceEntryMaterializ
           new SpilledDeviceEntryDataSet(
               queryId(), ownerDirectory(), spiller.finish(), entryCount(), 
!rawSegment);
     }
+    if (ioContext() != null) {
+      ioContext().recordDeviceEntryCount(entryCount());
+    }
     markFinished();
     return dataSet;
   }
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 da6f415af8d..7c4a45cfcac 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
@@ -57,21 +57,15 @@ public class FragmentInstanceStatisticsDrawer {
         planHeader,
         1,
         String.format(
-            "Disk IO Size for DeviceEntry: %d bytes", 
context.getDiskIOSizeForDeviceEntry()));
+            "Disk IO Size for DeviceEntry During FetchSchema: %d bytes",
+            context.getDiskIOSizeForDeviceEntryDuringFetchSchema()));
     addLine(
         planHeader,
         1,
         String.format(
-            "Disk IO Time Cost for DeviceEntry: %.3f ms",
-            context.getDiskIOTimeCostForDeviceEntry() * NS_TO_MS_FACTOR));
-    addLine(
-        planHeader,
-        1,
-        String.format("DeviceEntry Segment Count: %d", 
context.getDeviceEntrySegmentCount()));
-    addLine(
-        planHeader,
-        1,
-        String.format("DeviceEntry Sorted Run Count: %d", 
context.getDeviceEntrySortedRunCount()));
+            "Disk IO Time Cost for DeviceEntry During FetchSchema: %.3f ms",
+            context.getDiskIOTimeCostForDeviceEntryDuringFetchSchema() * 
NS_TO_MS_FACTOR));
+    addLine(planHeader, 1, String.format("DeviceEntry Count: %d", 
context.getDeviceEntryCount()));
     addLine(
         planHeader,
         0,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawer.java
index 9e727cd7517..ef887034dac 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawer.java
@@ -55,12 +55,13 @@ public class FragmentInstanceStatisticsJsonDrawer {
         "fetchPartitionCostMs", formatMs(context.getFetchPartitionCost() * 
NS_TO_MS_FACTOR));
     planStatistics.addProperty(
         "fetchSchemaCostMs", formatMs(context.getFetchSchemaCost() * 
NS_TO_MS_FACTOR));
-    planStatistics.addProperty("diskIOSizeForDeviceEntry", 
context.getDiskIOSizeForDeviceEntry());
     planStatistics.addProperty(
-        "diskIOTimeCostForDeviceEntryMs",
-        formatMs(context.getDiskIOTimeCostForDeviceEntry() * NS_TO_MS_FACTOR));
-    planStatistics.addProperty("deviceEntrySegmentCount", 
context.getDeviceEntrySegmentCount());
-    planStatistics.addProperty("deviceEntrySortedRunCount", 
context.getDeviceEntrySortedRunCount());
+        "diskIOSizeForDeviceEntryDuringFetchSchema",
+        context.getDiskIOSizeForDeviceEntryDuringFetchSchema());
+    planStatistics.addProperty(
+        "diskIOTimeCostForDeviceEntryDuringFetchSchemaMs",
+        formatMs(context.getDiskIOTimeCostForDeviceEntryDuringFetchSchema() * 
NS_TO_MS_FACTOR));
+    planStatistics.addProperty("deviceEntryCount", 
context.getDeviceEntryCount());
     planStatistics.addProperty(
         "logicalPlanCostMs", formatMs(context.getLogicalPlanCost() * 
NS_TO_MS_FACTOR));
     planStatistics.addProperty(
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 592d45d2e63..aa46addce37 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
@@ -19,8 +19,6 @@
 
 package org.apache.iotdb.db.queryengine.statistics;
 
-import java.util.concurrent.atomic.AtomicLong;
-
 public class QueryPlanStatistics {
   private long analyzeCost;
   private long fetchPartitionCost;
@@ -29,12 +27,9 @@ public class QueryPlanStatistics {
   private long logicalOptimizationCost;
   private long distributionPlanCost;
   private long dispatchCost = 0;
-  // DeviceEntry materialization may involve multiple Region materializers. 
Use the same
-  // lock-free accumulation style as execution.fragment.QueryStatistics.
-  private final AtomicLong diskIOSizeForDeviceEntry = new AtomicLong();
-  private final AtomicLong diskIOTimeCostForDeviceEntry = new AtomicLong();
-  private final AtomicLong deviceEntrySegmentCount = new AtomicLong();
-  private final AtomicLong deviceEntrySortedRunCount = new AtomicLong();
+  private long diskIOSizeForDeviceEntryDuringFetchSchema;
+  private long diskIOTimeCostForDeviceEntryDuringFetchSchema;
+  private long deviceEntryCount;
 
   public void setAnalyzeCost(long analyzeCost) {
     this.analyzeCost = analyzeCost;
@@ -92,32 +87,24 @@ public class QueryPlanStatistics {
     return dispatchCost;
   }
 
-  public void recordDeviceEntryDiskIO(long bytes, long timeCost) {
-    diskIOSizeForDeviceEntry.addAndGet(bytes);
-    diskIOTimeCostForDeviceEntry.addAndGet(timeCost);
-  }
-
-  public void recordDeviceEntrySegment() {
-    deviceEntrySegmentCount.incrementAndGet();
-  }
-
-  public void recordDeviceEntrySortedRun() {
-    deviceEntrySortedRunCount.incrementAndGet();
+  public void recordDeviceEntryDiskIODuringFetchSchema(long bytes, long 
timeCost) {
+    diskIOSizeForDeviceEntryDuringFetchSchema += bytes;
+    diskIOTimeCostForDeviceEntryDuringFetchSchema += timeCost;
   }
 
-  public long getDiskIOSizeForDeviceEntry() {
-    return diskIOSizeForDeviceEntry.get();
+  public void recordDeviceEntryCount(long count) {
+    deviceEntryCount += count;
   }
 
-  public long getDiskIOTimeCostForDeviceEntry() {
-    return diskIOTimeCostForDeviceEntry.get();
+  public long getDiskIOSizeForDeviceEntryDuringFetchSchema() {
+    return diskIOSizeForDeviceEntryDuringFetchSchema;
   }
 
-  public long getDeviceEntrySegmentCount() {
-    return deviceEntrySegmentCount.get();
+  public long getDiskIOTimeCostForDeviceEntryDuringFetchSchema() {
+    return diskIOTimeCostForDeviceEntryDuringFetchSchema;
   }
 
-  public long getDeviceEntrySortedRunCount() {
-    return deviceEntrySortedRunCount.get();
+  public long getDeviceEntryCount() {
+    return deviceEntryCount;
   }
 }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawerTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawerTest.java
index ae76d47b3fe..4dd52b45d71 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawerTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/statistics/FragmentInstanceStatisticsJsonDrawerTest.java
@@ -60,10 +60,8 @@ public class FragmentInstanceStatisticsJsonDrawerTest {
     context.setLogicalPlanCost(4000000L); // 4ms
     context.setLogicalOptimizationCost(5000000L); // 5ms
     context.setDistributionPlanCost(6000000L); // 6ms
-    context.recordDeviceEntryDiskIO(8192L, 7000000L); // 8 KiB, 7ms
-    context.recordDeviceEntrySegment();
-    context.recordDeviceEntrySegment();
-    context.recordDeviceEntrySortedRun();
+    context.recordDeviceEntryDiskIODuringFetchSchema(8192L, 7000000L); // 8 
KiB, 7ms
+    context.recordDeviceEntryCount(3);
 
     drawer.renderPlanStatistics(context);
 
@@ -82,10 +80,10 @@ public class FragmentInstanceStatisticsJsonDrawerTest {
     assertEquals(4.0, planStats.get("logicalPlanCostMs").getAsDouble(), 0.01);
     assertEquals(5.0, 
planStats.get("logicalOptimizationCostMs").getAsDouble(), 0.01);
     assertEquals(6.0, planStats.get("distributionPlanCostMs").getAsDouble(), 
0.01);
-    assertEquals(8192L, planStats.get("diskIOSizeForDeviceEntry").getAsLong());
-    assertEquals(7.0, 
planStats.get("diskIOTimeCostForDeviceEntryMs").getAsDouble(), 0.01);
-    assertEquals(2L, planStats.get("deviceEntrySegmentCount").getAsLong());
-    assertEquals(1L, planStats.get("deviceEntrySortedRunCount").getAsLong());
+    assertEquals(8192L, 
planStats.get("diskIOSizeForDeviceEntryDuringFetchSchema").getAsLong());
+    assertEquals(
+        7.0, 
planStats.get("diskIOTimeCostForDeviceEntryDuringFetchSchemaMs").getAsDouble(), 
0.01);
+    assertEquals(3L, planStats.get("deviceEntryCount").getAsLong());
   }
 
   @Test

Reply via email to