This is an automated email from the ASF dual-hosted git repository. tanxinyu pushed a commit to branch optimize_single_device_tablet_v3_iotv1 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 969c19db4a763c448628f5c9df192e75ae62c972 Author: OneSizeFitQuorum <[email protected]> AuthorDate: Tue Mar 18 18:39:28 2025 +0800 try Signed-off-by: OneSizeFitQuorum <[email protected]> --- .../execution/executor/RegionWriteExecutor.java | 7 ++++++- .../plan/planner/plan/node/write/InsertNode.java | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java index fc3013b6240..292f83f9020 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java @@ -193,7 +193,6 @@ public class RegionWriteExecutor { TSStatusCode.SYSTEM_READ_ONLY, "Fail to do non-query operations because system is read-only.")); } - try { final TSStatus status = executePlanNodeInConsensusLayer(context.getRegionId(), node); return RegionExecutionResult.create( @@ -217,6 +216,10 @@ public class RegionWriteExecutor { private TSStatus executePlanNodeInConsensusLayer( final ConsensusGroupId groupId, final PlanNode planNode) throws ConsensusException { if (groupId instanceof DataRegionId) { + if (planNode instanceof InsertNode) { + ((InsertNode) planNode).cachedByteBuffer(); + planNode.getMemorySize(); + } return dataRegionConsensus.write(groupId, planNode); } else { return schemaRegionConsensus.write(groupId, planNode); @@ -308,6 +311,8 @@ public class RegionWriteExecutor { "Failed to complete the insertion because trigger error before the insertion."); } else { final long startWriteTime = System.nanoTime(); + if (CONFIG.getDataRegionNum()) insertNode.cachedByteBuffer(); + insertNode.getMemorySize(); status = dataRegionConsensus.write(groupId, insertNode); PERFORMANCE_OVERVIEW_METRICS.recordScheduleStorageCost(System.nanoTime() - startWriteTime); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java index 102119269bb..6607760e40b 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertNode.java @@ -91,6 +91,8 @@ public abstract class InsertNode extends SearchNode { private static final DeviceIDFactory deviceIDFactory = DeviceIDFactory.getInstance(); + private ByteBuffer byteBuffer; + protected InsertNode(PlanNodeId id) { super(id); } @@ -431,6 +433,18 @@ public abstract class InsertNode extends SearchNode { return rawMeasurements; } + public void cachedByteBuffer() { + this.byteBuffer = this.serializeToByteBuffer(); + } + + @Override + public ByteBuffer serializeToByteBuffer() { + if (byteBuffer != null) { + return byteBuffer; + } + return super.serializeToByteBuffer(); + } + protected PartialPath readTargetPath(ByteBuffer buffer) throws IllegalPathException { return DataNodeDevicePathCache.getInstance() .getPartialPath(ReadWriteIOUtils.readString(buffer));
