This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new d59f30dfdfc [to dev/1.3] fix memory cost for aligned TVList (#15081)
d59f30dfdfc is described below
commit d59f30dfdfc9415e741c114eeafb4ef88f4bf7fc
Author: shizy <[email protected]>
AuthorDate: Thu Mar 13 19:48:25 2025 +0800
[to dev/1.3] fix memory cost for aligned TVList (#15081)
---
.../db/utils/datastructure/AlignedTVList.java | 10 ++++----
.../dataregion/memtable/TsFileProcessorTest.java | 28 +++++++++++-----------
2 files changed, 20 insertions(+), 18 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
index c03cbd9f770..679ffe2d669 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
@@ -822,11 +822,10 @@ public abstract class AlignedTVList extends TVList {
public static long alignedTvListArrayMemCost(TSDataType[] types) {
int measurementColumnNum = 0;
long size = 0;
- // value & bitmap array mem size
+ // value array mem size
for (TSDataType type : types) {
if (type != null) {
size += (long) ARRAY_SIZE * (long) type.getDataTypeSize();
- size += (long) ARRAY_SIZE / 8 + 1;
measurementColumnNum++;
}
}
@@ -851,10 +850,13 @@ public abstract class AlignedTVList extends TVList {
public long alignedTvListArrayMemCost() {
long size = 0;
// value & bitmap array mem size
- for (TSDataType type : dataTypes) {
+ for (int column = 0; column < dataTypes.size(); column++) {
+ TSDataType type = dataTypes.get(column);
if (type != null) {
size += (long) PrimitiveArrayManager.ARRAY_SIZE * (long)
type.getDataTypeSize();
- size += (long) PrimitiveArrayManager.ARRAY_SIZE / 8 + 1;
+ if (bitMaps != null && bitMaps.get(column) != null) {
+ size += (long) PrimitiveArrayManager.ARRAY_SIZE / 8 + 1;
+ }
}
}
// size is 0 when all types are null
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessorTest.java
index fff624e4f54..d4e5e379baa 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/TsFileProcessorTest.java
@@ -685,11 +685,11 @@ public class TsFileProcessorTest {
// Test Tablet
processor.insertTablet(genInsertTableNode(0, true), 0, 10, new
TSStatus[10]);
IMemTable memTable = processor.getWorkMemTable();
- Assert.assertEquals(1623552, memTable.getTVListsRamCost());
+ Assert.assertEquals(1596552, memTable.getTVListsRamCost());
processor.insertTablet(genInsertTableNode(100, true), 0, 10, new
TSStatus[10]);
- Assert.assertEquals(1623552, memTable.getTVListsRamCost());
+ Assert.assertEquals(1596552, memTable.getTVListsRamCost());
processor.insertTablet(genInsertTableNode(200, true), 0, 10, new
TSStatus[10]);
- Assert.assertEquals(1623552, memTable.getTVListsRamCost());
+ Assert.assertEquals(1596552, memTable.getTVListsRamCost());
Assert.assertEquals(90000, memTable.getTotalPointsNum());
Assert.assertEquals(720360, memTable.memSize());
// Test records
@@ -698,7 +698,7 @@ public class TsFileProcessorTest {
record.addTuple(DataPoint.getDataPoint(dataType, measurementId,
String.valueOf(i)));
processor.insert(buildInsertRowNodeByTSRecord(record), new long[4]);
}
- Assert.assertEquals(1625168, memTable.getTVListsRamCost());
+ Assert.assertEquals(1598168, memTable.getTVListsRamCost());
Assert.assertEquals(90100, memTable.getTotalPointsNum());
Assert.assertEquals(721560, memTable.memSize());
}
@@ -721,21 +721,21 @@ public class TsFileProcessorTest {
// Test Tablet
processor.insertTablet(genInsertTableNode(0, true), 0, 10, new
TSStatus[10]);
IMemTable memTable = processor.getWorkMemTable();
- Assert.assertEquals(1623552, memTable.getTVListsRamCost());
+ Assert.assertEquals(1596552, memTable.getTVListsRamCost());
processor.insertTablet(genInsertTableNodeFors3000ToS6000(0, true), 0, 10,
new TSStatus[10]);
- Assert.assertEquals(3246552, memTable.getTVListsRamCost());
+ Assert.assertEquals(3219552, memTable.getTVListsRamCost());
processor.insertTablet(genInsertTableNode(100, true), 0, 10, new
TSStatus[10]);
- Assert.assertEquals(3246552, memTable.getTVListsRamCost());
+ Assert.assertEquals(3219552, memTable.getTVListsRamCost());
processor.insertTablet(genInsertTableNodeFors3000ToS6000(100, true), 0,
10, new TSStatus[10]);
- Assert.assertEquals(3246552, memTable.getTVListsRamCost());
+ Assert.assertEquals(3219552, memTable.getTVListsRamCost());
processor.insertTablet(genInsertTableNode(200, true), 0, 10, new
TSStatus[10]);
- Assert.assertEquals(3246552, memTable.getTVListsRamCost());
+ Assert.assertEquals(3219552, memTable.getTVListsRamCost());
processor.insertTablet(genInsertTableNodeFors3000ToS6000(200, true), 0,
10, new TSStatus[10]);
- Assert.assertEquals(3246552, memTable.getTVListsRamCost());
+ Assert.assertEquals(3219552, memTable.getTVListsRamCost());
processor.insertTablet(genInsertTableNode(300, true), 0, 10, new
TSStatus[10]);
- Assert.assertEquals(6493104, memTable.getTVListsRamCost());
+ Assert.assertEquals(6466104, memTable.getTVListsRamCost());
processor.insertTablet(genInsertTableNodeFors3000ToS6000(300, true), 0,
10, new TSStatus[10]);
- Assert.assertEquals(6493104, memTable.getTVListsRamCost());
+ Assert.assertEquals(6466104, memTable.getTVListsRamCost());
Assert.assertEquals(240000, memTable.getTotalPointsNum());
Assert.assertEquals(1920960, memTable.memSize());
@@ -745,14 +745,14 @@ public class TsFileProcessorTest {
record.addTuple(DataPoint.getDataPoint(dataType, measurementId,
String.valueOf(i)));
processor.insert(buildInsertRowNodeByTSRecord(record), new long[4]);
}
- Assert.assertEquals(6494720, memTable.getTVListsRamCost());
+ Assert.assertEquals(6467720, memTable.getTVListsRamCost());
// Test records
for (int i = 1; i <= 100; i++) {
TSRecord record = new TSRecord(i, deviceId);
record.addTuple(DataPoint.getDataPoint(dataType, "s1",
String.valueOf(i)));
processor.insert(buildInsertRowNodeByTSRecord(record), new long[4]);
}
- Assert.assertEquals(6496336, memTable.getTVListsRamCost());
+ Assert.assertEquals(6469336, memTable.getTVListsRamCost());
Assert.assertEquals(240200, memTable.getTotalPointsNum());
Assert.assertEquals(1923360, memTable.memSize());
}