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
+ }
}