diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/PrepareTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/PrepareTask.java index bf61e702c72d..62c59d5bf785 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/PrepareTask.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/session/PrepareTask.java @@ -26,7 +26,6 @@ import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult; import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask; import org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor; -import org.apache.iotdb.db.queryengine.plan.relational.sql.AstMemoryEstimator; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement; import org.apache.iotdb.rpc.TSStatusCode; @@ -69,7 +68,7 @@ public ListenableFuture execute(IConfigTaskExecutor configTask } // Estimate memory size of the AST - long memorySizeInBytes = AstMemoryEstimator.estimateMemorySize(sql); + long memorySizeInBytes = sql == null ? 0L : sql.ramBytesUsed(); // Allocate memory from CoordinatorMemoryManager // This memory is shared across all sessions using a single MemoryBlock diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/AstMemoryEstimator.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/AstMemoryEstimator.java deleted file mode 100644 index d45f6546e0f6..000000000000 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/AstMemoryEstimator.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -package org.apache.iotdb.db.queryengine.plan.relational.sql; - -import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.DefaultTraversalVisitor; -import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Node; -import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement; - -import org.apache.tsfile.utils.RamUsageEstimator; - -/** - * Utility class for estimating memory usage of AST nodes. Uses RamUsageEstimator to calculate - * approximate memory size. - */ -public final class AstMemoryEstimator { - private AstMemoryEstimator() {} - - /** - * Estimate the memory size of a Statement AST node in bytes. - * - * @param statement the statement AST to estimate - * @return estimated memory size in bytes - */ - public static long estimateMemorySize(Statement statement) { - if (statement == null) { - return 0L; - } - MemoryEstimatingVisitor visitor = new MemoryEstimatingVisitor(); - visitor.process(statement, null); - return visitor.getTotalMemorySize(); - } - - private static class MemoryEstimatingVisitor extends DefaultTraversalVisitor { - private long totalMemorySize = 0L; - - public long getTotalMemorySize() { - return totalMemorySize; - } - - @Override - protected Void visitNode(Node node, Void context) { - // Estimate shallow size of the node object - long nodeSize = RamUsageEstimator.shallowSizeOfInstance(node.getClass()); - totalMemorySize += nodeSize; - - // Traverse children (DefaultTraversalVisitor handles this) - return super.visitNode(node, context); - } - } -} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDeviceWithCache.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDeviceWithCache.java index ab2a1afe76a5..edd95930a2f8 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDeviceWithCache.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractQueryDeviceWithCache.java @@ -31,6 +31,7 @@ import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache; import org.apache.tsfile.read.common.block.TsBlock; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.ArrayList; import java.util.HashMap; @@ -42,6 +43,9 @@ public abstract class AbstractQueryDeviceWithCache extends AbstractTraverseDevice { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AbstractQueryDeviceWithCache.class); + // For query devices fully in cache protected List results = new ArrayList<>(); @@ -111,4 +115,21 @@ public static List getDeviceColumnHeaderList( public abstract DatasetHeader getDataSetHeader(); public abstract TsBlock getTsBlock(final Analysis analysis); + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + ramBytesUsedForCommonFields(); + } + + @Override + protected long ramBytesUsedForCommonFields() { + long size = super.ramBytesUsedForCommonFields(); + if (results != null) { + size += RamUsageEstimator.shallowSizeOf(results); + for (ShowDevicesResult result : results) { + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(result); + } + } + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractTraverseDevice.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractTraverseDevice.java index c61945b1b913..fa3f8cbcbd61 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractTraverseDevice.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AbstractTraverseDevice.java @@ -32,6 +32,7 @@ import com.google.common.collect.ImmutableList; import org.apache.tsfile.file.metadata.IDeviceID; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.Collections; import java.util.List; @@ -46,6 +47,9 @@ // Show, Count, Update, Delete Devices public abstract class AbstractTraverseDevice extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AbstractTraverseDevice.class); + protected String database; protected String tableName; @@ -187,6 +191,10 @@ public void setAttributeColumns(final List attributeColumns) { this.attributeColumns = attributeColumns; } + public List getAttributeColumns() { + return attributeColumns; + } + public List getColumnHeaderList() { return columnHeaderList; } @@ -241,4 +249,44 @@ protected String toStringContent() { + tagFuzzyPredicate + '}'; } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + ramBytesUsedForCommonFields(); + } + + protected long ramBytesUsedForCommonFields() { + long size = 0; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(table); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(where); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(tagFuzzyPredicate); + size += RamUsageEstimator.sizeOf(database); + size += RamUsageEstimator.sizeOf(tableName); + if (tagDeterminedFilterList != null) { + size += RamUsageEstimator.shallowSizeOf(tagDeterminedFilterList); + for (List filters : tagDeterminedFilterList) { + if (filters != null) { + size += RamUsageEstimator.shallowSizeOf(filters); + for (SchemaFilter filter : filters) { + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(filter); + } + } + } + } + if (columnHeaderList != null) { + size += RamUsageEstimator.shallowSizeOf(columnHeaderList); + for (ColumnHeader header : columnHeaderList) { + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(header); + } + } + size += AstMemoryEstimationHelper.getEstimatedSizeOfStringList(attributeColumns); + if (partitionKeyList != null) { + size += RamUsageEstimator.shallowSizeOf(partitionKeyList); + for (IDeviceID deviceID : partitionKeyList) { + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(deviceID); + } + } + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AddColumn.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AddColumn.java index 41d9f28c4fd8..6f271c042ffc 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AddColumn.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AddColumn.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Collections; import java.util.List; import java.util.Objects; @@ -27,6 +29,8 @@ import static java.util.Objects.requireNonNull; public class AddColumn extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AddColumn.class); private final QualifiedName tableName; private final ColumnDefinition column; @@ -112,4 +116,13 @@ public String toString() { .add("view", view) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += tableName == null ? 0L : tableName.ramBytesUsed(); + size += column == null ? 0L : column.ramBytesUsed(); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AliasedRelation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AliasedRelation.java index 95d94a7e17f8..ce9eff075b76 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AliasedRelation.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AliasedRelation.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ import static java.util.Objects.requireNonNull; public class AliasedRelation extends Relation { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AliasedRelation.class); + private final Relation relation; private final Identifier alias; private final List columnNames; @@ -109,4 +113,14 @@ public boolean shallowEquals(Node other) { return alias.equals(otherRelation.alias) && Objects.equals(columnNames, otherRelation.columnNames); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(relation); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(alias); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(columnNames); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AllColumns.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AllColumns.java index 99c83caf648f..fd32acce6c7d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AllColumns.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AllColumns.java @@ -21,6 +21,7 @@ import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -32,6 +33,9 @@ public class AllColumns extends SelectItem { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AllColumns.class); + private final List aliases; @Nullable private final Expression target; @@ -127,4 +131,13 @@ public boolean shallowEquals(Node other) { return aliases.equals(((AllColumns) other).aliases); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(aliases); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(target); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AllRows.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AllRows.java index e5ae50c33c80..f8cc6454c5b2 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AllRows.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AllRows.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; @@ -28,6 +29,7 @@ import static java.util.Objects.requireNonNull; public final class AllRows extends Expression { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(AllRows.class); public AllRows() { super(null); @@ -64,4 +66,11 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AlterDB.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AlterDB.java index 4a5e6a8d1229..81537c3e0906 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AlterDB.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AlterDB.java @@ -21,12 +21,16 @@ import org.apache.iotdb.db.queryengine.plan.statement.metadata.DatabaseSchemaStatement; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.List; import static com.google.common.base.MoreObjects.toStringHelper; import static java.util.Objects.requireNonNull; public class AlterDB extends DatabaseStatement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(AlterDB.class); + public AlterDB( final NodeLocation location, final boolean exists, @@ -53,4 +57,9 @@ public String toString() { .add("properties", properties) .toString(); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + ramBytesUsedForCommonFields(); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AlterPipe.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AlterPipe.java index a40fab917a51..5e47764bd12d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AlterPipe.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AlterPipe.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Map; import java.util.Objects; @@ -26,6 +28,8 @@ import static java.util.Objects.requireNonNull; public class AlterPipe extends PipeStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AlterPipe.class); private final String pipeName; private final boolean ifExistsCondition; @@ -140,4 +144,15 @@ public String toString() { .add("isReplaceAllConnectorAttributes", isReplaceAllConnectorAttributes) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(pipeName); + size += RamUsageEstimator.sizeOfMap(extractorAttributes); + size += RamUsageEstimator.sizeOfMap(processorAttributes); + size += RamUsageEstimator.sizeOfMap(connectorAttributes); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AnchorPattern.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AnchorPattern.java index e8ced6283957..9063ed7e0ee6 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AnchorPattern.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AnchorPattern.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -33,6 +34,9 @@ public enum Type { PARTITION_END } + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AnchorPattern.class); + private final Type type; public AnchorPattern(NodeLocation location, Type type) { @@ -80,4 +84,11 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ArithmeticBinaryExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ArithmeticBinaryExpression.java index da15baae013b..69fb130b705a 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ArithmeticBinaryExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ArithmeticBinaryExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import javax.annotation.Nonnull; @@ -34,6 +35,9 @@ public class ArithmeticBinaryExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ArithmeticBinaryExpression.class); + public enum Operator { ADD("+"), SUBTRACT("-"), @@ -139,4 +143,12 @@ public boolean shallowEquals(Node other) { return operator == ((ArithmeticBinaryExpression) other).operator; } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(left) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(right); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ArithmeticUnaryExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ArithmeticUnaryExpression.java index 5385914e2cd6..4b3e0f9a77fa 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ArithmeticUnaryExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ArithmeticUnaryExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import javax.annotation.Nonnull; @@ -34,6 +35,9 @@ public class ArithmeticUnaryExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ArithmeticUnaryExpression.class); + public enum Sign { PLUS, MINUS @@ -141,4 +145,11 @@ public boolean shallowEquals(Node other) { return sign == ((ArithmeticUnaryExpression) other).sign; } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AsofJoinOn.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AsofJoinOn.java index c19606c75489..16d48a41a628 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AsofJoinOn.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AsofJoinOn.java @@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.TimeDuration; import java.util.List; @@ -33,6 +34,8 @@ import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ComparisonExpression.Operator.LESS_THAN_OR_EQUAL; public class AsofJoinOn extends JoinOn { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AsofJoinOn.class); // record main expression of ASOF join // .e.g 'ASOF (tolerance 1) JOIN ON t1.device = t2.device and t1.time > t2.time' => @@ -160,4 +163,12 @@ public String toString() { public List getNodes() { return ImmutableList.of(expression, asofExpression); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += ramBytesUsedExcludingInstanceSize(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(asofExpression); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstMemoryEstimationHelper.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstMemoryEstimationHelper.java new file mode 100644 index 000000000000..65f4aa413f9e --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstMemoryEstimationHelper.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; + +import org.apache.tsfile.utils.Accountable; +import org.apache.tsfile.utils.RamUsageEstimator; + +import javax.annotation.Nullable; + +import java.util.List; +import java.util.Optional; + +/** + * Helper class for estimating memory usage of AST nodes. This class provides utility methods that + * can be used by Node subclasses to calculate their memory footprint. + */ +public final class AstMemoryEstimationHelper { + + public static final long OPTIONAL_INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(Optional.class); + + public static final long NODE_LOCATION_INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(NodeLocation.class); + + private AstMemoryEstimationHelper() { + // hide the constructor + } + + public static long getEstimatedSizeOfAccountableObject(@Nullable final Accountable accountable) { + return accountable == null ? 0 : accountable.ramBytesUsed(); + } + + public static long getEstimatedSizeOfNodeLocation(@Nullable final NodeLocation location) { + if (location != null) { + return NODE_LOCATION_INSTANCE_SIZE; + } + return 0L; + } + + public static long getEstimatedSizeOfNodeList(@Nullable final List children) { + if (children == null || children.isEmpty()) { + return 0L; + } + long size = RamUsageEstimator.shallowSizeOf(children); + for (Node child : children) { + if (child != null) { + size += child.ramBytesUsed(); + } + } + return size; + } + + public static long getEstimatedSizeOfStringList(@Nullable final List strings) { + if (strings == null || strings.isEmpty()) { + return 0L; + } + long size = RamUsageEstimator.shallowSizeOf(strings); + for (String str : strings) { + size += RamUsageEstimator.sizeOf(str); + } + return size; + } + + public static long getEstimatedSizeOfIntegerList(@Nullable final List integers) { + if (integers == null || integers.isEmpty()) { + return 0L; + } + long size = RamUsageEstimator.shallowSizeOf(integers); + for (Integer integer : integers) { + if (integer != null) { + size += Integer.BYTES; + } + } + return size; + } + + public static long getEstimatedSizeOfLongList(@Nullable final List longs) { + if (longs == null || longs.isEmpty()) { + return 0L; + } + long size = RamUsageEstimator.shallowSizeOf(longs); + for (Long longValue : longs) { + if (longValue != null) { + size += Long.BYTES; + } + } + return size; + } + + public static long getEstimatedSizeOfObjectArrayList( + @Nullable final List objectArrayList) { + if (objectArrayList == null || objectArrayList.isEmpty()) { + return 0L; + } + long size = RamUsageEstimator.shallowSizeOf(objectArrayList); + for (Object[] array : objectArrayList) { + if (array != null) { + size += RamUsageEstimator.shallowSizeOf(array); + for (Object element : array) { + size += RamUsageEstimator.sizeOfObject(element); + } + } + } + return size; + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BetweenPredicate.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BetweenPredicate.java index 5a0f00af4568..a421e65630d6 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BetweenPredicate.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BetweenPredicate.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; @@ -33,6 +34,9 @@ public final class BetweenPredicate extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(BetweenPredicate.class); + private final Expression value; private final Expression min; private final Expression max; @@ -125,4 +129,13 @@ public BetweenPredicate(ByteBuffer byteBuffer) { this.min = Expression.deserialize(byteBuffer); this.max = Expression.deserialize(byteBuffer); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(min) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(max); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BinaryLiteral.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BinaryLiteral.java index e11cd7a1182c..d5baa741c7be 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BinaryLiteral.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BinaryLiteral.java @@ -24,6 +24,7 @@ import com.google.common.base.CharMatcher; import com.google.common.io.BaseEncoding; import org.apache.tsfile.utils.Binary; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -35,6 +36,9 @@ import static java.util.Objects.requireNonNull; public class BinaryLiteral extends Literal { + + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(BinaryLiteral.class); // the grammar could possibly include whitespace in the value it passes to us private static final CharMatcher WHITESPACE_MATCHER = CharMatcher.whitespace(); private static final CharMatcher HEX_DIGIT_MATCHER = @@ -142,4 +146,11 @@ public BinaryLiteral(ByteBuffer byteBuffer) { public Object getTsValue() { return new Binary(value); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + RamUsageEstimator.sizeOf(value); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BooleanLiteral.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BooleanLiteral.java index 75ad655743ca..42f62559a728 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BooleanLiteral.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/BooleanLiteral.java @@ -19,6 +19,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -32,6 +33,9 @@ public class BooleanLiteral extends Literal { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(BooleanLiteral.class); + public static final BooleanLiteral TRUE_LITERAL = new BooleanLiteral("true"); public static final BooleanLiteral FALSE_LITERAL = new BooleanLiteral("false"); @@ -109,4 +113,10 @@ public BooleanLiteral(ByteBuffer byteBuffer) { public Object getTsValue() { return value; } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Cast.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Cast.java index cc8183f8be6d..1b240db6d865 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Cast.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Cast.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import javax.annotation.Nonnull; @@ -33,6 +34,9 @@ import static java.util.Objects.requireNonNull; public final class Cast extends Expression { + + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Cast.class); + private final Expression expression; private final DataType type; private final boolean safe; @@ -156,4 +160,12 @@ public Cast(ByteBuffer byteBuffer) { this.safe = ReadWriteIOUtils.readBool(byteBuffer); this.typeOnly = ReadWriteIOUtils.readBool(byteBuffer); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(expression) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(type); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ClearCache.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ClearCache.java index 6f9183da1fec..f661a3f114cd 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ClearCache.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ClearCache.java @@ -22,6 +22,7 @@ import org.apache.iotdb.commons.schema.cache.CacheClearOptions; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,8 @@ import static com.google.common.base.MoreObjects.toStringHelper; public class ClearCache extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ClearCache.class); private final boolean onCluster; private final Set options; @@ -80,4 +83,12 @@ public boolean equals(final Object obj) { public String toString() { return toStringHelper(this).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOfCollection(options); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CoalesceExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CoalesceExpression.java index d16ab376698d..05fccd1c01cd 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CoalesceExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CoalesceExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import javax.annotation.Nonnull; @@ -36,6 +37,9 @@ public final class CoalesceExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CoalesceExpression.class); + private final List operands; public CoalesceExpression(Expression first, Expression second, Expression... additional) { @@ -117,4 +121,11 @@ public CoalesceExpression(ByteBuffer byteBuffer) { operands.add(deserialize(byteBuffer)); } } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(operands); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ColumnDefinition.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ColumnDefinition.java index 3d78b9e51cd9..d3e638c098d4 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ColumnDefinition.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ColumnDefinition.java @@ -22,6 +22,7 @@ import org.apache.iotdb.commons.schema.table.column.TsTableColumnCategory; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -35,6 +36,9 @@ public class ColumnDefinition extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ColumnDefinition.class); + private final Identifier name; private final DataType type; private final TsTableColumnCategory columnCategory; @@ -130,4 +134,15 @@ public String toString() { .add("comment", comment) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(type); + size += RamUsageEstimator.sizeOf(charsetName); + size += RamUsageEstimator.sizeOf(comment); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Columns.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Columns.java index 6860940aa286..6fc00368fe3e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Columns.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Columns.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; @@ -31,6 +32,8 @@ import static java.util.Objects.requireNonNull; public final class Columns extends Expression { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Columns.class); + private final String pattern; public Columns(@Nonnull NodeLocation location, String pattern) { @@ -93,4 +96,12 @@ public TableExpressionType getExpressionType() { public void serialize(DataOutputStream stream) throws IOException { throw new UnsupportedOperationException("Columns should be expanded in Analyze stage"); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(pattern); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ComparisonExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ComparisonExpression.java index a70badc932a9..c968ac7c2854 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ComparisonExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ComparisonExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import javax.annotation.Nonnull; @@ -34,6 +35,9 @@ public class ComparisonExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ComparisonExpression.class); + public enum Operator { EQUAL("="), NOT_EQUAL("<>"), @@ -192,4 +196,12 @@ public ComparisonExpression(ByteBuffer byteBuffer) { left = deserialize(byteBuffer); right = deserialize(byteBuffer); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(left) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(right); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java index 7127ec55d6bc..e288cd398721 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountDevice.java @@ -26,10 +26,13 @@ import org.apache.tsfile.enums.TSDataType; import org.apache.tsfile.read.common.block.TsBlock; import org.apache.tsfile.read.common.block.TsBlockBuilder; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.Collections; public class CountDevice extends AbstractQueryDeviceWithCache { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CountDevice.class); public static final String COUNT_DEVICE_HEADER_STRING = "count(devices)"; @@ -65,4 +68,9 @@ public R accept(final AstVisitor visitor, final C context) { public String toString() { return "CountDevice" + toStringContent(); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + ramBytesUsedForCommonFields(); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountStatement.java index 146b2467aa47..04193f4edbc9 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountStatement.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CountStatement.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,8 @@ import static java.util.Objects.requireNonNull; public class CountStatement extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CountStatement.class); private final String tableName; private final Optional where; @@ -83,4 +86,14 @@ public String toString() { .omitNullValues() .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(tableName); + size += AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(where.orElse(null)); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateDB.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateDB.java index 9f493b16d481..1f22500c3e59 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateDB.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateDB.java @@ -21,6 +21,8 @@ import org.apache.iotdb.db.queryengine.plan.statement.metadata.DatabaseSchemaStatement; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.List; import static com.google.common.base.MoreObjects.toStringHelper; @@ -28,6 +30,8 @@ public class CreateDB extends DatabaseStatement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(CreateDB.class); + public CreateDB( final NodeLocation location, final boolean exists, @@ -54,4 +58,9 @@ public String toString() { .add("properties", properties) .toString(); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + ramBytesUsedForCommonFields(); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateFunction.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateFunction.java index 3ff15880c1dc..e7cafdca1395 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateFunction.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateFunction.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -31,6 +32,8 @@ import static java.util.Objects.requireNonNull; public class CreateFunction extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CreateFunction.class); private final String udfName; private final String className; @@ -101,4 +104,14 @@ public String toString() { .add("uriString", uriString) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(udfName); + size += RamUsageEstimator.sizeOf(className); + size += RamUsageEstimator.sizeOf(uriString); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateIndex.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateIndex.java index 04d071e89888..cd21eed2406f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateIndex.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateIndex.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,8 @@ import static java.util.Objects.requireNonNull; public class CreateIndex extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CreateIndex.class); private final QualifiedName tableName; @@ -107,4 +110,14 @@ public String toString() { .add("columnList", columnList) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += tableName == null ? 0L : tableName.ramBytesUsed(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(indexName); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(columnList); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateModel.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateModel.java index f2132aab4404..ff2b5ccb4297 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateModel.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateModel.java @@ -19,10 +19,14 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.List; import java.util.Objects; public class CreateModel extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CreateModel.class); private final String modelId; private final String uri; @@ -69,4 +73,13 @@ public int hashCode() { public String toString() { return "CreateModel{" + "modelId='" + modelId + '\'' + ", uri='" + uri + '\'' + '}'; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(modelId); + size += RamUsageEstimator.sizeOf(uri); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateOrUpdateDevice.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateOrUpdateDevice.java index 766112e5cef1..b597d6fd6aa2 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateOrUpdateDevice.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateOrUpdateDevice.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import javax.annotation.Nonnull; import java.util.Arrays; @@ -31,6 +33,8 @@ import static org.apache.iotdb.db.storageengine.dataregion.memtable.DeviceIDFactory.truncateTailingNull; public class CreateOrUpdateDevice extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CreateOrUpdateDevice.class); private final String database; @@ -137,4 +141,16 @@ public String toString() { + attributeValueList + '}'; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(database); + size += RamUsageEstimator.sizeOf(table); + size += AstMemoryEstimationHelper.getEstimatedSizeOfObjectArrayList(deviceIdList); + size += AstMemoryEstimationHelper.getEstimatedSizeOfStringList(attributeNameList); + size += AstMemoryEstimationHelper.getEstimatedSizeOfObjectArrayList(attributeValueList); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipe.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipe.java index 3f53c5e4504d..5c0342c5cee0 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipe.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipe.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Map; import java.util.Objects; @@ -26,6 +28,8 @@ import static java.util.Objects.requireNonNull; public class CreatePipe extends PipeStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CreatePipe.class); private final String pipeName; private final boolean ifNotExistsCondition; @@ -110,4 +114,15 @@ public String toString() { .add("connectorAttributes", connectorAttributes) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(pipeName); + size += RamUsageEstimator.sizeOfMap(extractorAttributes); + size += RamUsageEstimator.sizeOfMap(processorAttributes); + size += RamUsageEstimator.sizeOfMap(connectorAttributes); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipePlugin.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipePlugin.java index 676e360b3ab1..5e2666aa15f8 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipePlugin.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreatePipePlugin.java @@ -19,12 +19,16 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Objects; import static com.google.common.base.MoreObjects.toStringHelper; import static java.util.Objects.requireNonNull; public class CreatePipePlugin extends PipeStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CreatePipePlugin.class); private final String pluginName; private final boolean ifNotExistsCondition; @@ -92,4 +96,14 @@ public String toString() { .add("uriString", uriString) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(pluginName); + size += RamUsageEstimator.sizeOf(className); + size += RamUsageEstimator.sizeOf(uriString); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTable.java index f18b740ef029..03342885baa9 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTable.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTable.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -31,6 +32,9 @@ import static java.util.Objects.requireNonNull; public class CreateTable extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CreateTable.class); + private final QualifiedName name; private final List elements; @@ -123,4 +127,26 @@ public String toString() { .add("properties", properties) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += name == null ? 0L : name.ramBytesUsed(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(elements); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(properties); + size += RamUsageEstimator.sizeOf(charsetName); + size += RamUsageEstimator.sizeOf(comment); + return size; + } + + protected long ramBytesUsedExcludingInstanceSize() { + long size = AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += name == null ? 0L : name.ramBytesUsed(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(elements); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(properties); + size += RamUsageEstimator.sizeOf(charsetName); + size += RamUsageEstimator.sizeOf(comment); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTopic.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTopic.java index 578017002913..64ea19f4051f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTopic.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTopic.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Map; import java.util.Objects; @@ -26,6 +28,8 @@ import static java.util.Objects.requireNonNull; public class CreateTopic extends SubscriptionStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CreateTopic.class); private final String topicName; private final boolean ifNotExistsCondition; @@ -84,4 +88,13 @@ public String toString() { .add("topicAttributes", topicAttributes) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(topicName); + size += RamUsageEstimator.sizeOfMap(topicAttributes); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTraining.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTraining.java index a62e4305d408..2b786f4303c2 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTraining.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateTraining.java @@ -19,11 +19,15 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.List; import java.util.Map; import java.util.Objects; public class CreateTraining extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CreateTraining.class); private final String modelId; private final String targetSql; @@ -104,4 +108,15 @@ public String toString() { + '\'' + '}'; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(modelId); + size += RamUsageEstimator.sizeOf(targetSql); + size += RamUsageEstimator.sizeOf(existingModelId); + size += RamUsageEstimator.sizeOfMap(parameters); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateView.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateView.java index d0ed0681a610..026da0c710d6 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateView.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CreateView.java @@ -20,6 +20,9 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.queryengine.execution.MemoryEstimationHelper; + +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -29,6 +32,9 @@ import static com.google.common.base.MoreObjects.toStringHelper; public class CreateView extends CreateTable { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CreateView.class); + private final PartialPath prefixPath; private final boolean replace; private final boolean restrict; @@ -92,4 +98,12 @@ public String toString() { .add("restrict", restrict) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += ramBytesUsedExcludingInstanceSize(); + size += MemoryEstimationHelper.getEstimatedSizeOfPartialPath(prefixPath); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentDatabase.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentDatabase.java index 7a8dddf44aa4..e22baecca7f7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentDatabase.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentDatabase.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; @@ -29,6 +30,9 @@ public class CurrentDatabase extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CurrentDatabase.class); + public CurrentDatabase() { super(null); } @@ -72,4 +76,11 @@ public boolean shallowEquals(final Node other) { public TableExpressionType getExpressionType() { return TableExpressionType.CURRENT_DATABASE; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentTime.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentTime.java index b166cf2d0670..75223204013d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentTime.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentTime.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -30,6 +31,9 @@ import static java.util.Objects.requireNonNull; public class CurrentTime extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CurrentTime.class); + private final Function function; @Nullable private final Integer precision; @@ -110,4 +114,14 @@ public boolean shallowEquals(Node other) { CurrentTime otherNode = (CurrentTime) other; return (function == otherNode.function) && Objects.equals(precision, otherNode.precision); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + if (precision != null) { + size += Integer.BYTES; + } + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentUser.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentUser.java index 760d86a01143..4849649d19e3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentUser.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/CurrentUser.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; @@ -29,6 +30,9 @@ public class CurrentUser extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(CurrentUser.class); + public CurrentUser() { super(null); } @@ -72,4 +76,11 @@ public boolean shallowEquals(final Node other) { public TableExpressionType getExpressionType() { return TableExpressionType.CURRENT_USER; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DatabaseStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DatabaseStatement.java index 54ae7542c6f0..960c2f7effe7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DatabaseStatement.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DatabaseStatement.java @@ -22,6 +22,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.metadata.DatabaseSchemaStatement; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Locale; @@ -85,4 +86,12 @@ public boolean equals(final Object obj) { && Objects.equals(exists, o.exists) && Objects.equals(properties, o.properties); } + + protected long ramBytesUsedForCommonFields() { + long size = 0; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(dbName); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(properties); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Deallocate.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Deallocate.java index fd579bb64b5b..2a977ae25df6 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Deallocate.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Deallocate.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,9 @@ /** DEALLOCATE PREPARE statement AST node. Example: DEALLOCATE PREPARE stmt1 */ public final class Deallocate extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(Deallocate.class); + private final Identifier statementName; public Deallocate(Identifier statementName) { @@ -76,4 +80,12 @@ public int hashCode() { public String toString() { return toStringHelper(this).add("statementName", statementName).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(statementName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DecimalLiteral.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DecimalLiteral.java index f7f99e0a1a0a..1676e8807057 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DecimalLiteral.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DecimalLiteral.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import org.apache.tsfile.utils.Binary; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -32,6 +33,9 @@ public class DecimalLiteral extends Literal { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DecimalLiteral.class); + private final String value; public DecimalLiteral(String value) { @@ -100,4 +104,11 @@ public DecimalLiteral(ByteBuffer byteBuffer) { public Object getTsValue() { return new Binary(value.getBytes(StandardCharsets.UTF_8)); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + RamUsageEstimator.sizeOf(value); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Delete.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Delete.java index 788b5ddffcd0..33cecba11221 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Delete.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Delete.java @@ -23,6 +23,7 @@ import org.apache.iotdb.db.storageengine.dataregion.modification.TableDeletionEntry; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -36,6 +37,8 @@ public class Delete extends Statement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Delete.class); + private Table table; @Nullable private Expression where; @@ -129,4 +132,13 @@ public Collection getReplicaSets() { public void setReplicaSets(final Collection replicaSets) { this.replicaSets = replicaSets; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(table); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(where); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java index ed5bc0d3719e..b5c319ebb2a4 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DeleteDevice.java @@ -47,6 +47,7 @@ import com.google.common.collect.ImmutableMap; import org.apache.tsfile.read.common.type.TypeFactory; import org.apache.tsfile.utils.Binary; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -65,6 +66,8 @@ import static com.google.common.base.MoreObjects.toStringHelper; public class DeleteDevice extends AbstractTraverseDevice { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DeleteDevice.class); // Used for data deletion private List modEntries; @@ -250,4 +253,17 @@ public R accept(final AstVisitor visitor, final C context) { public String toString() { return toStringHelper(this) + " - " + super.toStringContent(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += ramBytesUsedForCommonFields(); + if (modEntries != null) { + size += RamUsageEstimator.shallowSizeOf(modEntries); + for (TableDeletionEntry entry : modEntries) { + size += entry == null ? 0L : entry.ramBytesUsed(); + } + } + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DereferenceExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DereferenceExpression.java index e22e57eb1894..76e86948e8e3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DereferenceExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DereferenceExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -31,6 +32,9 @@ public class DereferenceExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DereferenceExpression.class); + private final Expression base; @Nullable private final Identifier field; @@ -148,4 +152,13 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(base); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(field); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DescribeTable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DescribeTable.java index 0dfbe4429d25..bdb01fb9ff75 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DescribeTable.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DescribeTable.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; @@ -30,6 +31,8 @@ import static java.util.Objects.requireNonNull; public class DescribeTable extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DescribeTable.class); private final QualifiedName table; private final boolean isDetails; @@ -98,4 +101,12 @@ public String toString() { .add("isShowCreateView", isShowCreateView) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += table == null ? 0L : table.ramBytesUsed(); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DoubleLiteral.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DoubleLiteral.java index cf2fa7083265..44c732e66f0e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DoubleLiteral.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DoubleLiteral.java @@ -19,6 +19,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -29,6 +30,9 @@ public class DoubleLiteral extends Literal { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DoubleLiteral.class); + private final double value; public DoubleLiteral(String value) { @@ -108,4 +112,10 @@ public DoubleLiteral(ByteBuffer byteBuffer) { public Object getTsValue() { return value; } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropColumn.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropColumn.java index 095e7511f36b..cc95814ee0e3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropColumn.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropColumn.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,8 @@ import static java.util.Objects.requireNonNull; public class DropColumn extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DropColumn.class); private final QualifiedName table; private final Identifier field; @@ -112,4 +115,13 @@ public String toString() { .add("view", view) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += table == null ? 0L : table.ramBytesUsed(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(field); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropDB.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropDB.java index d64f7a458afe..8f1ea9b19165 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropDB.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropDB.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,8 @@ public class DropDB extends Statement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(DropDB.class); + private final Identifier dbName; private final boolean exists; @@ -77,4 +80,12 @@ public int hashCode() { public String toString() { return toStringHelper(this).add("catalogName", dbName).add("exists", exists).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(dbName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropFunction.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropFunction.java index 1439ea19798b..58c37c8db2a6 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropFunction.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropFunction.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,8 @@ import static java.util.Objects.requireNonNull; public class DropFunction extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DropFunction.class); private final String udfName; @@ -71,4 +74,12 @@ public int hashCode() { public String toString() { return toStringHelper(this).add("udfName", udfName).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(udfName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropIndex.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropIndex.java index 0b03e8551ca1..e19308d4259e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropIndex.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropIndex.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,8 @@ import static java.util.Objects.requireNonNull; public class DropIndex extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DropIndex.class); private final QualifiedName tableName; @@ -85,4 +88,13 @@ public int hashCode() { public String toString() { return toStringHelper(this).add("tableName", tableName).add("indexName", indexName).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += tableName == null ? 0L : tableName.ramBytesUsed(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(indexName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropModel.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropModel.java index 780b7c38f9a4..cea9eee32820 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropModel.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropModel.java @@ -19,10 +19,14 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.List; import java.util.Objects; public class DropModel extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DropModel.class); private final String modelId; @@ -61,4 +65,12 @@ public int hashCode() { public String toString() { return "DropModel{" + "modelId='" + modelId + '\'' + '}'; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(modelId); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropPipe.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropPipe.java index 1b3837ba2147..f2ce39bc0fbe 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropPipe.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropPipe.java @@ -19,12 +19,15 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Objects; import static com.google.common.base.MoreObjects.toStringHelper; import static java.util.Objects.requireNonNull; public class DropPipe extends PipeStatement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(DropPipe.class); private final String pipeName; private final boolean ifExistsCondition; @@ -72,4 +75,12 @@ public String toString() { .add("ifExistsCondition", ifExistsCondition) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(pipeName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropPipePlugin.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropPipePlugin.java index aaa7de52d214..368fb9b63c62 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropPipePlugin.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropPipePlugin.java @@ -19,12 +19,16 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Objects; import static com.google.common.base.MoreObjects.toStringHelper; import static java.util.Objects.requireNonNull; public class DropPipePlugin extends PipeStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DropPipePlugin.class); private final String pluginName; private final boolean ifExistsCondition; @@ -72,4 +76,12 @@ public String toString() { .add("ifExistsCondition", ifExistsCondition) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(pluginName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropSubscription.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropSubscription.java index 24aba397013b..940e6cd8e600 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropSubscription.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropSubscription.java @@ -19,12 +19,16 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Objects; import static com.google.common.base.MoreObjects.toStringHelper; import static java.util.Objects.requireNonNull; public class DropSubscription extends SubscriptionStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DropSubscription.class); private final String subscriptionId; private final boolean ifExistsCondition; @@ -72,4 +76,12 @@ public String toString() { .add("ifExistsCondition", ifExistsCondition) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(subscriptionId); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropTable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropTable.java index 901a2565e845..4b7e8f31f7db 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropTable.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropTable.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,9 @@ public class DropTable extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DropTable.class); + private final QualifiedName tableName; private final boolean exists; private final boolean isView; @@ -87,4 +91,12 @@ public boolean equals(final Object obj) { public String toString() { return toStringHelper(this).add("tableName", tableName).add("exists", exists).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += tableName == null ? 0L : tableName.ramBytesUsed(); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropTopic.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropTopic.java index 0ec50fde79aa..28b21ecf5583 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropTopic.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/DropTopic.java @@ -19,12 +19,16 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Objects; import static com.google.common.base.MoreObjects.toStringHelper; import static java.util.Objects.requireNonNull; public class DropTopic extends SubscriptionStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DropTopic.class); private final String topicName; private final boolean ifExistsCondition; @@ -72,4 +76,12 @@ public String toString() { .add("ifExistsCondition", ifExistsCondition) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(topicName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/EmptyPattern.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/EmptyPattern.java index 85a316d71183..20485df6cf59 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/EmptyPattern.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/EmptyPattern.java @@ -20,12 +20,16 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import static com.google.common.base.MoreObjects.toStringHelper; public class EmptyPattern extends RowPattern { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(EmptyPattern.class); + public EmptyPattern(NodeLocation location) { super(location); } @@ -65,4 +69,11 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Except.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Except.java index eacdab488caa..1d300134651a 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Except.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Except.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,8 @@ import static java.util.Objects.requireNonNull; public final class Except extends SetOperation { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Except.class); + private final Relation left; private final Relation right; @@ -104,4 +107,13 @@ public boolean shallowEquals(Node other) { return this.isDistinct() == ((Except) other).isDistinct(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(left); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(right); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExcludedPattern.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExcludedPattern.java index 9c69b3089f3c..066961a98b79 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExcludedPattern.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExcludedPattern.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ import static java.util.Objects.requireNonNull; public class ExcludedPattern extends RowPattern { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ExcludedPattern.class); + private final RowPattern pattern; public ExcludedPattern(NodeLocation location, RowPattern pattern) { @@ -75,4 +79,12 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(pattern); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Execute.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Execute.java index d7e219faf1b9..7ae15183dab9 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Execute.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Execute.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,8 @@ /** EXECUTE statement AST node. Example: EXECUTE stmt1 USING 100, 'test' */ public final class Execute extends Statement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Execute.class); + private final Identifier statementName; private final List parameters; @@ -93,4 +96,13 @@ public String toString() { .add("parameters", parameters) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(statementName); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(parameters); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExecuteImmediate.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExecuteImmediate.java index 955ac54e4fb8..342d018f6314 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExecuteImmediate.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExecuteImmediate.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -33,6 +34,9 @@ */ public final class ExecuteImmediate extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ExecuteImmediate.class); + private final StringLiteral sql; private final List parameters; @@ -96,4 +100,13 @@ public int hashCode() { public String toString() { return toStringHelper(this).add("sql", sql).add("parameters", parameters).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(sql); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(parameters); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExistsPredicate.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExistsPredicate.java index e75c5cf2f301..c87b704761c2 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExistsPredicate.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExistsPredicate.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; @@ -29,6 +30,9 @@ import static java.util.Objects.requireNonNull; public class ExistsPredicate extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ExistsPredicate.class); + private final Expression subquery; public ExistsPredicate(Expression subquery) { @@ -77,4 +81,12 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(subquery); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Explain.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Explain.java index 9b486309d6b2..f3a50175269e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Explain.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Explain.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,8 @@ public class Explain extends Statement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Explain.class); + private final Statement statement; public Explain(Statement statement) { @@ -76,4 +79,12 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).add("statement", statement).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(statement); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExplainAnalyze.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExplainAnalyze.java index bf48c0b5efc8..cd3df879fc55 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExplainAnalyze.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExplainAnalyze.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,9 @@ public class ExplainAnalyze extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ExplainAnalyze.class); + private final Statement statement; private final boolean verbose; @@ -83,4 +87,12 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).add("statement", statement).add("verbose", verbose).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(statement); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExtendRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExtendRegion.java index 056be45d151d..21bc09daf3db 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExtendRegion.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ExtendRegion.java @@ -20,11 +20,14 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; public class ExtendRegion extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ExtendRegion.class); private final List regionIds; private final int dataNodeId; @@ -74,4 +77,12 @@ public List getRegionIds() { public int getDataNodeId() { return dataNodeId; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfIntegerList(regionIds); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Extract.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Extract.java index e9e04073ad26..3c85af1f4b69 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Extract.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Extract.java @@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableList; import com.google.errorprone.annotations.Immutable; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -33,6 +34,9 @@ @Immutable public class Extract extends Expression { + + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Extract.class); + private final Expression expression; private final Field field; @@ -136,4 +140,11 @@ public boolean shallowEquals(Node other) { Extract otherExtract = (Extract) other; return field.equals(otherExtract.field); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(expression); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FetchDevice.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FetchDevice.java index 4700bbcf8c7c..12d5d43ec3c2 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FetchDevice.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FetchDevice.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import org.apache.tsfile.file.metadata.IDeviceID; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,8 @@ import static org.apache.iotdb.db.storageengine.dataregion.memtable.DeviceIDFactory.truncateTailingNull; public class FetchDevice extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(FetchDevice.class); private final String database; @@ -107,4 +110,20 @@ public String toString() { + deviceIdList + '}'; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(database); + size += RamUsageEstimator.sizeOf(tableName); + size += AstMemoryEstimationHelper.getEstimatedSizeOfObjectArrayList(deviceIdList); + if (partitionKeyList != null) { + size += RamUsageEstimator.shallowSizeOf(partitionKeyList); + for (IDeviceID deviceID : partitionKeyList) { + size += deviceID == null ? 0L : deviceID.ramBytesUsed(); + } + } + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FieldReference.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FieldReference.java index 0fcffe6bd1d2..26ce73eeb8ed 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FieldReference.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FieldReference.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; @@ -27,6 +28,9 @@ public class FieldReference extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(FieldReference.class); + private final int fieldIndex; public FieldReference(int fieldIndex) { @@ -77,4 +81,11 @@ public boolean shallowEquals(Node other) { return fieldIndex == ((FieldReference) other).fieldIndex; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Fill.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Fill.java index 36e92dabf3cf..71c0e75e5c65 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Fill.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Fill.java @@ -23,6 +23,7 @@ import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.TimeDuration; import java.util.List; @@ -33,6 +34,8 @@ import static java.util.Objects.requireNonNull; public class Fill extends Node { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Fill.class); + private final FillPolicy fillMethod; // used for constant fill @@ -165,4 +168,17 @@ public boolean shallowEquals(Node other) { && Objects.equals(timeColumnIndex, fill.timeColumnIndex) && Objects.equals(fillGroupingElements, fill.fillGroupingElements); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(fillValue); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(timeColumnIndex); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(fillGroupingElements); + if (timeBound != null) { + size += TimeDuration.INSTANCE_SIZE; + } + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FrameBound.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FrameBound.java index 04aa993e99d8..2d901545b611 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FrameBound.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FrameBound.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -33,6 +34,9 @@ import static java.util.Objects.requireNonNull; public class FrameBound extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(FrameBound.class); + public enum Type { UNBOUNDED_PRECEDING, PRECEDING, @@ -136,4 +140,13 @@ public FrameBound(ByteBuffer byteBuffer) { this.value = Optional.empty(); } } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value.orElse(null)); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FunctionCall.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FunctionCall.java index 0ef3e51adeba..9119b68913ac 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FunctionCall.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/FunctionCall.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -33,6 +34,10 @@ import static java.util.Objects.requireNonNull; public class FunctionCall extends Expression { + + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(FunctionCall.class); + private final QualifiedName name; private final Optional window; private final boolean distinct; @@ -332,4 +337,22 @@ public FunctionCall(ByteBuffer byteBuffer) { this.processingMode = Optional.empty(); } } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += name == null ? 0L : name.ramBytesUsed(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(arguments); + size += 3 * AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + if (window.isPresent()) { + Window windowValue = window.get(); + if (windowValue instanceof Node) { + size += ((Node) windowValue).ramBytesUsed(); + } + } + size += + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(processingMode.orElse(null)); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GenericDataType.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GenericDataType.java index 00560ad7cc38..ebc5b7880cd3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GenericDataType.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GenericDataType.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; @@ -34,6 +35,9 @@ public final class GenericDataType extends DataType { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(GenericDataType.class); + private final Identifier name; private final List arguments; @@ -108,4 +112,12 @@ public GenericDataType(ByteBuffer byteBuffer) { // arguments are always empty now this.arguments = Collections.emptyList(); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name) + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(arguments); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GenericLiteral.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GenericLiteral.java index 25e41093c8b5..8a78fd4059c0 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GenericLiteral.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GenericLiteral.java @@ -22,6 +22,7 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.ParsingException; import org.apache.tsfile.utils.Binary; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -34,6 +35,9 @@ public class GenericLiteral extends Literal { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(GenericLiteral.class); + private final String type; private final String value; @@ -129,4 +133,12 @@ public GenericLiteral(ByteBuffer byteBuffer) { public Object getTsValue() { return new Binary(value.getBytes(StandardCharsets.UTF_8)); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + RamUsageEstimator.sizeOf(type) + + RamUsageEstimator.sizeOf(value); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GroupBy.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GroupBy.java index 289e550d28de..00d201648ca8 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GroupBy.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GroupBy.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,8 @@ public class GroupBy extends Node { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(GroupBy.class); + private final boolean isDistinct; private final List groupingElements; @@ -97,4 +100,12 @@ public boolean shallowEquals(Node other) { return isDistinct == ((GroupBy) other).isDistinct; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(groupingElements); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GroupingSets.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GroupingSets.java index ec4789ec3f08..8060e14a2c67 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GroupingSets.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/GroupingSets.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -31,6 +32,8 @@ import static java.util.Objects.requireNonNull; public class GroupingSets extends GroupingElement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(GroupingSets.class); public enum Type { EXPLICIT, @@ -111,4 +114,15 @@ public boolean shallowEquals(Node other) { GroupingSets that = (GroupingSets) other; return Objects.equals(sets, that.sets) && Objects.equals(type, that.type); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.shallowSizeOf(sets); + for (List set : sets) { + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(set); + } + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Identifier.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Identifier.java index b4cd90dc0a81..d881a6998fca 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Identifier.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Identifier.java @@ -22,6 +22,7 @@ import com.google.common.base.CharMatcher; import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -37,6 +38,9 @@ public class Identifier extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(Identifier.class); + private static final CharMatcher FIRST_CHAR_DISALLOWED_MATCHER = CharMatcher.inRange('0', '9').precomputed(); @@ -175,4 +179,11 @@ public Identifier(ByteBuffer byteBuffer) { this.value = ReadWriteIOUtils.readString(byteBuffer); this.delimited = ReadWriteIOUtils.readBool(byteBuffer); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + RamUsageEstimator.sizeOf(value); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IfExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IfExpression.java index a287244a0704..4a6f41d4d2ab 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IfExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IfExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -31,6 +32,9 @@ /** IF(v1,v2[,v3]): CASE WHEN v1 THEN v2 [ELSE v3] END */ public class IfExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(IfExpression.class); + private final Expression condition; private final Expression trueValue; @Nullable private final Expression falseValue; @@ -102,4 +106,14 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(condition); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(trueValue); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(falseValue); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InListExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InListExpression.java index 29f62025b1ae..fb8f8752a14b 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InListExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InListExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -33,6 +34,10 @@ import static java.util.Objects.requireNonNull; public class InListExpression extends Expression { + + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(InListExpression.class); + private final List values; public InListExpression(List values) { @@ -107,4 +112,11 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(values); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InPredicate.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InPredicate.java index b04c222347e8..464e9af4d6f1 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InPredicate.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/InPredicate.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.io.DataOutputStream; import java.io.IOException; @@ -31,6 +32,9 @@ public class InPredicate extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(InPredicate.class); + private final Expression value; private final Expression valueList; @@ -103,4 +107,12 @@ public InPredicate(ByteBuffer byteBuffer) { this.value = Expression.deserialize(byteBuffer); this.valueList = Expression.deserialize(byteBuffer); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(valueList); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Insert.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Insert.java index 3e18ceb3be5e..6a499e958129 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Insert.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Insert.java @@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableList; import org.apache.tsfile.read.common.type.LongType; import org.apache.tsfile.read.common.type.Type; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -35,6 +36,8 @@ import static java.util.Objects.requireNonNull; public final class Insert extends Statement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Insert.class); + public static final String ROWS = "rows"; public static final Type ROWS_TYPE = LongType.INT64; public static final TsTableColumnCategory ROWS_CATEGORY = TsTableColumnCategory.FIELD; @@ -111,4 +114,14 @@ public String toString() { .add("query", query) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(table); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(query); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(columns); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Intersect.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Intersect.java index c1739e0a0f52..a64bcbdaec5d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Intersect.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Intersect.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ import static java.util.Objects.requireNonNull; public final class Intersect extends SetOperation { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(Intersect.class); + private final List relations; public Intersect(List relations, boolean distinct) { @@ -88,4 +92,12 @@ public boolean shallowEquals(Node other) { return this.isDistinct() == ((Intersect) other).isDistinct(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(relations); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IsNotNullPredicate.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IsNotNullPredicate.java index 3aecaf4576ad..4db717ce6921 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IsNotNullPredicate.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IsNotNullPredicate.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.io.DataOutputStream; import java.io.IOException; @@ -31,6 +32,9 @@ public class IsNotNullPredicate extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(IsNotNullPredicate.class); + private final Expression value; public IsNotNullPredicate(Expression value) { @@ -94,4 +98,11 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IsNullPredicate.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IsNullPredicate.java index 3afe47d8ea90..0d297ebac8ec 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IsNullPredicate.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/IsNullPredicate.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.io.DataOutputStream; import java.io.IOException; @@ -31,6 +32,9 @@ public class IsNullPredicate extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(IsNullPredicate.class); + private final Expression value; public IsNullPredicate(Expression value) { @@ -94,4 +98,11 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Join.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Join.java index bc936951ec34..7d2043c78969 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Join.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Join.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -33,6 +34,8 @@ public class Join extends Relation { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Join.class); + public enum Type { CROSS, INNER, @@ -162,4 +165,14 @@ public boolean shallowEquals(Node other) { return type.equals(((Join) other).type); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(left); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(right); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(criteria); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinCriteria.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinCriteria.java index 3195b983e713..da0cdbf312d4 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinCriteria.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinCriteria.java @@ -19,9 +19,11 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.Accountable; + import java.util.List; -public abstract class JoinCriteria { +public abstract class JoinCriteria implements Accountable { // Force subclasses to have a proper equals and hashcode implementation @Override diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinOn.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinOn.java index 5c86dfaa1aea..12035339eb56 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinOn.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinOn.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -29,6 +30,7 @@ import static com.google.common.base.MoreObjects.toStringHelper; public class JoinOn extends JoinCriteria { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(JoinOn.class); // this can be null when it is AsofJoinOn @Nullable protected final Expression expression; @@ -68,4 +70,15 @@ public String toString() { public List getNodes() { return ImmutableList.of(expression); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(expression); + return size; + } + + protected long ramBytesUsedExcludingInstanceSize() { + return AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(expression); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinUsing.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinUsing.java index a2c554004452..a9a22e4eb263 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinUsing.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/JoinUsing.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,9 @@ import static java.util.Objects.requireNonNull; public class JoinUsing extends JoinCriteria { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(JoinUsing.class); + private final List columns; public JoinUsing(List columns) { @@ -67,4 +71,11 @@ public String toString() { public List getNodes() { return ImmutableList.of(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(columns); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/KillQuery.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/KillQuery.java index cbeebafebddb..144fe957b867 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/KillQuery.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/KillQuery.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -27,6 +28,9 @@ import java.util.Objects; public class KillQuery extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(KillQuery.class); + private final String queryId; public KillQuery(String queryId, @Nullable NodeLocation location) { @@ -78,4 +82,12 @@ public boolean shallowEquals(Node other) { public String toString() { return "KILL QUERY " + queryId; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(queryId); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LikePredicate.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LikePredicate.java index 0fcad0fa8b51..6f0490bfc44d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LikePredicate.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LikePredicate.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import javax.annotation.Nullable; @@ -35,6 +36,9 @@ public class LikePredicate extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(LikePredicate.class); + private final Expression value; private final Expression pattern; @Nullable private final Expression escape; @@ -147,4 +151,13 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(pattern) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(escape); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Limit.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Limit.java index b313ef14c9ad..b234d1b40749 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Limit.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Limit.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,8 @@ import static java.util.Objects.requireNonNull; public class Limit extends Node { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Limit.class); + private final Expression rowCount; public Limit(Expression rowCount) { @@ -93,4 +96,12 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(rowCount); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LoadModel.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LoadModel.java index 519510043dc5..0fe11ebeeec7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LoadModel.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LoadModel.java @@ -19,11 +19,16 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.List; import java.util.Objects; public class LoadModel extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(LoadModel.class); + private final String modelId; private final List deviceIdList; @@ -70,4 +75,13 @@ public int hashCode() { public String toString() { return "LoadModel{" + "modelId='" + modelId + '\'' + ", deviceIdList=" + deviceIdList + '}'; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(modelId); + size += AstMemoryEstimationHelper.getEstimatedSizeOfStringList(deviceIdList); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LoadTsFile.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LoadTsFile.java index 166f06b85e32..9b7cd372ee94 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LoadTsFile.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LoadTsFile.java @@ -24,6 +24,8 @@ import org.apache.iotdb.db.storageengine.dataregion.tsfile.TsFileResource; import org.apache.iotdb.db.storageengine.load.config.LoadTsFileConfigurator; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; @@ -37,6 +39,12 @@ public class LoadTsFile extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(LoadTsFile.class); + + private static final long FILE_INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(File.class); + private String filePath; private int databaseLevel; // For loading to tree-model only @@ -324,4 +332,32 @@ public String toString() { .add("loadAttributes", loadAttributes) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(filePath); + size += RamUsageEstimator.sizeOf(database); + size += RamUsageEstimator.sizeOfMap(loadAttributes); + if (tsFiles != null) { + size += RamUsageEstimator.shallowSizeOf(tsFiles); + for (File file : tsFiles) { + if (file != null) { + size += FILE_INSTANCE_SIZE; + } + } + } + if (resources != null) { + size += RamUsageEstimator.shallowSizeOf(resources); + for (TsFileResource resource : resources) { + if (resource != null) { + size += resource.calculateRamSize(); + } + } + } + size += AstMemoryEstimationHelper.getEstimatedSizeOfLongList(writePointCountList); + size += RamUsageEstimator.shallowSizeOf(isTableModel); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LogicalExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LogicalExpression.java index 34c008bd60c0..de7dc1ad0629 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LogicalExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LogicalExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -34,6 +35,9 @@ public class LogicalExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(LogicalExpression.class); + public enum Operator { AND, OR; @@ -145,4 +149,11 @@ public LogicalExpression(ByteBuffer byteBuffer) { this.terms.add(deserialize(byteBuffer)); } } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(terms); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LongLiteral.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LongLiteral.java index f9b8a14c0354..a6597e9269ce 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LongLiteral.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/LongLiteral.java @@ -21,6 +21,7 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.ParsingException; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -31,6 +32,9 @@ public class LongLiteral extends Literal { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(LongLiteral.class); + private final String value; private final long parsedValue; @@ -134,4 +138,11 @@ public LongLiteral(ByteBuffer byteBuffer) { public Object getTsValue() { return parsedValue; } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + RamUsageEstimator.sizeOf(value); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/MeasureDefinition.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/MeasureDefinition.java index db6475307b30..c61b5bd3ba5f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/MeasureDefinition.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/MeasureDefinition.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ import static java.util.Objects.requireNonNull; public class MeasureDefinition extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(MeasureDefinition.class); + private final Expression expression; private final Identifier name; @@ -86,4 +90,13 @@ public boolean shallowEquals(Node other) { return Objects.equals(name, ((MeasureDefinition) other).name); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(expression); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/MigrateRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/MigrateRegion.java index 4ec5497f471e..e1cb03de6545 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/MigrateRegion.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/MigrateRegion.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -27,6 +28,8 @@ import java.util.Objects; public class MigrateRegion extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(MigrateRegion.class); private final int regionId; private final int fromId; @@ -87,4 +90,11 @@ public int getFromId() { public int getToId() { return toId; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NaturalJoin.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NaturalJoin.java index a628ea511240..9dd25c6cc2c0 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NaturalJoin.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NaturalJoin.java @@ -20,12 +20,16 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import static com.google.common.base.MoreObjects.toStringHelper; public class NaturalJoin extends JoinCriteria { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(NaturalJoin.class); + @Override public boolean equals(Object obj) { if (this == obj) { @@ -48,4 +52,9 @@ public String toString() { public List getNodes() { return ImmutableList.of(); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Node.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Node.java index fd5ce98e8ef5..1f5a4e645ccf 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Node.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Node.java @@ -19,12 +19,14 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.Accountable; + import javax.annotation.Nullable; import java.util.List; import java.util.Optional; -public abstract class Node { +public abstract class Node implements Accountable { @Nullable private final NodeLocation location; @@ -41,6 +43,11 @@ public Optional getLocation() { return Optional.ofNullable(location); } + @Nullable + protected NodeLocation getLocationInternal() { + return location; + } + public abstract List getChildren(); // Force subclasses to have a proper equals and hashcode implementation diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NotExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NotExpression.java index e9f0cfc03f21..617d2b566587 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NotExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NotExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.io.DataOutputStream; import java.io.IOException; @@ -31,6 +32,9 @@ public class NotExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(NotExpression.class); + private final Expression value; public NotExpression(Expression value) { @@ -94,4 +98,11 @@ public NotExpression(ByteBuffer byteBuffer) { super(null); this.value = Expression.deserialize(byteBuffer); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NullIfExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NullIfExpression.java index 464a87b32b06..96ac85152eb1 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NullIfExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NullIfExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ /** NULLIF(V1,V2): CASE WHEN V1=V2 THEN NULL ELSE V1 END */ public class NullIfExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(NullIfExpression.class); + private final Expression first; private final Expression second; @@ -83,4 +87,13 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(first); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(second); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NullLiteral.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NullLiteral.java index 2fd8dab05976..3dd4cab22b0d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NullLiteral.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NullLiteral.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.io.DataOutputStream; import java.io.IOException; import java.nio.ByteBuffer; @@ -27,6 +29,9 @@ public class NullLiteral extends Literal { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(NullLiteral.class); + public NullLiteral() { super(null); } @@ -78,4 +83,10 @@ public NullLiteral(ByteBuffer byteBuffer) { public Object getTsValue() { return null; } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NumericParameter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NumericParameter.java index 1c9eec5e9c1a..c643f2582dd9 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NumericParameter.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/NumericParameter.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; @@ -29,6 +30,8 @@ import static java.util.Objects.requireNonNull; public class NumericParameter extends DataTypeParameter { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(NumericParameter.class); private final String value; public NumericParameter(String value) { @@ -85,4 +88,12 @@ public boolean shallowEquals(Node other) { return Objects.equals(value, ((NumericParameter) other).value); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(value); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Offset.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Offset.java index ae63bce3a43b..378eb2111949 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Offset.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Offset.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,8 @@ public class Offset extends Node { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Offset.class); + private final Expression rowCount; public Offset(Expression rowCount) { @@ -91,4 +94,12 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(rowCount); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/OneOrMoreQuantifier.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/OneOrMoreQuantifier.java index ea82719f2bd2..b91c9016cc83 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/OneOrMoreQuantifier.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/OneOrMoreQuantifier.java @@ -19,7 +19,12 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + public class OneOrMoreQuantifier extends PatternQuantifier { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(OneOrMoreQuantifier.class); + public OneOrMoreQuantifier(NodeLocation location, boolean greedy) { super(location, greedy); } @@ -28,4 +33,11 @@ public OneOrMoreQuantifier(NodeLocation location, boolean greedy) { public R accept(AstVisitor visitor, C context) { return visitor.visitOneOrMoreQuantifier(this, context); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/OrderBy.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/OrderBy.java index 56bb95bac2a5..c589acae3b96 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/OrderBy.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/OrderBy.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -35,6 +36,8 @@ public class OrderBy extends Node { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(OrderBy.class); + private final List sortItems; public OrderBy(List sortItems) { @@ -115,4 +118,12 @@ public OrderBy(ByteBuffer byteBuffer) { sortItems.add(new SortItem(byteBuffer)); } } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(sortItems); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Parameter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Parameter.java index 9f9d934ed443..9f585304f60a 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Parameter.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Parameter.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -27,6 +28,9 @@ import static java.util.Objects.requireNonNull; public class Parameter extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(Parameter.class); + private final int id; public Parameter(int id) { @@ -79,4 +83,11 @@ public boolean shallowEquals(Node other) { return id == ((Parameter) other).id; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternAlternation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternAlternation.java index 78e84fc6a2c6..15f6f22d1007 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternAlternation.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternAlternation.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,9 @@ import static java.util.Objects.requireNonNull; public class PatternAlternation extends RowPattern { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(PatternAlternation.class); + private final List patterns; public PatternAlternation(NodeLocation location, List patterns) { @@ -77,4 +81,12 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(patterns); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternConcatenation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternConcatenation.java index 2d0836d4c475..6a43b61cd565 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternConcatenation.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternConcatenation.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,9 @@ import static java.util.Objects.requireNonNull; public class PatternConcatenation extends RowPattern { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(PatternConcatenation.class); + private final List patterns; public PatternConcatenation(NodeLocation location, List patterns) { @@ -77,4 +81,12 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(patterns); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternPermutation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternPermutation.java index 577b1005ff0c..f44727a444e3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternPermutation.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternPermutation.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,9 @@ import static java.util.Objects.requireNonNull; public class PatternPermutation extends RowPattern { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(PatternPermutation.class); + private final List patterns; public PatternPermutation(NodeLocation location, List patterns) { @@ -77,4 +81,12 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(patterns); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternRecognitionRelation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternRecognitionRelation.java index 479421245c5e..156b5b251e75 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternRecognitionRelation.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternRecognitionRelation.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,9 @@ import static java.util.Objects.requireNonNull; public class PatternRecognitionRelation extends Relation { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(PatternRecognitionRelation.class); + private final Relation input; private final List partitionBy; private final Optional orderBy; @@ -202,4 +206,22 @@ public enum RowsPerMatch { // Pattern exclusions are not allowed with this option. ALL_WITH_UNMATCHED } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(input); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(partitionBy); + size += 3 * AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(orderBy.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(measures); + size += + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject( + afterMatchSkipTo.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(pattern); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(subsets); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(variableDefinitions); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternVariable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternVariable.java index ce9dcc4fe6c6..3189f78433a3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternVariable.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PatternVariable.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ import static java.util.Objects.requireNonNull; public class PatternVariable extends RowPattern { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(PatternVariable.class); + private final Identifier name; public PatternVariable(NodeLocation location, Identifier name) { @@ -75,4 +79,12 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PipeEnriched.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PipeEnriched.java index 0b494c674b7f..2d88c41e3fe3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PipeEnriched.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/PipeEnriched.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import javax.validation.constraints.NotNull; import java.util.List; @@ -26,6 +28,9 @@ public class PipeEnriched extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(PipeEnriched.class); + private final Statement innerStatement; public PipeEnriched(final @NotNull Statement innerstatement) { @@ -68,4 +73,12 @@ public String toString() { public Statement getInnerStatement() { return innerStatement; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(innerStatement); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Prepare.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Prepare.java index f413b8a19266..5b6cdbc43135 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Prepare.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Prepare.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,8 @@ /** PREPARE statement AST node. Example: PREPARE stmt1 FROM SELECT * FROM table WHERE id = ? */ public final class Prepare extends Statement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Prepare.class); + private final Identifier statementName; private final Statement sql; @@ -84,4 +87,13 @@ public int hashCode() { public String toString() { return toStringHelper(this).add("statementName", statementName).add("sql", sql).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(statementName); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(sql); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ProcessingMode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ProcessingMode.java index 780a5b9a1331..b7b5e8f8870c 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ProcessingMode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ProcessingMode.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ import static java.util.Objects.requireNonNull; public final class ProcessingMode extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ProcessingMode.class); + private final Mode mode; public ProcessingMode(NodeLocation location, Mode mode) { @@ -74,4 +78,11 @@ public enum Mode { RUNNING, FINAL } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Property.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Property.java index 64b9c757faa7..87557737477e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Property.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Property.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -32,6 +33,8 @@ import static java.util.Objects.requireNonNull; public class Property extends Node { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Property.class); + private final Identifier name; @Nullable private final Expression value; // null iff the value is set to DEFAULT @@ -117,4 +120,13 @@ public String toString() { .add("value", isSetToDefault() ? "DEFAULT" : getNonDefaultValue()) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QualifiedName.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QualifiedName.java index 332aa7b07f7f..32a148f63215 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QualifiedName.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QualifiedName.java @@ -21,6 +21,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import org.apache.tsfile.utils.Accountable; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import javax.annotation.Nullable; @@ -38,7 +40,10 @@ import static java.util.Locale.ENGLISH; import static java.util.Objects.requireNonNull; -public class QualifiedName { +public class QualifiedName implements Accountable { + + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(QualifiedName.class); private final List originalParts; private final List parts; @@ -226,4 +231,17 @@ public static QualifiedName deserialize(ByteBuffer byteBuffer) { return new QualifiedName(originalParts, parts, name, prefix, suffix); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(originalParts); + size += AstMemoryEstimationHelper.getEstimatedSizeOfStringList(parts); + size += RamUsageEstimator.sizeOf(name); + if (prefix != null) { + size += prefix.ramBytesUsed(); + } + size += RamUsageEstimator.sizeOf(suffix); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuantifiedComparisonExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuantifiedComparisonExpression.java index 98205917b04b..18e7f8b7606a 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuantifiedComparisonExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuantifiedComparisonExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ public class QuantifiedComparisonExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(QuantifiedComparisonExpression.class); + public enum Quantifier { ALL, ANY, @@ -120,4 +124,13 @@ public boolean shallowEquals(Node other) { QuantifiedComparisonExpression otherNode = (QuantifiedComparisonExpression) other; return operator == otherNode.operator && quantifier == otherNode.quantifier; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(subquery); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuantifiedPattern.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuantifiedPattern.java index f4b6ae3944d1..a6e9cb0b2d2f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuantifiedPattern.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuantifiedPattern.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ import static java.util.Objects.requireNonNull; public class QuantifiedPattern extends RowPattern { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(QuantifiedPattern.class); + private final RowPattern pattern; private final PatternQuantifier patternQuantifier; @@ -86,4 +90,13 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(pattern); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(patternQuantifier); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Query.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Query.java index b8598cd4f7f9..c5df5f846a01 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Query.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Query.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -31,6 +32,8 @@ public class Query extends Statement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Query.class); + private final Optional with; private final QueryBody queryBody; private final Optional fill; @@ -155,4 +158,18 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(queryBody); + size += 5 * AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(with.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(fill.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(orderBy.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(offset.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(limit.orElse(null)); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuerySpecification.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuerySpecification.java index 7c59844c5d6c..5de61a2dde2e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuerySpecification.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/QuerySpecification.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,9 @@ public class QuerySpecification extends QueryBody { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(QuerySpecification.class); + private final Select select; private final Optional from; private final Optional where; @@ -185,4 +189,22 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(select); + size += 8 * AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(from.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(where.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(groupBy.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(having.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(fill.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(windows); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(orderBy.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(offset.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(limit.orElse(null)); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RangeQuantifier.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RangeQuantifier.java index bf41ea2d8960..dc62c47bb043 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RangeQuantifier.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RangeQuantifier.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,9 @@ import static java.util.Objects.requireNonNull; public class RangeQuantifier extends PatternQuantifier { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(RangeQuantifier.class); + private final Optional atLeast; private final Optional atMost; @@ -90,4 +94,14 @@ public String toString() { .add("greedy", isGreedy()) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += 2 * AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(atLeast.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(atMost.orElse(null)); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ReconstructRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ReconstructRegion.java index df4aad226064..991f78f4bca3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ReconstructRegion.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ReconstructRegion.java @@ -20,11 +20,14 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; public class ReconstructRegion extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ReconstructRegion.class); final int dataNodeId; final List regionIds; @@ -73,4 +76,12 @@ public int getDataNodeId() { public List getRegionIds() { return regionIds; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.shallowSizeOf(regionIds); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java index d4a0d9398547..638de5943955 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RelationalAuthorStatement.java @@ -32,6 +32,7 @@ import org.apache.iotdb.rpc.StatementExecutionException; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.HashSet; import java.util.List; @@ -40,6 +41,8 @@ import java.util.stream.Collectors; public class RelationalAuthorStatement extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(RelationalAuthorStatement.class); private final AuthorRType authorType; @@ -457,4 +460,20 @@ public TSStatus checkStatementIsValid(String currentUser) { public long getAssociatedUserId() { return associatedUserId; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(tableName); + size += RamUsageEstimator.sizeOf(database); + size += RamUsageEstimator.sizeOf(userName); + size += RamUsageEstimator.sizeOf(roleName); + size += RamUsageEstimator.sizeOf(password); + size += RamUsageEstimator.sizeOf(oldPassword); + size += RamUsageEstimator.sizeOf(newUsername); + size += RamUsageEstimator.sizeOf(loginAddr); + size += RamUsageEstimator.sizeOfCollection(privilegeType); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveAINode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveAINode.java index 1765c2badae1..ad1cff33b440 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveAINode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveAINode.java @@ -20,11 +20,14 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; public class RemoveAINode extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(RemoveAINode.class); private final int nodeId; @@ -61,4 +64,11 @@ public int hashCode() { public String toString() { return "RemoveAINode{" + "nodeId=" + nodeId + '}'; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveConfigNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveConfigNode.java index 0760e6d581a7..d1f31ef53f4c 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveConfigNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveConfigNode.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -27,6 +28,8 @@ import static com.google.common.base.MoreObjects.toStringHelper; public class RemoveConfigNode extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(RemoveConfigNode.class); final Integer nodeId; public RemoveConfigNode(Integer nodeId) { @@ -69,4 +72,11 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).add("nodeId", nodeId).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveDataNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveDataNode.java index 7e0140137a5b..c231541d554f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveDataNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveDataNode.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -27,6 +28,8 @@ import static com.google.common.base.MoreObjects.toStringHelper; public class RemoveDataNode extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(RemoveDataNode.class); final List nodeIds; public RemoveDataNode(List dataNodeIDs) { @@ -69,4 +72,12 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).add("nodeIds", nodeIds).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfIntegerList(nodeIds); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveRegion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveRegion.java index 9dc1dad70836..75e52918b74d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveRegion.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RemoveRegion.java @@ -20,11 +20,14 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; public class RemoveRegion extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(RemoveRegion.class); private final List regionIds; private final int dataNodeId; @@ -74,4 +77,12 @@ public List getRegionIds() { public int getDataNodeId() { return dataNodeId; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfIntegerList(regionIds); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RenameColumn.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RenameColumn.java index d0fbf1ed3200..5e1277316a43 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RenameColumn.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RenameColumn.java @@ -22,6 +22,7 @@ import org.apache.iotdb.db.exception.sql.SemanticException; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,9 @@ import static java.util.Objects.requireNonNull; public final class RenameColumn extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(RenameColumn.class); + private final QualifiedName table; private final Identifier source; private final Identifier target; @@ -125,4 +129,14 @@ public String toString() { .add("view", view) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += table == null ? 0L : table.ramBytesUsed(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(source); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(target); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RenameTable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RenameTable.java index 4a181f99bba0..77c3296fee00 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RenameTable.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RenameTable.java @@ -22,6 +22,7 @@ import org.apache.iotdb.db.exception.sql.SemanticException; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,9 @@ import static java.util.Objects.requireNonNull; public class RenameTable extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(RenameTable.class); + private final QualifiedName source; private final Identifier target; @@ -107,4 +111,13 @@ public String toString() { .add("view", view) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += source == null ? 0L : source.ramBytesUsed(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(target); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Row.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Row.java index d65dbb856b0a..8510abb5b1b3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Row.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Row.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -31,6 +32,9 @@ import static java.util.Objects.requireNonNull; public class Row extends Expression { + + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Row.class); + private final List items; public Row(List items) { @@ -107,4 +111,11 @@ public boolean equals(Object obj) { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(items); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SearchedCaseExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SearchedCaseExpression.java index 1010d44ed25a..c6ccd5dc6f49 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SearchedCaseExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SearchedCaseExpression.java @@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableList; import org.apache.tsfile.external.commons.lang3.Validate; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import javax.annotation.Nullable; @@ -36,6 +37,9 @@ import static java.util.Objects.requireNonNull; public class SearchedCaseExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(SearchedCaseExpression.class); + private final List whenClauses; @Nullable private final Expression defaultValue; @@ -146,4 +150,13 @@ protected void serialize(DataOutputStream stream) throws IOException { } Expression.serialize(getDefaultValue().orElse(new NullLiteral()), stream); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(whenClauses); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(defaultValue); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Select.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Select.java index 236dc40d10f5..db644daa872b 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Select.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Select.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,8 @@ public class Select extends Node { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Select.class); + private final boolean distinct; private final List selectItems; @@ -97,4 +100,11 @@ public boolean shallowEquals(Node other) { return distinct == ((Select) other).distinct; } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(selectItems); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetColumnComment.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetColumnComment.java index c179f23c6d24..8feefe9b637f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetColumnComment.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetColumnComment.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -30,6 +31,8 @@ import static java.util.Objects.requireNonNull; public class SetColumnComment extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(SetColumnComment.class); private final QualifiedName table; private final Identifier field; @@ -113,4 +116,14 @@ public String toString() { .add("comment", comment) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += table == null ? 0L : table.ramBytesUsed(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(field); + size += RamUsageEstimator.sizeOf(comment); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetProperties.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetProperties.java index 943e362c05df..08289e31eaf5 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetProperties.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetProperties.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; @@ -30,6 +31,8 @@ import static java.util.Objects.requireNonNull; public class SetProperties extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(SetProperties.class); public enum Type { TABLE, @@ -110,4 +113,13 @@ public String toString() { .add("ifExists", ifExists) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += name == null ? 0L : name.ramBytesUsed(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(properties); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetSqlDialect.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetSqlDialect.java index 5f4092d5c31b..fb0d7b763e32 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetSqlDialect.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetSqlDialect.java @@ -22,6 +22,7 @@ import org.apache.iotdb.db.protocol.session.IClientSession; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -29,6 +30,8 @@ import java.util.Objects; public class SetSqlDialect extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(SetSqlDialect.class); private final IClientSession.SqlDialect sqlDialect; public SetSqlDialect(IClientSession.SqlDialect sqlDialect, @Nullable NodeLocation location) { @@ -76,4 +79,11 @@ public boolean shallowEquals(Node other) { public String toString() { return "SET SQL_DIALECT=" + sqlDialect; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetTableComment.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetTableComment.java index 4dfd78a03366..ffc549150279 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetTableComment.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SetTableComment.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -30,6 +31,8 @@ import static com.google.common.base.MoreObjects.toStringHelper; public class SetTableComment extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(SetTableComment.class); private final QualifiedName tableName; private final boolean ifExists; @Nullable private final String comment; @@ -104,4 +107,13 @@ public String toString() { .add("view", view) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += tableName == null ? 0L : tableName.ramBytesUsed(); + size += RamUsageEstimator.sizeOf(comment); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAIDevices.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAIDevices.java index 40fec58b2f07..b65d716459f4 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAIDevices.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAIDevices.java @@ -19,12 +19,17 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.List; import static com.google.common.base.MoreObjects.toStringHelper; public class ShowAIDevices extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowAIDevices.class); + public ShowAIDevices() { super(null); } @@ -56,4 +61,11 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAINodes.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAINodes.java index baaaa5eea5e2..04fa5089ee65 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAINodes.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAINodes.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; @@ -28,6 +29,9 @@ public class ShowAINodes extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowAINodes.class); + public ShowAINodes() { super(null); } @@ -63,4 +67,11 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAvailableUrls.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAvailableUrls.java index 2117cdfdac28..e33e0bf8df23 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAvailableUrls.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowAvailableUrls.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; @@ -27,6 +28,9 @@ public class ShowAvailableUrls extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowAvailableUrls.class); + public ShowAvailableUrls() { super(null); } @@ -58,4 +62,11 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCluster.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCluster.java index d7ea18642b6b..a12a9eef06ac 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCluster.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCluster.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,9 @@ public class ShowCluster extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowCluster.class); + private final boolean details; public ShowCluster() { @@ -87,4 +91,11 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).add("details", details).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowClusterId.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowClusterId.java index 1a5f7e0182a6..a754a0542eab 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowClusterId.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowClusterId.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -27,6 +28,9 @@ public class ShowClusterId extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowClusterId.class); + public ShowClusterId(@Nullable NodeLocation location) { super(location); } @@ -63,4 +67,11 @@ public boolean shallowEquals(Node other) { public String toString() { return "SHOW CLUSTERID"; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowConfigNodes.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowConfigNodes.java index 8139789f77b6..7c5bfb12829b 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowConfigNodes.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowConfigNodes.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; @@ -28,6 +29,9 @@ public class ShowConfigNodes extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowConfigNodes.class); + public ShowConfigNodes() { super(null); } @@ -63,4 +67,11 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowConfiguration.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowConfiguration.java index b8bd5578246c..2b9a3d7796a4 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowConfiguration.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowConfiguration.java @@ -23,7 +23,6 @@ import org.apache.iotdb.db.queryengine.plan.statement.Statement; public class ShowConfiguration extends WrappedStatement { - public ShowConfiguration(Statement innerTreeStatement, MPPQueryContext context) { super(innerTreeStatement, context); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentDatabase.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentDatabase.java index caeb4d0eee8a..26c09f32c8fe 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentDatabase.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentDatabase.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -27,6 +28,9 @@ public class ShowCurrentDatabase extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowCurrentDatabase.class); + public ShowCurrentDatabase(@Nullable NodeLocation location) { super(location); } @@ -63,4 +67,11 @@ public boolean shallowEquals(Node other) { public String toString() { return "SHOW CURRENT_DATABASE"; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentSqlDialect.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentSqlDialect.java index b4054b0ca691..a9d6af80c4ae 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentSqlDialect.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentSqlDialect.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -27,6 +28,9 @@ public class ShowCurrentSqlDialect extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowCurrentSqlDialect.class); + public ShowCurrentSqlDialect(@Nullable NodeLocation location) { super(location); } @@ -63,4 +67,11 @@ public boolean shallowEquals(Node other) { public String toString() { return "SHOW CURRENT_SQL_DIALECT"; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentTimestamp.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentTimestamp.java index d37a37d10f3d..18a7f48dd273 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentTimestamp.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentTimestamp.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -27,6 +28,9 @@ public class ShowCurrentTimestamp extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowCurrentTimestamp.class); + public ShowCurrentTimestamp(@Nullable NodeLocation location) { super(location); } @@ -63,4 +67,11 @@ public boolean shallowEquals(Node other) { public String toString() { return "SHOW CURRENT_TIMESTAMP"; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentUser.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentUser.java index d6e9400ed43e..ede46f87a3fd 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentUser.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowCurrentUser.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -27,6 +28,9 @@ public class ShowCurrentUser extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowCurrentUser.class); + public ShowCurrentUser(@Nullable NodeLocation location) { super(location); } @@ -63,4 +67,11 @@ public boolean shallowEquals(Node other) { public String toString() { return "SHOW CURRENT_USER"; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDB.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDB.java index b8dd93e35627..a19c3b9eca02 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDB.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDB.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; @@ -27,6 +28,8 @@ public class ShowDB extends Statement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(ShowDB.class); + private final boolean isDetails; public ShowDB(final NodeLocation location, final boolean isDetails) { @@ -65,4 +68,11 @@ public boolean equals(final Object obj) { public String toString() { return "SHOW DATABASES"; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDataNodes.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDataNodes.java index c95f5b9cbab8..b06e326fb929 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDataNodes.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDataNodes.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; @@ -28,6 +29,9 @@ public class ShowDataNodes extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowDataNodes.class); + public ShowDataNodes() { super(null); } @@ -63,4 +67,11 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java index f7f773ffeae5..f83b7df9837c 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowDevice.java @@ -30,11 +30,15 @@ import org.apache.tsfile.enums.TSDataType; import org.apache.tsfile.read.common.block.TsBlock; import org.apache.tsfile.read.common.block.TsBlockBuilder; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.Objects; import java.util.stream.Collectors; public class ShowDevice extends AbstractQueryDeviceWithCache { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowDevice.class); + private static final String ALIGNED_HEADER = "__aligned"; private static final String DATABASE_HEADER = "__database"; private Offset offset; @@ -139,4 +143,12 @@ public R accept(final AstVisitor visitor, final C context) { public String toString() { return "ShowDevice" + toStringContent(); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + ramBytesUsedForCommonFields() + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(offset) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(limit); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowFunctions.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowFunctions.java index 9dc82bee89ac..8dc8311e22d1 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowFunctions.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowFunctions.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; @@ -27,6 +28,9 @@ public class ShowFunctions extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowFunctions.class); + public ShowFunctions() { super(null); } @@ -62,4 +66,11 @@ public boolean equals(Object obj) { public String toString() { return "SHOW FUNCTIONS"; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowIndex.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowIndex.java index 46b902e841f2..ea2733ce5835 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowIndex.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowIndex.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ import static java.util.Objects.requireNonNull; public class ShowIndex extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowIndex.class); + private final QualifiedName tableName; public ShowIndex(QualifiedName tableName) { @@ -75,4 +79,12 @@ public int hashCode() { public String toString() { return toStringHelper(this).add("tableName", tableName).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += tableName == null ? 0L : tableName.ramBytesUsed(); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowLoadedModels.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowLoadedModels.java index 99dd60afd877..5b37071ebed4 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowLoadedModels.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowLoadedModels.java @@ -19,11 +19,16 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.List; import java.util.Objects; public class ShowLoadedModels extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowLoadedModels.class); + private final List deviceIdList; public ShowLoadedModels(List deviceIdList) { @@ -63,4 +68,12 @@ public int hashCode() { public String toString() { return "ShowLoadedModels{" + "deviceIdList=" + deviceIdList + '}'; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfStringList(deviceIdList); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowModels.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowModels.java index 6032a29a2466..9b5a47fb5fcd 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowModels.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowModels.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; @@ -27,6 +28,9 @@ public class ShowModels extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowModels.class); + private String modelId = null; public ShowModels() { @@ -71,4 +75,12 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(modelId); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowPipePlugins.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowPipePlugins.java index 115a554a227c..009b89d97dcf 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowPipePlugins.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowPipePlugins.java @@ -19,10 +19,15 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import static com.google.common.base.MoreObjects.toStringHelper; public class ShowPipePlugins extends PipeStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowPipePlugins.class); + @Override public R accept(AstVisitor visitor, C context) { return visitor.visitShowPipePlugins(this, context); @@ -42,4 +47,11 @@ public boolean equals(Object obj) { public String toString() { return toStringHelper(this).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowPipes.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowPipes.java index c0dfe9379de1..3dd581034e72 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowPipes.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowPipes.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import javax.annotation.Nullable; import java.util.Objects; @@ -27,6 +29,9 @@ public class ShowPipes extends PipeStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowPipes.class); + private final String pipeName; private final boolean hasWhereClause; @@ -73,4 +78,12 @@ public String toString() { .add("hasWhereClause", hasWhereClause) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(pipeName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowRegions.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowRegions.java index facfcb9554a4..daca5026f5b7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowRegions.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowRegions.java @@ -22,6 +22,7 @@ import org.apache.iotdb.common.rpc.thrift.TConsensusGroupType; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,9 @@ public class ShowRegions extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowRegions.class); + private final TConsensusGroupType regionType; private final String database; private final List nodeIds; @@ -91,4 +95,13 @@ public String toString() { .add("nodeIds", nodeIds) .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(database); + size += AstMemoryEstimationHelper.getEstimatedSizeOfIntegerList(nodeIds); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowStatement.java index d193bf1590dd..670e84c8b1d2 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowStatement.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowStatement.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,9 @@ import static java.util.Objects.requireNonNull; public class ShowStatement extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowStatement.class); + private final String tableName; private final Optional where; @@ -113,4 +117,17 @@ public String toString() { .omitNullValues() .toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(tableName); + size += 4 * AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(where.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(orderBy.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(offset.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(limit.orElse(null)); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowSubscriptions.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowSubscriptions.java index fc89088dc844..cb9456d36292 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowSubscriptions.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowSubscriptions.java @@ -19,12 +19,17 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Objects; import static com.google.common.base.MoreObjects.toStringHelper; public class ShowSubscriptions extends SubscriptionStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowSubscriptions.class); + private final String topicName; public ShowSubscriptions(final String topicName) { @@ -61,4 +66,12 @@ public boolean equals(final Object obj) { public String toString() { return toStringHelper(this).add("topicName", topicName).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(topicName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowTables.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowTables.java index edb711ca9a22..47d94b7c0d88 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowTables.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowTables.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -32,6 +33,9 @@ public class ShowTables extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowTables.class); + @Nullable private final Identifier dbName; private final boolean isDetails; @@ -87,4 +91,12 @@ public boolean equals(final Object obj) { public String toString() { return toStringHelper(this).add("dbName", dbName).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(dbName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowTopics.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowTopics.java index 5b78117cefa0..c630c1c51bf2 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowTopics.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowTopics.java @@ -19,12 +19,17 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Objects; import static com.google.common.base.MoreObjects.toStringHelper; public class ShowTopics extends SubscriptionStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowTopics.class); + private final String topicName; public ShowTopics(final String topicName) { @@ -61,4 +66,12 @@ public boolean equals(final Object obj) { public String toString() { return toStringHelper(this).add("topicName", topicName).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(topicName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVariables.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVariables.java index 0bd8c46202cd..dc0b0e8869e7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVariables.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVariables.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -27,6 +28,9 @@ public class ShowVariables extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowVariables.class); + public ShowVariables(@Nullable NodeLocation location) { super(location); } @@ -63,4 +67,11 @@ public boolean shallowEquals(Node other) { public String toString() { return "SHOW VARIABLES"; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVersion.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVersion.java index 048dcb60e1d3..75ecf86e449a 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVersion.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ShowVersion.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -27,6 +28,9 @@ public class ShowVersion extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowVersion.class); + public ShowVersion(@Nullable NodeLocation location) { super(location); } @@ -63,4 +67,11 @@ public boolean shallowEquals(Node other) { public String toString() { return "SHOW VERSION"; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SimpleCaseExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SimpleCaseExpression.java index 66273e145aa9..e8a4fdad0fe5 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SimpleCaseExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SimpleCaseExpression.java @@ -21,6 +21,7 @@ import com.google.common.collect.ImmutableList; import org.apache.tsfile.external.commons.lang3.Validate; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import javax.annotation.Nullable; @@ -37,6 +38,9 @@ public class SimpleCaseExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(SimpleCaseExpression.class); + private final Expression operand; private final List whenClauses; @Nullable private final Expression defaultValue; @@ -164,4 +168,14 @@ protected void serialize(DataOutputStream stream) throws IOException { } Expression.serialize(getDefaultValue().orElse(new NullLiteral()), stream); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(operand); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(whenClauses); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(defaultValue); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SimpleGroupBy.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SimpleGroupBy.java index 88b80a6072b7..2827480b8619 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SimpleGroupBy.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SimpleGroupBy.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,9 @@ public final class SimpleGroupBy extends GroupingElement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(SimpleGroupBy.class); + private final List columns; public SimpleGroupBy(List simpleGroupByExpressions) { @@ -86,4 +90,12 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(columns); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SingleColumn.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SingleColumn.java index 9d8d0bb2b9db..f9786f9f8b6e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SingleColumn.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SingleColumn.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -31,6 +32,9 @@ public class SingleColumn extends SelectItem { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(SingleColumn.class); + @Nullable private final Identifier alias; private final Expression expression; @@ -136,4 +140,15 @@ public boolean shallowEquals(Node other) { return alias.equals(((SingleColumn) other).alias); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(expression); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(alias); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(expandedExpressions); + size += AstMemoryEstimationHelper.getEstimatedSizeOfStringList(accordingColumnNames); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SkipTo.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SkipTo.java index 9a5b9e809368..1894f9f120a4 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SkipTo.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SkipTo.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -34,6 +35,8 @@ import static org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo.Position.PAST_LAST; public class SkipTo extends Node { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(SkipTo.class); + private final Position position; private final Optional identifier; @@ -130,4 +133,13 @@ public boolean shallowEquals(Node other) { return position == ((SkipTo) other).position; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(identifier.orElse(null)); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SortItem.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SortItem.java index f32b5ee356a6..50fe12b2c5b0 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SortItem.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SortItem.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -33,6 +34,8 @@ public class SortItem extends Node { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(SortItem.class); + public enum Ordering { ASCENDING, DESCENDING @@ -143,4 +146,12 @@ public SortItem(ByteBuffer byteBuffer) { ordering = Ordering.values()[ReadWriteIOUtils.readByte(byteBuffer)]; nullOrdering = NullOrdering.values()[ReadWriteIOUtils.readByte(byteBuffer)]; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(sortKey); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StartPipe.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StartPipe.java index 15eb5b2413dd..01410b7f3b1c 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StartPipe.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StartPipe.java @@ -19,12 +19,16 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Objects; import static com.google.common.base.MoreObjects.toStringHelper; import static java.util.Objects.requireNonNull; public class StartPipe extends PipeStatement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(StartPipe.class); private final String pipeName; @@ -62,4 +66,12 @@ public boolean equals(final Object obj) { public String toString() { return toStringHelper(this).add("pipeName", pipeName).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(pipeName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StopPipe.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StopPipe.java index 6d1a629de882..5c1fca6cb87d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StopPipe.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StopPipe.java @@ -19,12 +19,15 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Objects; import static com.google.common.base.MoreObjects.toStringHelper; import static java.util.Objects.requireNonNull; public class StopPipe extends PipeStatement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(StopPipe.class); private final String pipeName; @@ -62,4 +65,12 @@ public boolean equals(final Object obj) { public String toString() { return toStringHelper(this).add("pipeName", pipeName).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(pipeName); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StringLiteral.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StringLiteral.java index 0bf9c7046fee..981ccd6c1e83 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StringLiteral.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/StringLiteral.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import org.apache.tsfile.utils.Binary; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -32,6 +33,9 @@ public class StringLiteral extends Literal { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(StringLiteral.class); + private final String value; private final int length; @@ -109,4 +113,11 @@ public StringLiteral(ByteBuffer byteBuffer) { public Object getTsValue() { return new Binary(value.getBytes(StandardCharsets.UTF_8)); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + RamUsageEstimator.sizeOf(value); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SubqueryExpression.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SubqueryExpression.java index 703f2c9721cf..97d2c9bc740e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SubqueryExpression.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SubqueryExpression.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ public class SubqueryExpression extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(SubqueryExpression.class); + private final Query query; public SubqueryExpression(Query query) { @@ -76,4 +80,12 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(query); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SubsetDefinition.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SubsetDefinition.java index 058eacdbde02..cd4a5adda9d0 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SubsetDefinition.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SubsetDefinition.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.List; import java.util.Objects; @@ -27,6 +29,9 @@ import static java.util.Objects.requireNonNull; public class SubsetDefinition extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(SubsetDefinition.class); + private final Identifier name; private final List identifiers; @@ -87,4 +92,13 @@ public boolean shallowEquals(Node other) { return Objects.equals(name, ((SubsetDefinition) other).name); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(identifiers); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SymbolReference.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SymbolReference.java index 23fba4aa4f5d..b1b05cfd550f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SymbolReference.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/SymbolReference.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -30,6 +31,9 @@ public class SymbolReference extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(SymbolReference.class); + private final String name; public SymbolReference(String name) { @@ -84,4 +88,11 @@ public SymbolReference(ByteBuffer byteBuffer) { super(null); this.name = ReadWriteIOUtils.readString(byteBuffer); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + RamUsageEstimator.sizeOf(name); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Table.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Table.java index cd726b22b6bf..bf397932ffd8 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Table.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Table.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ import static java.util.Objects.requireNonNull; public class Table extends QueryBody { + + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Table.class); + private final QualifiedName name; public Table(QualifiedName name) { @@ -86,4 +90,11 @@ public boolean shallowEquals(Node other) { Table otherTable = (Table) other; return name.equals(otherTable.name); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + (name == null ? 0L : name.ramBytesUsed()); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionArgument.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionArgument.java index 5fac31abc435..b170a0c507ee 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionArgument.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionArgument.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,9 @@ import static java.util.Objects.requireNonNull; public class TableFunctionArgument extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(TableFunctionArgument.class); + private final Optional name; private final Node value; @@ -89,4 +93,14 @@ public boolean shallowEquals(Node o) { return Objects.equals(name, ((TableFunctionArgument) o).name); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionInvocation.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionInvocation.java index cda983b8c562..38f362dc9142 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionInvocation.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionInvocation.java @@ -19,6 +19,8 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -26,6 +28,9 @@ import static java.util.Objects.requireNonNull; public class TableFunctionInvocation extends Relation { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(TableFunctionInvocation.class); + private final QualifiedName name; private final List arguments; @@ -89,4 +94,13 @@ public boolean shallowEquals(Node o) { TableFunctionInvocation other = (TableFunctionInvocation) o; return Objects.equals(name, other.name); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += name == null ? 0L : name.ramBytesUsed(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(arguments); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionTableArgument.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionTableArgument.java index c6f1ee88d0c4..63bba06daa30 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionTableArgument.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableFunctionTableArgument.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,9 @@ import static org.apache.iotdb.db.queryengine.plan.relational.sql.util.ExpressionFormatter.formatSortItems; public class TableFunctionTableArgument extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(TableFunctionTableArgument.class); + private final Relation table; private final Optional> partitionBy; // it is allowed to partition by empty list private Optional orderBy; @@ -120,4 +124,15 @@ public String toString() { public boolean shallowEquals(Node o) { return sameClass(this, o); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(table); + size += 2 * AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(partitionBy.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(orderBy.orElse(null)); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableSubquery.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableSubquery.java index a604a7e01fe5..1036959ea4c7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableSubquery.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TableSubquery.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,9 @@ public class TableSubquery extends QueryBody { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(TableSubquery.class); + private final Query query; public TableSubquery(Query query) { @@ -82,4 +86,12 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(query); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TimeRange.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TimeRange.java index 0242547561f7..9b756b61d048 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TimeRange.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TimeRange.java @@ -19,12 +19,17 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.Collections; import java.util.List; import java.util.Objects; public class TimeRange extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(TimeRange.class); + // [startTime, endTime) private long startTime; private long endTime; @@ -104,4 +109,11 @@ public boolean isLeftCRightO() { public org.apache.tsfile.read.common.TimeRange toTsFileTimeRange() { return new org.apache.tsfile.read.common.TimeRange(this.startTime, this.endTime); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Trim.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Trim.java index 235e9e079c3f..bebf51629f3d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Trim.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Trim.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -30,6 +31,8 @@ import static java.util.Objects.requireNonNull; public class Trim extends Expression { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Trim.class); + private final Specification specification; private final Expression trimSource; @Nullable private final Expression trimCharacter; @@ -138,4 +141,13 @@ public String getFunctionName() { return functionName; } } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(trimSource); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(trimCharacter); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TypeParameter.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TypeParameter.java index 2c64f55229ba..f691bd2ea548 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TypeParameter.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/TypeParameter.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ public class TypeParameter extends DataTypeParameter { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(TypeParameter.class); + private final DataType type; public TypeParameter(DataType type) { @@ -75,4 +79,12 @@ public int hashCode() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(type); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Union.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Union.java index 0f6230028b89..cda978b0312c 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Union.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Union.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -29,6 +30,8 @@ public class Union extends SetOperation { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Union.class); + private final List relations; public Union(List relations, boolean distinct) { @@ -89,4 +92,12 @@ public boolean shallowEquals(Node other) { return this.isDistinct() == ((Union) other).isDistinct(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(relations); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/UnloadModel.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/UnloadModel.java index 4922d248b593..f5bbb2d4989f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/UnloadModel.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/UnloadModel.java @@ -19,11 +19,16 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.util.List; import java.util.Objects; public class UnloadModel extends Statement { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(UnloadModel.class); + private final String modelId; private final List deviceIdList; @@ -69,4 +74,13 @@ public int hashCode() { public String toString() { return "UnloadModel{" + "modelId='" + modelId + '\'' + ", deviceIdList=" + deviceIdList + '}'; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += RamUsageEstimator.sizeOf(modelId); + size += AstMemoryEstimationHelper.getEstimatedSizeOfStringList(deviceIdList); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Update.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Update.java index 9e737818edcc..1d4b3a8742ef 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Update.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Update.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -30,6 +31,8 @@ import static java.util.Objects.requireNonNull; public class Update extends AbstractTraverseDevice { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Update.class); + private List assignments; public Update( @@ -80,4 +83,12 @@ public String toString() { + " - " + super.toStringContent(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += ramBytesUsedForCommonFields(); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(assignments); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/UpdateAssignment.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/UpdateAssignment.java index 27ea95a83935..a1db1cc69407 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/UpdateAssignment.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/UpdateAssignment.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.io.DataOutputStream; import java.io.IOException; @@ -30,6 +31,9 @@ import static java.util.Objects.requireNonNull; public class UpdateAssignment extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(UpdateAssignment.class); + private final Expression name; private final Expression value; @@ -99,4 +103,13 @@ public int hashCode() { public String toString() { return name + " = " + value; } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(value); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Use.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Use.java index 3de8a716f073..1ada10d2aef9 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Use.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Use.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nonnull; @@ -31,6 +32,8 @@ public final class Use extends Statement { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Use.class); + private final Identifier db; public Use(@Nonnull Identifier db) { @@ -78,4 +81,12 @@ public int hashCode() { public String toString() { return toStringHelper(this).toString(); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(db); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Values.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Values.java index e2d3dd11d577..4850571478de 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Values.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/Values.java @@ -21,6 +21,7 @@ import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,8 @@ import static java.util.Objects.requireNonNull; public final class Values extends QueryBody { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(Values.class); + private final List rows; public Values(List rows) { @@ -80,4 +83,12 @@ public boolean equals(Object obj) { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(rows); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/VariableDefinition.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/VariableDefinition.java index 5af4d5f59133..b965e9154755 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/VariableDefinition.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/VariableDefinition.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ import static java.util.Objects.requireNonNull; public class VariableDefinition extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(VariableDefinition.class); + private final Identifier name; private final Expression expression; @@ -86,4 +90,13 @@ public boolean shallowEquals(Node other) { return Objects.equals(name, ((VariableDefinition) other).name); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(expression); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WhenClause.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WhenClause.java index 19de50315c9f..c46cb716ed6f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WhenClause.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WhenClause.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.io.DataOutputStream; import java.io.IOException; @@ -31,6 +32,9 @@ public class WhenClause extends Expression { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(WhenClause.class); + private final Expression operand; private final Expression result; @@ -109,4 +113,12 @@ protected void serialize(DataOutputStream stream) throws IOException { Expression.serialize(operand, stream); Expression.serialize(result, stream); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + + AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(operand) + + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(result); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowDefinition.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowDefinition.java index fde2ef6c6268..ada49ae37e8c 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowDefinition.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowDefinition.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -28,6 +29,9 @@ import static java.util.Objects.requireNonNull; public class WindowDefinition extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(WindowDefinition.class); + private final Identifier name; private final WindowSpecification window; @@ -85,4 +89,13 @@ public boolean shallowEquals(Node other) { return name.equals(((WindowDefinition) other).name); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(window); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowFrame.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowFrame.java index 6cb790f99959..9e5ec43b4cb7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowFrame.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowFrame.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -33,6 +34,9 @@ import static java.util.Objects.requireNonNull; public class WindowFrame extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(WindowFrame.class); + public enum Type { RANGE, ROWS, @@ -140,4 +144,14 @@ public WindowFrame(ByteBuffer byteBuffer) { end = Optional.empty(); } } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(start); + size += AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(end.orElse(null)); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowReference.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowReference.java index 6f54fee59ba5..9b797d812fa5 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowReference.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowReference.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.io.DataOutputStream; import java.io.IOException; @@ -31,6 +32,9 @@ import static java.util.Objects.requireNonNull; public class WindowReference extends Node implements Window { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(WindowReference.class); + private final Identifier name; public WindowReference(NodeLocation location, Identifier name) { @@ -93,4 +97,12 @@ public WindowReference(ByteBuffer byteBuffer) { super(null); this.name = new Identifier(byteBuffer); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowSpecification.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowSpecification.java index 6982a46aea97..44a5779b49fd 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowSpecification.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WindowSpecification.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -34,6 +35,9 @@ import static java.util.Objects.requireNonNull; public class WindowSpecification extends Node implements Window { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(WindowSpecification.class); + private final Optional existingWindowName; private final List partitionBy; private final Optional orderBy; @@ -203,4 +207,18 @@ public WindowSpecification(ByteBuffer byteBuffer) { frame = Optional.empty(); } } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(partitionBy); + size += 3 * AstMemoryEstimationHelper.OPTIONAL_INSTANCE_SIZE; + size += + AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject( + existingWindowName.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(orderBy.orElse(null)); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(frame.orElse(null)); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/With.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/With.java index 58582d5dab70..3fd654b66075 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/With.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/With.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.List; import java.util.Objects; @@ -30,6 +31,8 @@ public class With extends Node { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(With.class); + private final boolean recursive; private final List queries; @@ -97,4 +100,12 @@ public String toString() { public boolean shallowEquals(Node other) { return sameClass(this, other); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(queries); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WithQuery.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WithQuery.java index 5145083e6470..ee215cb1bd98 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WithQuery.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WithQuery.java @@ -20,6 +20,7 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; import com.google.common.collect.ImmutableList; +import org.apache.tsfile.utils.RamUsageEstimator; import javax.annotation.Nullable; @@ -32,6 +33,9 @@ public class WithQuery extends Node { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(WithQuery.class); + private final Identifier name; private final Query query; @@ -127,4 +131,14 @@ public boolean shallowEquals(Node other) { return name.equals(otherRelation.name) && Objects.equals(columnNames, otherRelation.columnNames); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(name); + size += AstMemoryEstimationHelper.getEstimatedSizeOfAccountableObject(query); + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeList(columnNames); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java index af11be5ad73b..1e7a8c92baaf 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedStatement.java @@ -80,4 +80,9 @@ public MPPQueryContext getContext() { public void setContext(MPPQueryContext context) { this.context = context; } + + @Override + public long ramBytesUsed() { + throw new UnsupportedOperationException(); + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrMoreQuantifier.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrMoreQuantifier.java index c55091ba75e1..019906e02582 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrMoreQuantifier.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrMoreQuantifier.java @@ -19,7 +19,12 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + public class ZeroOrMoreQuantifier extends PatternQuantifier { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ZeroOrMoreQuantifier.class); + public ZeroOrMoreQuantifier(NodeLocation location, boolean greedy) { super(location, greedy); } @@ -28,4 +33,11 @@ public ZeroOrMoreQuantifier(NodeLocation location, boolean greedy) { public R accept(AstVisitor visitor, C context) { return visitor.visitZeroOrMoreQuantifier(this, context); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrOneQuantifier.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrOneQuantifier.java index de4d6b829848..791a5dd705f2 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrOneQuantifier.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/ZeroOrOneQuantifier.java @@ -19,7 +19,12 @@ package org.apache.iotdb.db.queryengine.plan.relational.sql.ast; +import org.apache.tsfile.utils.RamUsageEstimator; + public class ZeroOrOneQuantifier extends PatternQuantifier { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ZeroOrOneQuantifier.class); + public ZeroOrOneQuantifier(NodeLocation location, boolean greedy) { super(location, greedy); } @@ -28,4 +33,11 @@ public ZeroOrOneQuantifier(NodeLocation location, boolean greedy) { public R accept(AstVisitor visitor, C context) { return visitor.visitZeroOrOneQuantifier(this, context); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += AstMemoryEstimationHelper.getEstimatedSizeOfNodeLocation(getLocationInternal()); + return size; + } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java index ce8057987152..1c65fb326756 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/read/resp/info/impl/ShowDevicesResult.java @@ -24,7 +24,9 @@ import org.apache.iotdb.db.queryengine.plan.relational.metadata.DeviceEntry; import org.apache.iotdb.db.schemaengine.schemaregion.read.resp.info.IDeviceSchemaInfo; +import org.apache.tsfile.utils.Accountable; import org.apache.tsfile.utils.Binary; +import org.apache.tsfile.utils.RamUsageEstimator; import java.util.Arrays; import java.util.HashMap; @@ -33,7 +35,10 @@ import java.util.Objects; import java.util.function.Function; -public class ShowDevicesResult extends ShowSchemaResult implements IDeviceSchemaInfo { +public class ShowDevicesResult extends ShowSchemaResult implements IDeviceSchemaInfo, Accountable { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ShowDevicesResult.class); + private Boolean isAligned; private int templateId; @@ -137,4 +142,21 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(path, isAligned, templateId); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + if (path != null) { + size += RamUsageEstimator.sizeOf(path); + } + if (rawNodes != null) { + size += RamUsageEstimator.shallowSizeOf(rawNodes); + for (String node : rawNodes) { + if (node != null) { + size += RamUsageEstimator.sizeOf(node); + } + } + } + return size; + } } diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/sql/AstMemoryEstimatorTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/sql/AstMemoryEstimatorTest.java new file mode 100644 index 000000000000..62a5d3886a87 --- /dev/null +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/relational/sql/AstMemoryEstimatorTest.java @@ -0,0 +1,892 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.iotdb.db.queryengine.plan.relational.sql; + +import org.apache.iotdb.db.protocol.session.IClientSession; +import org.apache.iotdb.db.protocol.session.InternalClientSession; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement; +import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser; + +import org.junit.Before; +import org.junit.Test; + +import java.time.ZoneId; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class AstMemoryEstimatorTest { + + private SqlParser sqlParser; + private IClientSession clientSession; + + @Before + public void setUp() { + sqlParser = new SqlParser(); + clientSession = new InternalClientSession("testClient"); + clientSession.setDatabaseName("testdb"); + } + + private Statement parseSQL(String sql) { + return sqlParser.createStatement(sql, ZoneId.systemDefault(), clientSession); + } + + private long estimateMemorySize(Statement statement) { + return statement == null ? 0L : statement.ramBytesUsed(); + } + + // ==================== Basic Tests ==================== + + @Test + public void testNullStatement() { + assertEquals(0L, estimateMemorySize(null)); + } + + // ==================== Literal Types ==================== + + @Test + public void testStringLiteral() { + Statement statement = parseSQL("SELECT 'hello world' FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testLongLiteral() { + Statement statement = parseSQL("SELECT 123456789 FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testDoubleLiteral() { + Statement statement = parseSQL("SELECT 3.14159 FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testBooleanLiteral() { + Statement statement = parseSQL("SELECT true, false FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testNullLiteral() { + Statement statement = parseSQL("SELECT NULL FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Identifiers ==================== + + @Test + public void testIdentifier() { + Statement statement = parseSQL("SELECT column_name FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testQuotedIdentifier() { + Statement statement = parseSQL("SELECT \"my column\" FROM \"my table\""); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Function Calls ==================== + + @Test + public void testAggregateFunctions() { + Statement statement = parseSQL("SELECT count(*), sum(a), avg(b), max(c), min(d) FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testFunctionWithDistinct() { + Statement statement = parseSQL("SELECT count(DISTINCT a) FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Comparison and Logical Expressions ==================== + + @Test + public void testComparisonOperators() { + Statement statement = + parseSQL("SELECT * FROM table1 WHERE a > 10 AND b < 20 AND c >= 5 AND d <= 15"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testLogicalOperators() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE a > 10 AND b < 20 OR c > 5"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testNotExpression() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE NOT (a > 10)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Predicates ==================== + + @Test + public void testBetweenPredicate() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE a BETWEEN 10 AND 20"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testNotBetweenPredicate() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE a NOT BETWEEN 10 AND 20"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testInPredicate() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE a IN (1, 2, 3, 4, 5)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testNotInPredicate() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE a NOT IN (1, 2, 3)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testLikePredicate() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE name LIKE '%test%'"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testLikeWithEscape() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE name LIKE '%\\%%' ESCAPE '\\'"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testIsNullPredicate() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE a IS NULL"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testIsNotNullPredicate() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE a IS NOT NULL"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Case Expressions ==================== + + @Test + public void testSimpleCaseExpression() { + Statement statement = + parseSQL("SELECT CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testSimpleCaseWithoutElse() { + Statement statement = + parseSQL("SELECT CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' END FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testSearchedCaseExpression() { + Statement statement = + parseSQL( + "SELECT CASE WHEN a > 10 THEN 'big' WHEN a > 5 THEN 'medium' ELSE 'small' END FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Other Expressions ==================== + + @Test + public void testCoalesceExpression() { + Statement statement = parseSQL("SELECT coalesce(a, b, c) FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testDereferenceExpression() { + Statement statement = parseSQL("SELECT t1.column_name FROM table1 AS t1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testTrimExpression() { + Statement statement = parseSQL("SELECT trim(name) FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testTrimWithSpecification() { + Statement statement = parseSQL("SELECT trim(BOTH ' ' FROM name) FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testIfExpression() { + Statement statement = parseSQL("SELECT if(a > 10, 'big', 'small') FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testNullIfExpression() { + Statement statement = parseSQL("SELECT nullif(a, 0) FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testExtractExpression() { + Statement statement = parseSQL("SELECT EXTRACT(YEAR FROM time) FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testSubqueryExpression() { + Statement statement = parseSQL("SELECT * FROM (SELECT a, b FROM table1 WHERE a > 10) AS sub"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testInSubquery() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE a IN (SELECT b FROM table2)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testExistsPredicate() { + Statement statement = parseSQL("SELECT * FROM table1 WHERE EXISTS (SELECT 1 FROM table2)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testCastExpression() { + Statement statement = parseSQL("SELECT cast(a AS STRING) FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testTryCastExpression() { + Statement statement = parseSQL("SELECT try_cast(a AS INT64) FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Special Functions ==================== + + @Test + public void testCurrentDatabase() { + Statement statement = parseSQL("SELECT CURRENT_DATABASE FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testCurrentUser() { + Statement statement = parseSQL("SELECT CURRENT_USER FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testNowFunction() { + Statement statement = parseSQL("SELECT now() FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Row and Values ==================== + + @Test + public void testRowConstructor() { + Statement statement = parseSQL("SELECT ROW(1, 'a', 100) FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testValuesClause() { + Statement statement = parseSQL("VALUES (1, 'a'), (2, 'b'), (3, 'c')"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Query Structure ==================== + + @Test + public void testSimpleSelectQuery() { + Statement statement = parseSQL("SELECT * FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testSelectWithColumns() { + Statement statement = parseSQL("SELECT a, b, c FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testSelectWithAlias() { + Statement statement = parseSQL("SELECT a AS col_a, b AS col_b FROM table1 AS t1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testSelectWithDistinct() { + Statement statement = parseSQL("SELECT DISTINCT a, b FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testSelectAll() { + Statement statement = parseSQL("SELECT ALL a, b FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testTableSubquery() { + Statement statement = parseSQL("SELECT * FROM (SELECT a FROM table1) AS sub"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== WITH Query ==================== + + @Test + public void testWithQuery() { + Statement statement = parseSQL("WITH cte AS (SELECT a FROM table1) SELECT * FROM cte"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testWithQueryWithColumnNames() { + Statement statement = + parseSQL("WITH cte (col1, col2) AS (SELECT a, b FROM table1) SELECT * FROM cte"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testMultipleWithQueries() { + Statement statement = + parseSQL( + "WITH cte1 AS (SELECT a FROM table1), cte2 AS (SELECT b FROM table2) " + + "SELECT * FROM cte1, cte2"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== ORDER BY, LIMIT, OFFSET ==================== + + @Test + public void testOrderBy() { + Statement statement = parseSQL("SELECT * FROM table1 ORDER BY a"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testLimitOffset() { + Statement statement = parseSQL("SELECT * FROM table1 LIMIT 10 OFFSET 5"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testLimitOnly() { + Statement statement = parseSQL("SELECT * FROM table1 LIMIT 100"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testOffsetOnly() { + Statement statement = parseSQL("SELECT * FROM table1 OFFSET 10"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== GROUP BY and HAVING ==================== + + @Test + public void testGroupBy() { + Statement statement = parseSQL("SELECT a, count(*) FROM table1 GROUP BY a"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testGroupByMultipleColumns() { + Statement statement = parseSQL("SELECT a, b, count(*) FROM table1 GROUP BY a, b"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testGroupingSets() { + Statement statement = + parseSQL("SELECT a, b, count(*) FROM table1 GROUP BY GROUPING SETS ((a), (b), (a, b), ())"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testRollup() { + Statement statement = parseSQL("SELECT a, b, count(*) FROM table1 GROUP BY ROLLUP (a, b)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testCube() { + Statement statement = parseSQL("SELECT a, b, count(*) FROM table1 GROUP BY CUBE (a, b)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testHaving() { + Statement statement = parseSQL("SELECT a, count(*) FROM table1 GROUP BY a HAVING count(*) > 5"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== FILL Clause ==================== + + @Test + public void testFillLinear() { + Statement statement = parseSQL("SELECT * FROM table1 FILL METHOD LINEAR"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testFillPrevious() { + Statement statement = parseSQL("SELECT * FROM table1 FILL METHOD PREVIOUS"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testFillConstant() { + Statement statement = parseSQL("SELECT * FROM table1 FILL METHOD CONSTANT 0"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== JOIN ==================== + + @Test + public void testCrossJoin() { + Statement statement = parseSQL("SELECT * FROM table1 CROSS JOIN table2"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testJoinUsing() { + Statement statement = parseSQL("SELECT * FROM table1 JOIN table2 USING (id)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testJoinOn() { + Statement statement = parseSQL("SELECT * FROM table1 JOIN table2 ON table1.id > table2.id"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testLeftJoin() { + Statement statement = parseSQL("SELECT * FROM table1 LEFT JOIN table2 USING (id)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testRightJoin() { + Statement statement = parseSQL("SELECT * FROM table1 RIGHT JOIN table2 USING (id)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testFullJoin() { + Statement statement = parseSQL("SELECT * FROM table1 FULL JOIN table2 USING (id)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Window Functions ==================== + + @Test + public void testWindowFunctionWithOver() { + Statement statement = + parseSQL("SELECT a, sum(b) OVER (PARTITION BY a ORDER BY time) FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testNamedWindow() { + Statement statement = + parseSQL("SELECT a, sum(b) OVER w FROM table1 WINDOW w AS (PARTITION BY a ORDER BY time)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testMultipleNamedWindows() { + Statement statement = + parseSQL( + "SELECT a, sum(b) OVER w1, avg(c) OVER w2 FROM table1 " + + "WINDOW w1 AS (PARTITION BY a), w2 AS (PARTITION BY a ORDER BY time)"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== MATCH_RECOGNIZE (Pattern Recognition) ==================== + + @Test + public void testMatchRecognize() { + Statement statement = + parseSQL( + "SELECT * FROM table1 " + + "MATCH_RECOGNIZE ( " + + " PARTITION BY a " + + " ORDER BY time " + + " MEASURES A.b AS ab " + + " PATTERN (A B+) " + + " DEFINE A AS A.c > 10, B AS B.c < 5 " + + ")"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testMatchRecognizeWithQuantifiers() { + Statement statement = + parseSQL( + "SELECT * FROM table1 " + + "MATCH_RECOGNIZE ( " + + " PATTERN (A* B+ C? D{2,5}) " + + " DEFINE A AS A.x > 0, B AS B.x > 0, C AS C.x > 0, D AS D.x > 0 " + + ")"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testMatchRecognizeWithAlternation() { + Statement statement = + parseSQL( + "SELECT * FROM table1 " + + "MATCH_RECOGNIZE ( " + + " PATTERN ((A | B) C) " + + " DEFINE A AS A.x > 0, B AS B.x < 0, C AS C.x > 0 " + + ")"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testMatchRecognizeWithSubset() { + Statement statement = + parseSQL( + "SELECT * FROM table1 " + + "MATCH_RECOGNIZE ( " + + " PATTERN (A B C) " + + " SUBSET AB = (A, B) " + + " DEFINE A AS A.x > 0, B AS B.x > 0, C AS C.x > 0 " + + ")"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testMatchRecognizeWithRowsPerMatch() { + Statement statement = + parseSQL( + "SELECT * FROM table1 " + + "MATCH_RECOGNIZE ( " + + " ONE ROW PER MATCH " + + " PATTERN (A B) " + + " DEFINE A AS A.x > 0, B AS B.x > 0 " + + ")"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testMatchRecognizeWithSkipTo() { + Statement statement = + parseSQL( + "SELECT * FROM table1 " + + "MATCH_RECOGNIZE ( " + + " AFTER MATCH SKIP TO NEXT ROW " + + " PATTERN (A B) " + + " DEFINE A AS A.x > 0, B AS B.x > 0 " + + ")"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Statements ==================== + + @Test + public void testExplain() { + Statement statement = parseSQL("EXPLAIN SELECT * FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testExplainAnalyze() { + Statement statement = parseSQL("EXPLAIN ANALYZE SELECT * FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testExplainAnalyzeVerbose() { + Statement statement = parseSQL("EXPLAIN ANALYZE VERBOSE SELECT * FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testInsert() { + Statement statement = parseSQL("INSERT INTO table1 (a, b) SELECT a, b FROM table2"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testDelete() { + Statement statement = parseSQL("DELETE FROM table1 WHERE a > 10"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testDeleteWithoutWhere() { + Statement statement = parseSQL("DELETE FROM table1"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testUpdate() { + Statement statement = parseSQL("UPDATE table1 SET a = 100 WHERE b > 50"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testUpdateMultipleColumns() { + Statement statement = parseSQL("UPDATE table1 SET a = 100, b = 'new' WHERE c > 50"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Prepared Statements ==================== + + @Test + public void testPrepare() { + Statement statement = parseSQL("PREPARE myquery FROM SELECT * FROM table1 WHERE a > 10"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testExecute() { + Statement statement = parseSQL("EXECUTE myquery"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testExecuteWithParams() { + Statement statement = parseSQL("EXECUTE myquery USING 10, 'test'"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testExecuteImmediate() { + Statement statement = parseSQL("EXECUTE IMMEDIATE 'SELECT * FROM table1'"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testExecuteImmediateWithParams() { + Statement statement = parseSQL("EXECUTE IMMEDIATE 'SELECT * FROM table1' USING 10, 'test'"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testDeallocate() { + Statement statement = parseSQL("DEALLOCATE PREPARE myquery"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + // ==================== Complex Query Tests ==================== + + @Test + public void testMemorySizeIncreasesWithComplexity() { + Statement simple = parseSQL("SELECT * FROM table1"); + Statement medium = parseSQL("SELECT a, b FROM table1 WHERE a > 10"); + Statement complex = + parseSQL( + "SELECT a, b, count(*) FROM table1 WHERE a > 10 AND b < 20 " + + "GROUP BY a, b HAVING count(*) > 5 LIMIT 100 OFFSET 10"); + + long simpleSize = estimateMemorySize(simple); + long mediumSize = estimateMemorySize(medium); + long complexSize = estimateMemorySize(complex); + + assertTrue("Simple query should have smaller memory than medium", simpleSize < mediumSize); + assertTrue("Medium query should have smaller memory than complex", mediumSize < complexSize); + } + + @Test + public void testDeepNestedQuery() { + String sql = + "SELECT * FROM (" + + "SELECT * FROM (" + + "SELECT * FROM (" + + "SELECT * FROM table1" + + ") AS l3" + + ") AS l2" + + ") AS l1"; + Statement statement = parseSQL(sql); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive for nested queries", memorySize > 0); + } + + @Test + public void testComplexWhereClause() { + Statement statement = + parseSQL( + "SELECT * FROM table1 WHERE " + + "(a > 10 AND b < 20) OR (c BETWEEN 5 AND 15) " + + "AND d IN (1, 2, 3) AND e LIKE '%test%' " + + "AND f IS NOT NULL"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testComplexSelectWithManyFunctions() { + Statement statement = + parseSQL( + "SELECT " + + "count(*), sum(a), avg(b), max(c), min(d), " + + "coalesce(e, f, g), nullif(h, 0), " + + "CASE WHEN i > 10 THEN 'big' ELSE 'small' END, " + + "cast(j AS STRING), trim(k) " + + "FROM table1 " + + "GROUP BY l"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testComplexJoinQuery() { + Statement statement = + parseSQL( + "SELECT t1.a, t2.b, t3.c " + + "FROM table1 AS t1 " + + "LEFT JOIN table2 AS t2 USING (id) " + + "CROSS JOIN table3 AS t3 " + + "WHERE t1.x > 10 AND t2.y < 20"); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testVeryLongInList() { + StringBuilder sb = new StringBuilder("SELECT * FROM table1 WHERE a IN ("); + for (int i = 0; i < 100; i++) { + if (i > 0) sb.append(", "); + sb.append(i); + } + sb.append(")"); + Statement statement = parseSQL(sb.toString()); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } + + @Test + public void testLongStringLiteral() { + StringBuilder sb = new StringBuilder("SELECT '"); + for (int i = 0; i < 1000; i++) { + sb.append("x"); + } + sb.append("' FROM table1"); + Statement statement = parseSQL(sb.toString()); + long memorySize = estimateMemorySize(statement); + assertTrue("Memory size should be positive", memorySize > 0); + } +} diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeader.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeader.java index 30297ebac018..66e4a02549c3 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeader.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/column/ColumnHeader.java @@ -20,6 +20,8 @@ package org.apache.iotdb.commons.schema.column; import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.utils.Accountable; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -27,7 +29,9 @@ import java.nio.ByteBuffer; import java.util.Objects; -public class ColumnHeader { +public class ColumnHeader implements Accountable { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ColumnHeader.class); private final String columnName; private final TSDataType dataType; @@ -119,4 +123,12 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(columnName, dataType, alias); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += RamUsageEstimator.sizeOf(columnName); + size += RamUsageEstimator.sizeOf(alias); + return size; + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/SchemaFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/SchemaFilter.java index 1953a9ef12c2..bb993c172e68 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/SchemaFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/SchemaFilter.java @@ -33,6 +33,7 @@ import org.apache.iotdb.commons.schema.filter.impl.values.LikeFilter; import org.apache.iotdb.commons.schema.filter.impl.values.PreciseFilter; +import org.apache.tsfile.utils.Accountable; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -41,7 +42,7 @@ import java.util.ArrayList; import java.util.List; -public abstract class SchemaFilter { +public abstract class SchemaFilter implements Accountable { public static void serialize(final SchemaFilter schemaFilter, final ByteBuffer byteBuffer) { if (schemaFilter == null) { diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/DataTypeFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/DataTypeFilter.java index cf5b32fd63a6..17944cff22ac 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/DataTypeFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/DataTypeFilter.java @@ -24,6 +24,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.utils.RamUsageEstimator; import java.io.DataOutputStream; import java.io.IOException; @@ -32,6 +33,9 @@ public class DataTypeFilter extends SchemaFilter { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(DataTypeFilter.class); + private final TSDataType dataType; public DataTypeFilter(final TSDataType dataType) { @@ -82,4 +86,9 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(dataType); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE; + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/PathContainsFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/PathContainsFilter.java index 59b848fc7c77..a33f23c41bed 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/PathContainsFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/PathContainsFilter.java @@ -23,6 +23,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterType; import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -31,6 +32,10 @@ import java.util.Objects; public class PathContainsFilter extends SchemaFilter { + + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(PathContainsFilter.class); + private final String containString; public PathContainsFilter(final String containString) { @@ -81,4 +86,9 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(containString); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + RamUsageEstimator.sizeOf(containString); + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/TagFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/TagFilter.java index 841e2326a8ff..8092029da83b 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/TagFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/TagFilter.java @@ -23,6 +23,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterType; import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -32,6 +33,9 @@ public class TagFilter extends SchemaFilter { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(TagFilter.class); + private final String key; private final String value; private final boolean isContains; @@ -102,4 +106,9 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(key, value, isContains); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + RamUsageEstimator.sizeOf(key) + RamUsageEstimator.sizeOf(value); + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/TemplateFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/TemplateFilter.java index 28b7496ed353..562fae8d1c79 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/TemplateFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/TemplateFilter.java @@ -22,6 +22,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterType; import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -30,6 +31,10 @@ import java.util.Objects; public class TemplateFilter extends SchemaFilter { + + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(TemplateFilter.class); + private final String templateName; private final boolean isEqual; @@ -89,4 +94,9 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(templateName, isEqual); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + RamUsageEstimator.sizeOf(templateName); + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/ViewTypeFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/ViewTypeFilter.java index 1c97ee448d93..724de2c06bd8 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/ViewTypeFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/ViewTypeFilter.java @@ -24,6 +24,8 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; import org.apache.iotdb.commons.schema.view.ViewType; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.io.DataOutputStream; import java.io.IOException; import java.nio.ByteBuffer; @@ -31,6 +33,9 @@ public class ViewTypeFilter extends SchemaFilter { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ViewTypeFilter.class); + private final ViewType viewType; public ViewTypeFilter(final ViewType viewType) { @@ -81,4 +86,9 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(viewType); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE; + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AbstractMultiChildrenFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AbstractMultiChildrenFilter.java index cd5a2511b9d6..888f9675caa3 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AbstractMultiChildrenFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AbstractMultiChildrenFilter.java @@ -21,6 +21,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilter; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -31,6 +32,8 @@ import java.util.Objects; public abstract class AbstractMultiChildrenFilter extends SchemaFilter { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AbstractMultiChildrenFilter.class); private final List children; @@ -82,4 +85,26 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(children); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += RamUsageEstimator.shallowSizeOf(children); + if (children != null) { + for (SchemaFilter child : children) { + size += child == null ? 0L : child.ramBytesUsed(); + } + } + return size; + } + + protected long ramBytesUsedForFields() { + long size = 0L; + if (children != null) { + for (SchemaFilter child : children) { + size += child == null ? 0L : child.ramBytesUsed(); + } + } + return size; + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AndFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AndFilter.java index ff99283505f9..099816054056 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AndFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/AndFilter.java @@ -23,10 +23,14 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterType; import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.nio.ByteBuffer; import java.util.List; public class AndFilter extends AbstractMultiChildrenFilter { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AndFilter.class); public AndFilter(final List children) { super(children); @@ -45,4 +49,9 @@ public Boolean accept(final SchemaFilterVisitor visitor, final C node) { public SchemaFilterType getSchemaFilterType() { return SchemaFilterType.AND; } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + ramBytesUsedForFields(); + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/OrFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/OrFilter.java index 6d8297e42f38..0c54574f5fcb 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/OrFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/multichildren/OrFilter.java @@ -23,10 +23,14 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterType; import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.nio.ByteBuffer; import java.util.List; public class OrFilter extends AbstractMultiChildrenFilter { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(OrFilter.class); + public OrFilter(final List children) { super(children); } @@ -44,4 +48,9 @@ public Boolean accept(final SchemaFilterVisitor visitor, final C node) { public SchemaFilterType getSchemaFilterType() { return SchemaFilterType.OR; } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + ramBytesUsedForFields(); + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/AbstractSingleChildFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/AbstractSingleChildFilter.java index b5c015d608a7..9b8e3b0753af 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/AbstractSingleChildFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/AbstractSingleChildFilter.java @@ -21,6 +21,8 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilter; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.io.DataOutputStream; import java.io.IOException; import java.nio.ByteBuffer; @@ -28,6 +30,9 @@ public abstract class AbstractSingleChildFilter extends SchemaFilter { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AbstractSingleChildFilter.class); + private SchemaFilter child; protected AbstractSingleChildFilter(final SchemaFilter child) { @@ -73,4 +78,15 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(child); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += child == null ? 0L : child.ramBytesUsed(); + return size; + } + + protected long ramBytesUsedForFields() { + return child == null ? 0L : child.ramBytesUsed(); + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/AttributeFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/AttributeFilter.java index beb37a315bf1..98e0d62ab497 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/AttributeFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/AttributeFilter.java @@ -23,6 +23,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterType; import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -36,6 +37,10 @@ * id/attribute value from the device entry. */ public class AttributeFilter extends AbstractSingleChildFilter { + + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(AttributeFilter.class); + private final String key; public AttributeFilter(final SchemaFilter child, final String key) { @@ -90,4 +95,9 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(key, super.hashCode()); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + RamUsageEstimator.sizeOf(key) + ramBytesUsedForFields(); + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/NotFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/NotFilter.java index 97a2ab0a0fb6..ba00e5583879 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/NotFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/NotFilter.java @@ -23,9 +23,13 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterType; import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; +import org.apache.tsfile.utils.RamUsageEstimator; + import java.nio.ByteBuffer; public class NotFilter extends AbstractSingleChildFilter { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(NotFilter.class); public NotFilter(final SchemaFilter child) { super(child); @@ -44,4 +48,9 @@ public Boolean accept(final SchemaFilterVisitor visitor, final C node) { public SchemaFilterType getSchemaFilterType() { return SchemaFilterType.NOT; } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + ramBytesUsedForFields(); + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/TagFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/TagFilter.java index c38e3af8f4ae..33b6d6661967 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/TagFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/singlechild/TagFilter.java @@ -23,6 +23,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterType; import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -36,6 +37,10 @@ * id/attribute value from the device entry. */ public class TagFilter extends AbstractSingleChildFilter { + + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(TagFilter.class); + private final int index; public TagFilter(final SchemaFilter child, final int index) { @@ -90,4 +95,9 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(index, super.hashCode()); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + ramBytesUsedForFields(); + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/ComparisonFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/ComparisonFilter.java index f3a8d96d56b9..a032919ada32 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/ComparisonFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/ComparisonFilter.java @@ -23,6 +23,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterType; import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -33,6 +34,10 @@ import static java.util.Objects.requireNonNull; public class ComparisonFilter extends SchemaFilter { + + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(ComparisonFilter.class); + private final Operator operator; private final String value; @@ -96,6 +101,11 @@ public int hashCode() { return Objects.hash(operator, value); } + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + RamUsageEstimator.sizeOf(value); + } + public enum Operator { NOT_EQUAL, LESS_THAN, diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/InFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/InFilter.java index b2ec6e6ad3f7..5df2993825d1 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/InFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/InFilter.java @@ -24,6 +24,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; import org.apache.iotdb.commons.schema.filter.impl.multichildren.OrFilter; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -39,6 +40,8 @@ */ public class InFilter extends SchemaFilter { + private static final long INSTANCE_SIZE = RamUsageEstimator.shallowSizeOfInstance(InFilter.class); + private final Set values; public InFilter(Set values) { @@ -99,4 +102,9 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(values); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + RamUsageEstimator.sizeOfCollection(values); + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/LikeFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/LikeFilter.java index d0d59c0c3e93..bbbdac255404 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/LikeFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/LikeFilter.java @@ -24,6 +24,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; import org.apache.tsfile.common.regexp.LikePattern; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -33,6 +34,9 @@ import java.util.Optional; public class LikeFilter extends SchemaFilter { + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(LikeFilter.class); + private final LikePattern pattern; public LikeFilter(final String regex, final Optional escape) { @@ -100,4 +104,11 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(pattern); } + + @Override + public long ramBytesUsed() { + long size = INSTANCE_SIZE; + size += RamUsageEstimator.sizeOfObject(pattern); + return size; + } } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/PreciseFilter.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/PreciseFilter.java index 737e3dcefe74..8ed2ad45de25 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/PreciseFilter.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/schema/filter/impl/values/PreciseFilter.java @@ -23,6 +23,7 @@ import org.apache.iotdb.commons.schema.filter.SchemaFilterType; import org.apache.iotdb.commons.schema.filter.SchemaFilterVisitor; +import org.apache.tsfile.utils.RamUsageEstimator; import org.apache.tsfile.utils.ReadWriteIOUtils; import java.io.DataOutputStream; @@ -31,6 +32,10 @@ import java.util.Objects; public class PreciseFilter extends SchemaFilter { + + private static final long INSTANCE_SIZE = + RamUsageEstimator.shallowSizeOfInstance(PreciseFilter.class); + private final String value; public PreciseFilter(final String value) { @@ -81,4 +86,9 @@ public boolean equals(final Object o) { public int hashCode() { return Objects.hash(value); } + + @Override + public long ramBytesUsed() { + return INSTANCE_SIZE + RamUsageEstimator.sizeOf(value); + } } diff --git a/pom.xml b/pom.xml index fae2d82e526f..b39fbb78af84 100644 --- a/pom.xml +++ b/pom.xml @@ -173,7 +173,7 @@ 0.14.1 1.9 1.5.6-3 - 2.2.0-251218-SNAPSHOT + 2.2.0-251223-SNAPSHOT