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

jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 5d931cded42 Add more query metrics for estimated memory and max 
overlapped page
5d931cded42 is described below

commit 5d931cded427246262b670249e8fa1fc1887f346
Author: Beyyes <[email protected]>
AuthorDate: Mon Mar 18 17:54:24 2024 +0800

    Add more query metrics for estimated memory and max overlapped page
---
 .../fragment/FragmentInstanceContext.java          |  3 +++
 .../execution/fragment/QueryStatistics.java        |  2 ++
 .../execution/operator/source/SeriesScanUtil.java  | 12 ++++++++++
 .../metric/QueryRelatedResourceMetricSet.java      | 14 +++++++++++
 .../metric/SeriesScanCostMetricSet.java            | 22 ++++++++++++++++++
 .../plan/planner/LocalExecutionPlanner.java        |  5 ++--
 .../read/reader/chunk/MemChunkReader.java          |  6 +++++
 .../dataregion/read/reader/common/Element.java     | 10 +++++---
 .../read/reader/common/PriorityMergeReader.java    | 27 ++++++++++++++++++----
 .../builder/EvaluationDAGBuilderTest.java          |  2 ++
 .../read/reader/common/FakedSeriesReader.java      |  6 +++++
 .../iotdb/commons/service/metric/enums/Metric.java |  1 +
 .../apache/iotdb/tsfile/read/common/BatchData.java |  6 +++++
 .../iotdb/tsfile/read/common/block/TsBlock.java    | 10 ++++++++
 .../iotdb/tsfile/read/reader/IPointReader.java     |  2 ++
 .../page/LazyLoadAlignedPagePointReader.java       | 14 ++++++++---
 16 files changed, 129 insertions(+), 13 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
index 89a2e60ef8e..b752c398818 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
@@ -543,6 +543,9 @@ public class FragmentInstanceContext extends QueryContext {
             getQueryStatistics().pageReadersDecodeAlignedDiskTime.get(),
             getQueryStatistics().pageReadersDecodeNonAlignedMemTime.get(),
             getQueryStatistics().pageReadersDecodeNonAlignedDiskTime.get());
+
+    SeriesScanCostMetricSet.getInstance()
+        
.updatePageReaderMemoryUsage(getQueryStatistics().pageReaderMaxUsedMemorySize.get());
   }
 
   private void releaseDataNodeQueryContext() {
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 60cd84b111e..82094467034 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
@@ -69,6 +69,8 @@ public class QueryStatistics {
   public AtomicLong pageReadersDecodeNonAlignedMemCount = new AtomicLong(0);
   public AtomicLong pageReadersDecodeNonAlignedMemTime = new AtomicLong(0);
 
+  public AtomicLong pageReaderMaxUsedMemorySize = new AtomicLong(0);
+
   public TQueryStatistics toThrift() {
     return new TQueryStatistics(
         loadTimeSeriesMetadataDiskSeqCount.get(),
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
index cd1dc52e575..0917ccfb86b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
@@ -791,6 +791,10 @@ public class SeriesScanUtil {
                         
firstPageReader.getAllSatisfiedPageData(orderUtils.getAscending())),
                     firstPageReader.version,
                     
orderUtils.getOverlapCheckTime(firstPageReader.getStatistics()));
+                context
+                    .getQueryStatistics()
+                    .pageReaderMaxUsedMemorySize
+                    .updateAndGet(v -> Math.max(v, 
mergeReader.getUsedMemorySize()));
                 currentPageEndPointTime =
                     updateEndPointTime(currentPageEndPointTime, 
firstPageReader);
                 firstPageReader = null;
@@ -815,6 +819,10 @@ public class SeriesScanUtil {
                     
getPointReader(pageReader.getAllSatisfiedPageData(orderUtils.getAscending())),
                     pageReader.version,
                     
orderUtils.getOverlapCheckTime(pageReader.getStatistics()));
+                context
+                    .getQueryStatistics()
+                    .pageReaderMaxUsedMemorySize
+                    .updateAndGet(v -> Math.max(v, 
mergeReader.getUsedMemorySize()));
                 currentPageEndPointTime = 
updateEndPointTime(currentPageEndPointTime, pageReader);
               }
             }
@@ -987,6 +995,10 @@ public class SeriesScanUtil {
         
getPointReader(pageReader.getAllSatisfiedPageData(orderUtils.getAscending())),
         pageReader.version,
         orderUtils.getOverlapCheckTime(pageReader.getStatistics()));
+    context
+        .getQueryStatistics()
+        .pageReaderMaxUsedMemorySize
+        .updateAndGet(v -> Math.max(v, mergeReader.getUsedMemorySize()));
   }
 
   private TsBlock nextOverlappedPage() throws IOException {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/QueryRelatedResourceMetricSet.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/QueryRelatedResourceMetricSet.java
index f0efaf4d52a..a5f5d9ed4e0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/QueryRelatedResourceMetricSet.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/QueryRelatedResourceMetricSet.java
@@ -99,6 +99,12 @@ public class QueryRelatedResourceMetricSet implements 
IMetricSet {
       LocalExecutionPlanner.getInstance();
   private static final String LOCAL_EXECUTION_PLANNER = 
Metric.LOCAL_EXECUTION_PLANNER.toString();
   private static final String FREE_MEMORY_FOR_OPERATORS = 
"free_memory_for_operators";
+  private static final String ESTIMATED_MEMORY_SIZE = "estimated_memory_size";
+  private Histogram estimatedMemoryHistogram = 
DoNothingMetricManager.DO_NOTHING_HISTOGRAM;
+
+  public void updateEstimatedMemory(long memory) {
+    estimatedMemoryHistogram.update(memory);
+  }
 
   @Override
   public void bindTo(AbstractMetricService metricService) {
@@ -179,6 +185,12 @@ public class QueryRelatedResourceMetricSet implements 
IMetricSet {
         LocalExecutionPlanner::getFreeMemoryForOperators,
         Tag.NAME.toString(),
         FREE_MEMORY_FOR_OPERATORS);
+    estimatedMemoryHistogram =
+        metricService.getOrCreateHistogram(
+            LOCAL_EXECUTION_PLANNER,
+            MetricLevel.IMPORTANT,
+            Tag.NAME.toString(),
+            ESTIMATED_MEMORY_SIZE);
   }
 
   @Override
@@ -231,6 +243,8 @@ public class QueryRelatedResourceMetricSet implements 
IMetricSet {
         LOCAL_EXECUTION_PLANNER,
         Tag.NAME.toString(),
         FREE_MEMORY_FOR_OPERATORS);
+    metricService.remove(
+        MetricType.HISTOGRAM, LOCAL_EXECUTION_PLANNER, Tag.NAME.toString(), 
ESTIMATED_MEMORY_SIZE);
   }
 
   private QueryRelatedResourceMetricSet() {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java
index 44df56d7961..d6232f4c4c6 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/metric/SeriesScanCostMetricSet.java
@@ -970,6 +970,7 @@ public class SeriesScanCostMetricSet implements IMetricSet {
   private static final String BUILD_TSBLOCK_FROM_PAGE_READER = 
"build_tsblock_from_page_reader";
   private static final String HISTOGRAM_BUILD_TSBLOCK_FROM_PAGE_READER =
       "histogram_build_tsblock_from_page_reader";
+  private static final String PAGE_READER_MAX_USED_MEMORY_SIZE = 
"page_reader_max_used_memory_size";
 
   private Histogram pageReadersDecodeAlignedMemHistogram =
       DoNothingMetricManager.DO_NOTHING_HISTOGRAM;
@@ -980,6 +981,8 @@ public class SeriesScanCostMetricSet implements IMetricSet {
   private Histogram pageReadersDecodeNonAlignedDiskHistogram =
       DoNothingMetricManager.DO_NOTHING_HISTOGRAM;
 
+  private Histogram pageReaderMaxMemoryHistogram = 
DoNothingMetricManager.DO_NOTHING_HISTOGRAM;
+
   private Timer pageReadersDecodeAlignedMemTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
   private Timer pageReadersDecodeAlignedDiskTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
   private Timer pageReadersDecodeNonAlignedMemTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
@@ -1004,6 +1007,10 @@ public class SeriesScanCostMetricSet implements 
IMetricSet {
     pageReadersDecodeNonAlignedDiskTimer.updateNanos(nonAlignedDiskTime);
   }
 
+  public void updatePageReaderMemoryUsage(long memorySize) {
+    pageReaderMaxMemoryHistogram.update(memorySize);
+  }
+
   private void bindTsBlockFromPageReader(AbstractMetricService metricService) {
     pageReadersDecodeAlignedMemHistogram =
         metricService.getOrCreateHistogram(
@@ -1086,6 +1093,13 @@ public class SeriesScanCostMetricSet implements 
IMetricSet {
             NON_ALIGNED,
             Tag.FROM.toString(),
             DISK);
+
+    pageReaderMaxMemoryHistogram =
+        metricService.getOrCreateHistogram(
+            Metric.MEMORY_USAGE_MONITOR.toString(),
+            MetricLevel.IMPORTANT,
+            Tag.TYPE.toString(),
+            PAGE_READER_MAX_USED_MEMORY_SIZE);
   }
 
   private void unbindTsBlockFromPageReader(AbstractMetricService 
metricService) {
@@ -1093,6 +1107,8 @@ public class SeriesScanCostMetricSet implements 
IMetricSet {
     pageReadersDecodeAlignedDiskHistogram = 
DoNothingMetricManager.DO_NOTHING_HISTOGRAM;
     pageReadersDecodeNonAlignedMemHistogram = 
DoNothingMetricManager.DO_NOTHING_HISTOGRAM;
     pageReadersDecodeNonAlignedDiskHistogram = 
DoNothingMetricManager.DO_NOTHING_HISTOGRAM;
+    pageReaderMaxMemoryHistogram = DoNothingMetricManager.DO_NOTHING_HISTOGRAM;
+
     pageReadersDecodeAlignedMemTimer = DoNothingMetricManager.DO_NOTHING_TIMER;
     pageReadersDecodeAlignedDiskTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
     pageReadersDecodeNonAlignedMemTimer = 
DoNothingMetricManager.DO_NOTHING_TIMER;
@@ -1121,6 +1137,12 @@ public class SeriesScanCostMetricSet implements 
IMetricSet {
             from);
       }
     }
+
+    metricService.remove(
+        MetricType.HISTOGRAM,
+        Metric.MEMORY_USAGE_MONITOR.toString(),
+        Tag.TYPE.toString(),
+        PAGE_READER_MAX_USED_MEMORY_SIZE);
   }
 
   
/////////////////////////////////////////////////////////////////////////////////////////////////
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
index 2e509a57999..6acd4e1b716 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LocalExecutionPlanner.java
@@ -27,6 +27,7 @@ import 
org.apache.iotdb.db.queryengine.execution.fragment.DataNodeQueryContext;
 import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceContext;
 import 
org.apache.iotdb.db.queryengine.execution.fragment.FragmentInstanceStateMachine;
 import org.apache.iotdb.db.queryengine.execution.operator.Operator;
+import org.apache.iotdb.db.queryengine.metric.QueryRelatedResourceMetricSet;
 import org.apache.iotdb.db.queryengine.plan.analyze.TypeProvider;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.schemaengine.schemaregion.ISchemaRegion;
@@ -54,8 +55,7 @@ public class LocalExecutionPlanner {
     ALLOCATE_MEMORY_FOR_OPERATORS = CONFIG.getAllocateMemoryForOperators();
     MAX_REST_MEMORY_FOR_LOAD =
         (long)
-            (((double) ALLOCATE_MEMORY_FOR_OPERATORS)
-                * (1.0 - CONFIG.getMaxAllocateMemoryRatioForLoad()));
+            ((ALLOCATE_MEMORY_FOR_OPERATORS) * (1.0 - 
CONFIG.getMaxAllocateMemoryRatioForLoad()));
   }
 
   /** allocated memory for operator execution */
@@ -126,6 +126,7 @@ public class LocalExecutionPlanner {
     }
 
     long estimatedMemorySize = root.calculateMaxPeekMemoryWithCounter();
+    
QueryRelatedResourceMetricSet.getInstance().updateEstimatedMemory(estimatedMemorySize);
 
     synchronized (this) {
       if (estimatedMemorySize > freeMemoryForOperators) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkReader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkReader.java
index 90719ade794..4a9844ad2cc 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkReader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkReader.java
@@ -98,6 +98,12 @@ public class MemChunkReader implements IChunkReader, 
IPointReader {
     return pageReaderList.remove(0).getAllSatisfiedPageData();
   }
 
+  @Override
+  public long getUsedMemorySize() {
+    // not used
+    return timeValuePairIterator.getUsedMemorySize();
+  }
+
   @Override
   public void close() {
     // Do nothing because mem chunk reader will not open files
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/Element.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/Element.java
index 2f73c00a119..746701b8753 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/Element.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/Element.java
@@ -26,9 +26,9 @@ import java.io.IOException;
 
 public class Element {
 
-  public PriorityMergeReader.MergeReaderPriority priority;
-  protected IPointReader reader;
-  public TimeValuePair timeValuePair;
+  private final PriorityMergeReader.MergeReaderPriority priority;
+  private final IPointReader reader;
+  private TimeValuePair timeValuePair;
 
   public Element(
       IPointReader reader,
@@ -67,6 +67,10 @@ public class Element {
     return timeValuePair;
   }
 
+  public void setTimeValuePair(TimeValuePair timeValuePair) {
+    this.timeValuePair = timeValuePair;
+  }
+
   public PriorityMergeReader.MergeReaderPriority getPriority() {
     return priority;
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/PriorityMergeReader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/PriorityMergeReader.java
index de0281e7b6d..330c856ded0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/PriorityMergeReader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/PriorityMergeReader.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.storageengine.dataregion.read.reader.common;
 
+import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.read.reader.IPointReader;
 
@@ -36,16 +37,20 @@ public class PriorityMergeReader implements IPointReader {
 
   protected PriorityQueue<Element> heap;
 
+  protected long usedMemorySize = 0;
+
   public PriorityMergeReader() {
     heap =
         new PriorityQueue<>(
             (o1, o2) -> {
               int timeCompare =
-                  Long.compare(o1.timeValuePair.getTimestamp(), 
o2.timeValuePair.getTimestamp());
-              return timeCompare != 0 ? timeCompare : 
o2.priority.compareTo(o1.priority);
+                  Long.compare(
+                      o1.getTimeValuePair().getTimestamp(), 
o2.getTimeValuePair().getTimestamp());
+              return timeCompare != 0 ? timeCompare : 
o2.getPriority().compareTo(o1.getPriority());
             });
   }
 
+  @TestOnly
   public void addReader(IPointReader reader, long priority) throws IOException 
{
     if (reader.hasNextTimeValuePair()) {
       heap.add(
@@ -58,8 +63,10 @@ public class PriorityMergeReader implements IPointReader {
   public void addReader(IPointReader reader, MergeReaderPriority priority, 
long endTime)
       throws IOException {
     if (reader.hasNextTimeValuePair()) {
-      heap.add(new Element(reader, reader.nextTimeValuePair(), priority));
+      Element element = new Element(reader, reader.nextTimeValuePair(), 
priority);
+      heap.add(element);
       currentReadStopTime = Math.max(currentReadStopTime, endTime);
+      usedMemorySize += element.getReader().getUsedMemorySize();
     } else {
       reader.close();
     }
@@ -85,8 +92,10 @@ public class PriorityMergeReader implements IPointReader {
     }
     updateHeap(ret, topNext);
     if (topNext != null) {
-      top.timeValuePair = topNext;
+      top.setTimeValuePair(topNext);
       heap.add(top);
+    } else {
+      usedMemorySize -= top.getReader().getUsedMemorySize();
     }
     return ret;
   }
@@ -111,7 +120,8 @@ public class PriorityMergeReader implements IPointReader {
       Element e = heap.poll();
       fillNullValue(ret, e.getTimeValuePair());
       if (!e.hasNext()) {
-        e.reader.close();
+        usedMemorySize -= e.getReader().getUsedMemorySize();
+        e.getReader().close();
         continue;
       }
       e.next();
@@ -122,6 +132,7 @@ public class PriorityMergeReader implements IPointReader {
           e.next();
           heap.add(e);
         } else {
+          usedMemorySize -= e.getReader().getUsedMemorySize();
           // the chunk is end
           e.close();
         }
@@ -136,12 +147,18 @@ public class PriorityMergeReader implements IPointReader {
     // do nothing for non-aligned time series
   }
 
+  @Override
+  public long getUsedMemorySize() {
+    return usedMemorySize;
+  }
+
   @Override
   public void close() throws IOException {
     while (!heap.isEmpty()) {
       Element e = heap.poll();
       e.close();
     }
+    usedMemorySize = 0;
   }
 
   public static class MergeReaderPriority implements 
Comparable<MergeReaderPriority> {
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/transformation/builder/EvaluationDAGBuilderTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/transformation/builder/EvaluationDAGBuilderTest.java
index 3a62b64ff3e..52c34a9c313 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/transformation/builder/EvaluationDAGBuilderTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/transformation/builder/EvaluationDAGBuilderTest.java
@@ -22,6 +22,7 @@ package 
org.apache.iotdb.db.queryengine.transformation.builder;
 import org.apache.iotdb.common.rpc.thrift.TEndPoint;
 import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.commons.udf.service.UDFClassLoaderManager;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.queryengine.common.FragmentInstanceId;
 import org.apache.iotdb.db.queryengine.common.MPPQueryContext;
 import org.apache.iotdb.db.queryengine.common.PlanFragmentId;
@@ -67,6 +68,7 @@ public class EvaluationDAGBuilderTest {
     String sql =
         "select s1 + 1, s1 * 2, s1 - 2, s1 / 3, sin(s1), 
m4(s1,'windowSize'='10') from root.sg.d1;";
     try {
+      IoTDBDescriptor.getInstance().getConfig().setDataNodeId(1);
       Operator operator = generateOperatorTree(sql);
       Assert.assertNotNull(operator);
       TransformOperator transformOperator =
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/FakedSeriesReader.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/FakedSeriesReader.java
index 86cae386bb5..ac5d2ceaf4e 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/FakedSeriesReader.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/FakedSeriesReader.java
@@ -80,6 +80,12 @@ public class FakedSeriesReader implements IPointReader {
     throw new IOException("current() in FakedPrioritySeriesReader is an empty 
method.");
   }
 
+  @Override
+  public long getUsedMemorySize() {
+    // not used
+    return 0;
+  }
+
   @Override
   public void close() {}
 }
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
index e948c49ce79..4a60286d4c1 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/service/metric/enums/Metric.java
@@ -101,6 +101,7 @@ public enum Metric {
   OPERATOR_EXECUTION_COST("operator_execution_cost"),
   OPERATOR_EXECUTION_COUNT("operator_execution_count"),
   SERIES_SCAN_COST("series_scan_cost"),
+  MEMORY_USAGE_MONITOR("memory_usage_monitor"),
   METRIC_LOAD_TIME_SERIES_METADATA("metric_load_time_series_metadata"),
   QUERY_METADATA_COST("query_metadata_cost"),
   DISPATCHER("dispatcher"),
diff --git 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java
 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java
index 4d57583d80a..e79da513ac8 100644
--- 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java
+++ 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/BatchData.java
@@ -855,6 +855,12 @@ public class BatchData {
       return new TimeValuePair(currentTime(), currentTsPrimitiveType());
     }
 
+    @Override
+    public long getUsedMemorySize() {
+      // not used
+      return 0;
+    }
+
     @Override
     public void close() {
       // do nothing
diff --git 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlock.java
 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlock.java
index 668b396c7bd..39233628159 100644
--- 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlock.java
+++ 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlock.java
@@ -305,6 +305,11 @@ public class TsBlock {
           timeColumn.getLong(rowIndex), 
valueColumns[columnIndex].getTsPrimitiveType(rowIndex));
     }
 
+    @Override
+    public long getUsedMemorySize() {
+      return getRetainedSizeInBytes();
+    }
+
     @Override
     public void close() {
       // do nothing
@@ -440,6 +445,11 @@ public class TsBlock {
           timeColumn.getLong(rowIndex), new 
TsPrimitiveType.TsVector(currentValue()));
     }
 
+    @Override
+    public long getUsedMemorySize() {
+      return getRetainedSizeInBytes();
+    }
+
     @Override
     public void close() {
       // do nothing
diff --git 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPointReader.java
 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPointReader.java
index d29d70d063b..31dcd1235d7 100644
--- 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPointReader.java
+++ 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPointReader.java
@@ -31,5 +31,7 @@ public interface IPointReader {
 
   TimeValuePair currentTimeValuePair() throws IOException;
 
+  long getUsedMemorySize();
+
   void close() throws IOException;
 }
diff --git 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/LazyLoadAlignedPagePointReader.java
 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/LazyLoadAlignedPagePointReader.java
index e967305e5a5..4636b52ecbf 100644
--- 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/LazyLoadAlignedPagePointReader.java
+++ 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/LazyLoadAlignedPagePointReader.java
@@ -32,8 +32,8 @@ import java.util.List;
  */
 public class LazyLoadAlignedPagePointReader implements IPointReader {
 
-  private TimePageReader timeReader;
-  private List<ValuePageReader> valueReaders;
+  private final TimePageReader timeReader;
+  private final List<ValuePageReader> valueReaders;
 
   private boolean hasNextRow = false;
 
@@ -93,5 +93,13 @@ public class LazyLoadAlignedPagePointReader implements 
IPointReader {
   }
 
   @Override
-  public void close() throws IOException {}
+  public long getUsedMemorySize() {
+    // not used
+    return 0;
+  }
+
+  @Override
+  public void close() throws IOException {
+    // do nothing
+  }
 }

Reply via email to