This is an automated email from the ASF dual-hosted git repository.
justinchen pushed a commit to branch fix-measurement-master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/fix-measurement-master by this
push:
new 13240d10024 fix
13240d10024 is described below
commit 13240d10024fd961b3b6a3698e4a3d64a2d83bb0
Author: Caideyipi <[email protected]>
AuthorDate: Thu Apr 9 11:22:59 2026 +0800
fix
---
.../pipe/resource/memory/PipeMemoryWeightUtil.java | 33 ++++++++++++++--------
.../apache/iotdb/commons/conf/CommonConfig.java | 4 ++-
2 files changed, 24 insertions(+), 13 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/resource/memory/PipeMemoryWeightUtil.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/resource/memory/PipeMemoryWeightUtil.java
index 458434d8494..79d49440d67 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/resource/memory/PipeMemoryWeightUtil.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/resource/memory/PipeMemoryWeightUtil.java
@@ -118,7 +118,10 @@ public class PipeMemoryWeightUtil {
}
}
- return calculateTabletRowCountAndMemoryBySize(totalSizeInBytes,
schemaCount);
+ return calculateTabletRowCountAndMemoryBySize(
+ totalSizeInBytes,
+ schemaCount,
+ PipeConfig.getInstance().getPipeDataStructureTabletRowSize());
}
/**
@@ -163,7 +166,8 @@ public class PipeMemoryWeightUtil {
}
}
- return calculateTabletRowCountAndMemoryBySize(totalSizeInBytes,
schemaCount);
+ return calculateTabletRowCountAndMemoryBySize(
+ totalSizeInBytes, schemaCount, batchData.length());
}
/**
@@ -173,22 +177,28 @@ public class PipeMemoryWeightUtil {
* @return left is the row count of tablet, right is the memory cost of
tablet in bytes
*/
public static Pair<Integer, Integer>
calculateTabletRowCountAndMemory(PipeRow row) {
- return calculateTabletRowCountAndMemoryBySize(row.getCurrentRowSize(),
row.size());
+ return calculateTabletRowCountAndMemoryBySize(
+ row.getCurrentRowSize(),
+ row.size(),
+ PipeConfig.getInstance().getPipeDataStructureTabletRowSize());
}
private static Pair<Integer, Integer> calculateTabletRowCountAndMemoryBySize(
- int rowSize, int schemaCount) {
- if (rowSize <= 0) {
+ int rowBytesUsed, int schemaCount, int inputNum) {
+ if (rowBytesUsed <= 0) {
return new Pair<>(1, 0);
}
// Calculate row number according to the max size of a pipe tablet.
// "-100" is the estimated size of other data structures in a pipe tablet.
// "*8" converts bytes to bits, because the bitmap size is 1 bit per
schema.
- int rowNumber =
- 8
- *
(PipeConfig.getInstance().getPipeDataStructureTabletSizeInBytes() - 100)
- / (8 * rowSize + schemaCount);
+ // Here we estimate the max use of
+ int sizeLimit =
+ Math.min(
+ PipeConfig.getInstance().getPipeDataStructureTabletSizeInBytes(),
+ (int) (inputNum * rowBytesUsed * 1.2));
+
+ int rowNumber = 8 * (sizeLimit - 100) / (8 * rowBytesUsed + schemaCount);
rowNumber = Math.max(1, rowNumber);
if ( // This means the row number is larger than the max row count of a
pipe tablet
@@ -196,10 +206,9 @@ public class PipeMemoryWeightUtil {
// Bound the row number, the memory cost is rowSize * rowNumber
return new Pair<>(
PipeConfig.getInstance().getPipeDataStructureTabletRowSize(),
- rowSize *
PipeConfig.getInstance().getPipeDataStructureTabletRowSize());
+ rowBytesUsed *
PipeConfig.getInstance().getPipeDataStructureTabletRowSize());
} else {
- return new Pair<>(
- rowNumber,
PipeConfig.getInstance().getPipeDataStructureTabletSizeInBytes());
+ return new Pair<>(rowNumber, sizeLimit);
}
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
index ff4a47b6f84..8550801af1c 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/conf/CommonConfig.java
@@ -218,7 +218,9 @@ public class CommonConfig {
private boolean pipeRetryLocallyForParallelOrUserConflict = true;
private int pipeDataStructureTabletRowSize = 2048;
- private int pipeDataStructureTabletSizeInBytes = 2097152;
+
+ // 128MB
+ private int pipeDataStructureTabletSizeInBytes = 128 * 1024 * 1024;
private double pipeDataStructureTabletMemoryBlockAllocationRejectThreshold =
0.3;
private double pipeDataStructureTsFileMemoryBlockAllocationRejectThreshold =
0.3;
private volatile double pipeTotalFloatingMemoryProportion = 0.5;