You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2024/07/11 09:41:22 UTC

(iotdb) branch 1.3.2-queryDebug created (now 00435491ea9)

This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a change to branch 1.3.2-queryDebug
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at 00435491ea9 supprt debug

This branch includes the following new commits:

     new 00435491ea9 supprt debug

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(iotdb) 01/01: supprt debug

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch 1.3.2-queryDebug
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 00435491ea95ea03bd24ec2f4a4026adf0246df7
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Thu Jul 11 11:02:12 2024 +0800

    supprt debug
---
 .mvn/.develocity/develocity-workspace-id           |  1 +
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |  2 +-
 .../fragment/FragmentInstanceManager.java          |  4 +
 .../execution/fragment/QueryContext.java           |  4 +
 .../execution/operator/source/FileLoaderUtils.java | 18 ++++-
 .../execution/operator/source/SeriesScanUtil.java  | 11 ++-
 .../db/queryengine/plan/analyze/Analysis.java      | 10 +++
 .../queryengine/plan/analyze/AnalyzeVisitor.java   |  2 +-
 .../planner/distribution/DistributionPlanner.java  |  3 +
 .../plan/planner/plan/FragmentInstance.java        | 12 +++
 .../plan/statement/crud/QueryStatement.java        | 12 +++
 .../schemaregion/utils/ResourceByPathUtils.java    | 36 ++++++++-
 .../dataregion/memtable/AbstractMemTable.java      | 34 +++++++++
 .../memtable/AlignedWritableMemChunk.java          |  9 +++
 .../memtable/AlignedWritableMemChunkGroup.java     |  5 ++
 .../dataregion/memtable/WritableMemChunkGroup.java |  5 ++
 .../read/reader/chunk/MemAlignedChunkReader.java   |  5 ++
 .../read/reader/chunk/MemAlignedPageReader.java    | 14 ++++
 .../read/reader/chunk/MemPageReader.java           | 14 ++++
 .../metadata/DiskAlignedChunkMetadataLoader.java   | 17 +++++
 .../metadata/MemAlignedChunkMetadataLoader.java    | 17 +++++
 .../read/reader/common/PriorityMergeReader.java    |  5 ++
 .../storageengine/dataregion/tsfile/TsFileID.java  | 14 ++++
 .../dataregion/tsfile/TsFileResource.java          | 14 ++--
 .../db/utils/datastructure/AlignedTVList.java      | 85 ++++++++++++++++++++++
 .../tsfile/file/metadata/AlignedChunkMetadata.java | 10 +++
 .../file/metadata/AlignedTimeSeriesMetadata.java   | 10 +++
 .../iotdb/tsfile/file/metadata/ChunkMetadata.java  | 24 +++++-
 .../iotdb/tsfile/read/common/block/TsBlock.java    | 12 +++
 .../read/common/block/column/BinaryColumn.java     | 14 ++++
 .../read/common/block/column/BooleanColumn.java    | 14 ++++
 .../read/common/block/column/DoubleColumn.java     | 14 ++++
 .../read/common/block/column/FloatColumn.java      | 14 ++++
 .../tsfile/read/common/block/column/IntColumn.java | 14 ++++
 .../read/common/block/column/LongColumn.java       | 14 ++++
 .../read/common/block/column/NullColumn.java       |  5 ++
 .../block/column/RunLengthEncodedColumn.java       |  5 ++
 .../read/common/block/column/TimeColumn.java       | 14 ++++
 .../read/reader/chunk/AlignedChunkReader.java      | 14 ++++
 .../tsfile/read/reader/page/AlignedPageReader.java | 20 +++++
 .../tsfile/read/reader/page/TimePageReader.java    | 12 +++
 .../tsfile/read/reader/page/ValuePageReader.java   | 18 +++++
 42 files changed, 564 insertions(+), 17 deletions(-)

diff --git a/.mvn/.develocity/develocity-workspace-id b/.mvn/.develocity/develocity-workspace-id
new file mode 100644
index 00000000000..2e56ea31182
--- /dev/null
+++ b/.mvn/.develocity/develocity-workspace-id
@@ -0,0 +1 @@
+gfajylps6zb3jch4sxzzlwill4
\ No newline at end of file
diff --git a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
index ec798d6a624..74cc32534f2 100644
--- a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
+++ b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
@@ -708,7 +708,7 @@ selectStatement
 
 // ---- Select Clause
 selectClause
-    : SELECT LAST? resultColumn (COMMA resultColumn)*
+    : DEBUG? SELECT LAST? resultColumn (COMMA resultColumn)*
     ;
 
 resultColumn
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceManager.java
index 900865dc887..5e4cd43cffa 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceManager.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceManager.java
@@ -146,6 +146,8 @@ public class FragmentInstanceManager {
                                 instance.getGlobalTimePredicate(),
                                 dataNodeQueryContextMap));
 
+                context.setDebug(instance.isDebug());
+
                 try {
                   List<PipelineDriverFactory> driverFactories =
                       planner.plan(
@@ -237,6 +239,8 @@ public class FragmentInstanceManager {
                           createFragmentInstanceContext(
                               fragmentInstanceId, stateMachine, instance.getSessionInfo()));
 
+              context.setDebug(instance.isDebug());
+
               try {
                 List<PipelineDriverFactory> driverFactories =
                     planner.plan(instance.getFragment().getPlanNodeTree(), context, schemaRegion);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryContext.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryContext.java
index a749aa1657c..cbf55625783 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryContext.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryContext.java
@@ -130,6 +130,10 @@ public class QueryContext {
     return debug;
   }
 
+  public void setDebug(boolean debug) {
+    this.debug = debug;
+  }
+
   public long getQueryTimeLowerBound() {
     return queryTimeLowerBound;
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
index 91f91bb73af..c8d8a4d6306 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
@@ -52,6 +52,7 @@ import java.util.Set;
 import static com.google.common.base.Preconditions.checkArgument;
 import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.TIMESERIES_METADATA_MODIFICATION_ALIGNED;
 import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.TIMESERIES_METADATA_MODIFICATION_NONALIGNED;
+import static org.apache.iotdb.db.schemaengine.schemaregion.utils.ResourceByPathUtils.DEBUG_LOGGER;
 
 public class FileLoaderUtils {
 
@@ -186,6 +187,12 @@ public class FileLoaderUtils {
               new MemAlignedChunkMetadataLoader(resource, alignedPath, context, globalTimeFilter));
           // mem's modification already done in generating chunkmetadata
         }
+        DEBUG_LOGGER.info(
+            "Get timeseries: {}.{}  metadata in file: {}  from memtable: {}.",
+            alignedPath.getDevice(),
+            alignedPath.getMeasurementList(),
+            resource,
+            alignedTimeSeriesMetadata);
       }
 
       if (alignedTimeSeriesMetadata != null) {
@@ -342,11 +349,18 @@ public class FileLoaderUtils {
    *     IOException will be thrown
    */
   public static List<IPageReader> loadPageReaderList(
-      IChunkMetadata chunkMetaData, Filter globalTimeFilter) throws IOException {
+      IChunkMetadata chunkMetaData, Filter globalTimeFilter, QueryContext context)
+      throws IOException {
     checkArgument(chunkMetaData != null, "Can't init null chunkMeta");
 
     IChunkLoader chunkLoader = chunkMetaData.getChunkLoader();
     IChunkReader chunkReader = chunkLoader.getChunkReader(chunkMetaData, globalTimeFilter);
-    return chunkReader.loadPageReaderList();
+
+    List<IPageReader> res = chunkReader.loadPageReaderList();
+    if (context.isDebug()) {
+      DEBUG_LOGGER.info("get PageReaderList from {}, {}", chunkReader, res);
+    }
+
+    return res;
   }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
index 52fba27f076..bef547c5c35 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
@@ -62,6 +62,7 @@ import java.util.function.ToLongFunction;
 import static com.google.common.base.Preconditions.checkState;
 import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.BUILD_TSBLOCK_FROM_MERGE_READER_ALIGNED;
 import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.BUILD_TSBLOCK_FROM_MERGE_READER_NONALIGNED;
+import static org.apache.iotdb.db.schemaengine.schemaregion.utils.ResourceByPathUtils.DEBUG_LOGGER;
 
 public class SeriesScanUtil {
 
@@ -544,7 +545,8 @@ public class SeriesScanUtil {
 
   private void unpackOneChunkMetaData(IChunkMetadata chunkMetaData) throws IOException {
     List<IPageReader> pageReaderList =
-        FileLoaderUtils.loadPageReaderList(chunkMetaData, scanOptions.getGlobalTimeFilter());
+        FileLoaderUtils.loadPageReaderList(
+            chunkMetaData, scanOptions.getGlobalTimeFilter(), context);
 
     // init TsBlockBuilder for each page reader
     pageReaderList.forEach(p -> p.initTsBlockBuilder(getTsDataTypeList()));
@@ -1210,6 +1212,13 @@ public class SeriesScanUtil {
         if (!ascending) {
           tsBlock.reverse();
         }
+        DEBUG_LOGGER.info(
+            "TsBlock from version {} is {}, isSeq: {}, isAligned: {}, isMem: {}",
+            version,
+            tsBlock,
+            isSeq,
+            isAligned,
+            isMem);
         return tsBlock;
       } finally {
         long time = System.nanoTime() - startTime;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
index cf73c743b59..ae494b3d7e4 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/Analysis.java
@@ -303,11 +303,21 @@ public class Analysis implements IAnalysis {
   /////////////////////////////////////////////////////////////////////////////////////////////////
 
   private final Set<NodeRef<FilterNode>> fromWhereFilterNodes = new HashSet<>();
+  private final boolean debug;
+
+  public Analysis(boolean debug) {
+    this.debug = debug;
+  }
 
   public Analysis() {
+    this.debug = false;
     this.finishQueryAfterAnalyze = false;
   }
 
+  public boolean isDebug() {
+    return debug;
+  }
+
   public List<TRegionReplicaSet> getPartitionInfo(PartialPath seriesPath, Filter timefilter) {
     return dataPartition.getDataRegionReplicaSetWithTimeFilter(seriesPath.getDevice(), timefilter);
   }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
index ea174ffee97..828fb3fe6ce 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/AnalyzeVisitor.java
@@ -251,7 +251,7 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
 
   @Override
   public Analysis visitQuery(QueryStatement queryStatement, MPPQueryContext context) {
-    Analysis analysis = new Analysis();
+    Analysis analysis = new Analysis(queryStatement.isDebug());
     analysis.setLastLevelUseWildcard(queryStatement.isLastLevelUseWildcard());
 
     try {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlanner.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlanner.java
index 755119b2607..edf7f4aa819 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlanner.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/DistributionPlanner.java
@@ -213,6 +213,9 @@ public class DistributionPlanner {
     // Only execute this step for READ operation
     if (context.getQueryType() == QueryType.READ) {
       setSinkForRootInstance(subPlan, fragmentInstances);
+      if (analysis.isDebug()) {
+        fragmentInstances.forEach(fragmentInstance -> fragmentInstance.setDebug(true));
+      }
     }
     return new DistributedQueryPlan(
         logicalPlan.getContext(), subPlan, subPlan.getPlanFragmentList(), fragmentInstances);
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/FragmentInstance.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/FragmentInstance.java
index 4dd56beefa8..81f1fc16dcb 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/FragmentInstance.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/FragmentInstance.java
@@ -82,6 +82,8 @@ public class FragmentInstance implements IConsensusRequest {
   // We can add some more params for a specific FragmentInstance
   // So that we can make different FragmentInstance owns different data range.
 
+  private boolean debug = false;
+
   public FragmentInstance(
       PlanFragment fragment,
       FragmentInstanceId id,
@@ -223,6 +225,7 @@ public class FragmentInstance implements IConsensusRequest {
     fragmentInstance.hostDataNode =
         hasHostDataNode ? ThriftCommonsSerDeUtils.deserializeTDataNodeLocation(buffer) : null;
     fragmentInstance.isExplainAnalyze = ReadWriteIOUtils.readBool(buffer);
+    fragmentInstance.debug = ReadWriteIOUtils.readBool(buffer);
     return fragmentInstance;
   }
 
@@ -247,6 +250,7 @@ public class FragmentInstance implements IConsensusRequest {
         ThriftCommonsSerDeUtils.serializeTDataNodeLocation(hostDataNode, outputStream);
       }
       ReadWriteIOUtils.write(isExplainAnalyze, outputStream);
+      ReadWriteIOUtils.write(debug, outputStream);
       return ByteBuffer.wrap(publicBAOS.getBuf(), 0, publicBAOS.size());
     } catch (IOException e) {
       LOGGER.error("Unexpected error occurs when serializing this FragmentInstance.", e);
@@ -254,6 +258,14 @@ public class FragmentInstance implements IConsensusRequest {
     }
   }
 
+  public boolean isDebug() {
+    return debug;
+  }
+
+  public void setDebug(boolean debug) {
+    this.debug = debug;
+  }
+
   @Override
   public boolean equals(Object o) {
     if (this == o) return true;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java
index e09bdc00415..7e09f205682 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/QueryStatement.java
@@ -133,6 +133,8 @@ public class QueryStatement extends AuthorityInformationStatement {
   // we can skip the query
   private boolean isResultSetEmpty = false;
 
+  private boolean debug = false;
+
   public QueryStatement() {
     this.statementType = StatementType.QUERY;
   }
@@ -820,4 +822,14 @@ public class QueryStatement extends AuthorityInformationStatement {
       }
     }
   }
+
+  @Override
+  public boolean isDebug() {
+    return debug;
+  }
+
+  @Override
+  public void setDebug(boolean debug) {
+    this.debug = debug;
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
index 45a0324be19..eb1b7a5e57a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/utils/ResourceByPathUtils.java
@@ -52,6 +52,9 @@ import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
 import org.apache.iotdb.tsfile.write.schema.VectorMeasurementSchema;
 import org.apache.iotdb.tsfile.write.writer.RestorableTsFileIOWriter;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -67,6 +70,8 @@ import static org.apache.iotdb.commons.path.AlignedPath.VECTOR_PLACEHOLDER;
  */
 public abstract class ResourceByPathUtils {
 
+  public static final Logger DEBUG_LOGGER = LoggerFactory.getLogger("QUERY_DEBUG");
+
   public static ResourceByPathUtils getResourceInstance(PartialPath path) {
     if (path instanceof AlignedPath) {
       return new AlignedResourceByPathUtils(path);
@@ -213,14 +218,39 @@ class AlignedResourceByPathUtils extends ResourceByPathUtils {
     if (!containsMeasurement) {
       return null;
     }
+    if (context.isDebug()) {
+      DEBUG_LOGGER.info(
+          "TVList before sorting for Memtable {} is {}, schemaList is {}",
+          memTable.getMemTableId(),
+          alignedMemChunk.getTVList(),
+          alignedMemChunk.getSchemaList());
+    }
     // get sorted tv list is synchronized so different query can get right sorted list reference
     TVList alignedTvListCopy = alignedMemChunk.getSortedTvListForQuery(partialPath.getSchemaList());
+    if (context.isDebug()) {
+      DEBUG_LOGGER.info(
+          "TVList after sorting for Memtable {} is {}, schemaList is {}",
+          memTable.getMemTableId(),
+          alignedMemChunk.getTVList(),
+          partialPath.getSchemaList());
+    }
     List<List<TimeRange>> deletionList = null;
     if (modsToMemtable != null) {
       deletionList = constructDeletionList(memTable, modsToMemtable, timeLowerBound);
     }
-    return new AlignedReadOnlyMemChunk(
-        context, getMeasurementSchema(), alignedTvListCopy, deletionList);
+    AlignedReadOnlyMemChunk readOnlyMemChunk =
+        new AlignedReadOnlyMemChunk(
+            context, getMeasurementSchema(), alignedTvListCopy, deletionList);
+
+    if (context.isDebug()) {
+      DEBUG_LOGGER.info(
+          "TsBlock from Memtable {} is {}, ChunkMetadata is {}",
+          memTable.getMemTableId(),
+          readOnlyMemChunk.getTsBlock(),
+          readOnlyMemChunk.getChunkMetaData());
+    }
+
+    return readOnlyMemChunk;
   }
 
   public VectorMeasurementSchema getMeasurementSchema() {
@@ -382,6 +412,7 @@ class MeasurementResourceByPathUtils extends ResourceByPathUtils {
         partialPath.getMeasurementSchema().getProps(),
         deletionList);
   }
+
   /**
    * construct a deletion list from a memtable.
    *
@@ -404,6 +435,7 @@ class MeasurementResourceByPathUtils extends ResourceByPathUtils {
     }
     return TimeRange.sortAndMerge(deletionList);
   }
+
   /** get modifications from a memtable. */
   @Override
   protected List<Modification> getModificationsForMemtable(
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
index e898736485e..722700e77c0 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AbstractMemTable.java
@@ -720,4 +720,38 @@ public abstract class AbstractMemTable implements IMemTable {
   public boolean isTotallyGeneratedByPipe() {
     return this.isTotallyGeneratedByPipe.get();
   }
+
+  @Override
+  public String toString() {
+    return "AbstractMemTable{"
+        + "memTableId="
+        + memTableId
+        + ", createdTime="
+        + createdTime
+        + ", updateTime="
+        + updateTime
+        + ", memTableMap="
+        + memTableMap
+        + ", shouldFlush="
+        + shouldFlush
+        + ", memSize="
+        + memSize
+        + ", tvListRamCost="
+        + tvListRamCost
+        + ", seriesNumber="
+        + seriesNumber
+        + ", totalPointsNum="
+        + totalPointsNum
+        + ", totalPointsNumThreshold="
+        + totalPointsNumThreshold
+        + ", database='"
+        + database
+        + '\''
+        + ", dataRegionId='"
+        + dataRegionId
+        + '\''
+        + ", lastTotalPointsNum="
+        + lastTotalPointsNum
+        + '}';
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java
index 934b616e393..e0892f000a3 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunk.java
@@ -537,4 +537,13 @@ public class AlignedWritableMemChunk implements IWritableMemChunk {
     AlignedTVList list = (AlignedTVList) TVList.deserialize(stream);
     return new AlignedWritableMemChunk(schemaList, list);
   }
+
+  public List<IMeasurementSchema> getSchemaList() {
+    return schemaList;
+  }
+
+  @Override
+  public String toString() {
+    return list.toString();
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunkGroup.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunkGroup.java
index 17b12a748da..219feab7d31 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunkGroup.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/AlignedWritableMemChunkGroup.java
@@ -163,4 +163,9 @@ public class AlignedWritableMemChunkGroup implements IWritableMemChunkGroup {
     memChunkGroup.memChunk = AlignedWritableMemChunk.deserialize(stream);
     return memChunkGroup;
   }
+
+  @Override
+  public String toString() {
+    return memChunk.toString();
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunkGroup.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunkGroup.java
index 5534035e6e3..00f72d31d81 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunkGroup.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/memtable/WritableMemChunkGroup.java
@@ -206,4 +206,9 @@ public class WritableMemChunkGroup implements IWritableMemChunkGroup {
     }
     return memChunkGroup;
   }
+
+  @Override
+  public String toString() {
+    return memChunkMap.toString();
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java
index b9bf10e90c1..281965d1122 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkReader.java
@@ -64,4 +64,9 @@ public class MemAlignedChunkReader implements IChunkReader {
   public List<IPageReader> loadPageReaderList() {
     return this.pageReaderList;
   }
+
+  @Override
+  public String toString() {
+    return "MemAlignedChunkReader{" + "pageReaderList=" + pageReaderList + '}';
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
index 3f0c684f8ab..f87461eef69 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedPageReader.java
@@ -210,4 +210,18 @@ public class MemAlignedPageReader implements IPageReader {
   public void initTsBlockBuilder(List<TSDataType> dataTypes) {
     builder = new TsBlockBuilder(dataTypes);
   }
+
+  @Override
+  public String toString() {
+    return "MemAlignedPageReader{"
+        + "tsBlock="
+        + tsBlock
+        + ", chunkMetadata="
+        + chunkMetadata
+        + ", recordFilter="
+        + recordFilter
+        + ", paginationController="
+        + paginationController
+        + '}';
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemPageReader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemPageReader.java
index 122c62bec87..b54f6aa250b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemPageReader.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemPageReader.java
@@ -210,4 +210,18 @@ public class MemPageReader implements IPageReader {
   public void initTsBlockBuilder(List<TSDataType> dataTypes) {
     // non-aligned page reader don't need to init TsBlockBuilder at the very beginning
   }
+
+  @Override
+  public String toString() {
+    return "MemPageReader{"
+        + "tsBlock="
+        + tsBlock
+        + ", chunkMetadata="
+        + chunkMetadata
+        + ", recordFilter="
+        + recordFilter
+        + ", paginationController="
+        + paginationController
+        + '}';
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
index 7fc3b8d57ed..2f7fbf47987 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/DiskAlignedChunkMetadataLoader.java
@@ -41,6 +41,7 @@ import java.util.List;
 import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.CHUNK_METADATA_FILTER_ALIGNED_DISK;
 import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.CHUNK_METADATA_MODIFICATION_ALIGNED_DISK;
 import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.LOAD_CHUNK_METADATA_LIST_ALIGNED_DISK;
+import static org.apache.iotdb.db.schemaengine.schemaregion.utils.ResourceByPathUtils.DEBUG_LOGGER;
 
 public class DiskAlignedChunkMetadataLoader implements IChunkMetadataLoader {
 
@@ -75,6 +76,14 @@ public class DiskAlignedChunkMetadataLoader implements IChunkMetadataLoader {
       List<AlignedChunkMetadata> alignedChunkMetadataList =
           ((AlignedTimeSeriesMetadata) timeSeriesMetadata).getCopiedChunkMetadataList();
 
+      if (context.isDebug()) {
+        DEBUG_LOGGER.info(
+            "Before filter ChunkMetadataList from {}, version is {}, {}",
+            resource,
+            resource.getVersion(),
+            alignedChunkMetadataList);
+      }
+
       // when alignedChunkMetadataList.size() == 1, it means that the chunk statistics is same as
       // the time series metadata, so we don't need to filter it again.
       if (alignedChunkMetadataList.size() > 1) {
@@ -94,6 +103,14 @@ public class DiskAlignedChunkMetadataLoader implements IChunkMetadataLoader {
             CHUNK_METADATA_FILTER_ALIGNED_DISK, System.nanoTime() - t2);
       }
 
+      if (context.isDebug()) {
+        DEBUG_LOGGER.info(
+            "After filter ChunkMetadataList from {}, version is {}, {}",
+            resource,
+            resource.getVersion(),
+            alignedChunkMetadataList);
+      }
+
       final long t3 = System.nanoTime();
 
       if (context.isDebug()) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/MemAlignedChunkMetadataLoader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/MemAlignedChunkMetadataLoader.java
index a4c56419b77..9fe57b176b9 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/MemAlignedChunkMetadataLoader.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/metadata/MemAlignedChunkMetadataLoader.java
@@ -34,6 +34,7 @@ import java.util.List;
 
 import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.CHUNK_METADATA_FILTER_ALIGNED_MEM;
 import static org.apache.iotdb.db.queryengine.metric.SeriesScanCostMetricSet.LOAD_CHUNK_METADATA_LIST_ALIGNED_MEM;
+import static org.apache.iotdb.db.schemaengine.schemaregion.utils.ResourceByPathUtils.DEBUG_LOGGER;
 
 public class MemAlignedChunkMetadataLoader implements IChunkMetadataLoader {
 
@@ -85,6 +86,14 @@ public class MemAlignedChunkMetadataLoader implements IChunkMetadataLoader {
         }
       }
 
+      if (context.isDebug()) {
+        DEBUG_LOGGER.info(
+            "Before filter ChunkMetadataList from {}, version is {}, {}",
+            resource,
+            resource.getVersion(),
+            chunkMetadataList);
+      }
+
       // when chunkMetadataList.size() == 1, it means that the chunk statistics is same as
       // the time series metadata, so we don't need to filter it again.
       if (chunkMetadataList.size() > 1) {
@@ -98,6 +107,14 @@ public class MemAlignedChunkMetadataLoader implements IChunkMetadataLoader {
             CHUNK_METADATA_FILTER_ALIGNED_MEM, System.nanoTime() - t2);
       }
 
+      if (context.isDebug()) {
+        DEBUG_LOGGER.info(
+            "After filter ChunkMetadataList from {}, version is {}, {}",
+            resource,
+            resource.getVersion(),
+            chunkMetadataList);
+      }
+
       for (IChunkMetadata metadata : chunkMetadataList) {
         metadata.setVersion(resource.getVersion());
       }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/PriorityMergeReader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/PriorityMergeReader.java
index 330c856ded0..8983cbcca46 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/PriorityMergeReader.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/common/PriorityMergeReader.java
@@ -194,5 +194,10 @@ public class PriorityMergeReader implements IPointReader {
     public int hashCode() {
       return Objects.hash(version, offset);
     }
+
+    @Override
+    public String toString() {
+      return "MergeReaderPriority{" + "version=" + version + ", offset=" + offset + '}';
+    }
   }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileID.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileID.java
index 7dcbbde8fb8..28066249c25 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileID.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileID.java
@@ -93,4 +93,18 @@ public class TsFileID {
         (Long.parseLong(names[2]) << 32) | Long.parseLong(names[3].substring(0, dotIndex));
     return versionArray;
   }
+
+  @Override
+  public String toString() {
+    return "TsFileID{"
+        + "regionId="
+        + regionId
+        + ", timePartitionId="
+        + timePartitionId
+        + ", fileVersion="
+        + fileVersion
+        + ", compactionVersion="
+        + compactionVersion
+        + '}';
+  }
 }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
index 50fc244deac..2fd9f652f37 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
@@ -710,7 +710,7 @@ public class TsFileResource {
     if (startAndEndTime == null) {
       if (debug) {
         DEBUG_LOGGER.info(
-            "Path: {} file {} is not satisfied because of no device!", deviceId, file);
+            "Path: {} file {} is not satisfied because of no device!", deviceId, this);
       }
       return false;
     }
@@ -720,7 +720,7 @@ public class TsFileResource {
 
     if (!isAlive(endTime, ttl)) {
       if (debug) {
-        DEBUG_LOGGER.info("file {} is not satisfied because of ttl!", file);
+        DEBUG_LOGGER.info("file {} is not satisfied because of ttl!", this);
       }
       return false;
     }
@@ -729,7 +729,7 @@ public class TsFileResource {
       boolean res = globalTimeFilter.satisfyStartEndTime(startTime, endTime);
       if (debug && !res) {
         DEBUG_LOGGER.info(
-            "Path: {} file {} is not satisfied because of time filter!", deviceId, fsFactory);
+            "Path: {} file {} is not satisfied because of time filter!", deviceId, this);
       }
       return res;
     }
@@ -753,7 +753,7 @@ public class TsFileResource {
 
     if (!isAlive(endTime, ttl)) {
       if (debug) {
-        DEBUG_LOGGER.info("file {} is not satisfied because of ttl!", file);
+        DEBUG_LOGGER.info("file {} is not satisfied because of ttl!", this);
       }
       return false;
     }
@@ -761,7 +761,7 @@ public class TsFileResource {
     if (timeFilter != null) {
       boolean res = timeFilter.satisfyStartEndTime(startTime, endTime);
       if (debug && !res) {
-        DEBUG_LOGGER.info("Path: file {} is not satisfied because of time filter!", fsFactory);
+        DEBUG_LOGGER.info("Path: file {} is not satisfied because of time filter!", this);
       }
       return res;
     }
@@ -773,7 +773,7 @@ public class TsFileResource {
     if (definitelyNotContains(deviceId)) {
       if (debug) {
         DEBUG_LOGGER.info(
-            "Path: {} file {} is not satisfied because of no device!", deviceId, file);
+            "Path: {} file {} is not satisfied because of no device!", deviceId, this);
       }
       return false;
     }
@@ -795,7 +795,7 @@ public class TsFileResource {
       boolean res = timeFilter.satisfyStartEndTime(startTime, endTime);
       if (debug && !res) {
         DEBUG_LOGGER.info(
-            "Path: {} file {} is not satisfied because of time filter!", deviceId, fsFactory);
+            "Path: {} file {} is not satisfied because of time filter!", deviceId, this);
       }
       return res;
     }
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
index 4949044d590..179de2d53c7 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
@@ -40,6 +40,7 @@ import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 import java.io.DataInputStream;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 
@@ -1259,4 +1260,88 @@ public abstract class AlignedTVList extends TVList {
 
     return new BitMap(rowCount, rowBitsArr);
   }
+
+  private String printValueColumn(int i) {
+    StringBuilder builder = new StringBuilder();
+    List<Object> objects = values.get(i);
+    builder.append("<valueColumn>");
+    switch (dataTypes.get(i)) {
+      case TEXT:
+        for (Object object : objects) {
+          builder.append(Arrays.toString((Binary[]) object)).append(" ");
+        }
+        break;
+      case FLOAT:
+        for (Object object : objects) {
+          builder.append(Arrays.toString((float[]) object)).append(" ");
+        }
+        break;
+      case INT32:
+        for (Object object : objects) {
+          builder.append(Arrays.toString((int[]) object)).append(" ");
+        }
+        break;
+      case INT64:
+        for (Object object : objects) {
+          builder.append(Arrays.toString((long[]) object)).append(" ");
+        }
+        break;
+      case DOUBLE:
+        for (Object object : objects) {
+          builder.append(Arrays.toString((double[]) object)).append(" ");
+        }
+        break;
+      case BOOLEAN:
+        for (Object object : objects) {
+          builder.append(Arrays.toString((boolean[]) object)).append(" ");
+        }
+        break;
+    }
+    builder.append("</valueColumn>");
+    return builder.toString();
+  }
+
+  private String printValues() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("<values>");
+    for (int i = 0; i < values.size(); i++) {
+      builder.append(printValueColumn(i));
+    }
+    builder.append("</values>");
+    return builder.toString();
+  }
+
+  private String printTimestamps() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("<timestamps>");
+    for (long[] timestamp : timestamps) {
+      builder.append(Arrays.toString(timestamp)).append(" ");
+    }
+    builder.append("</timestamps>");
+    return builder.toString();
+  }
+
+  private String printIndices() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("<indices>");
+    for (int[] index : indices) {
+      builder.append(Arrays.toString(index)).append(" ");
+    }
+    builder.append("/<indices>");
+    return builder.toString();
+  }
+
+  @Override
+  public String toString() {
+    return "AlignedTVList{"
+        + "values="
+        + printValues()
+        + ", indices="
+        + printIndices()
+        + ", timestamps="
+        + printTimestamps()
+        + ", rowCount="
+        + rowCount
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedChunkMetadata.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedChunkMetadata.java
index 84b0a500527..654729afcfb 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedChunkMetadata.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedChunkMetadata.java
@@ -211,4 +211,14 @@ public class AlignedChunkMetadata implements IChunkMetadata {
   public List<IChunkMetadata> getValueChunkMetadataList() {
     return valueChunkMetadataList;
   }
+
+  @Override
+  public String toString() {
+    return "AlignedChunkMetadata{"
+        + "timeChunkMetadata="
+        + timeChunkMetadata
+        + ", valueChunkMetadataList="
+        + valueChunkMetadataList
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
index b72d2267f18..c6d3c0a5c22 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
@@ -213,4 +213,14 @@ public class AlignedTimeSeriesMetadata implements ITimeSeriesMetadata {
   public TimeseriesMetadata getTimeseriesMetadata() {
     return timeseriesMetadata;
   }
+
+  @Override
+  public String toString() {
+    return "AlignedTimeSeriesMetadata{"
+        + "timeseriesMetadata="
+        + timeseriesMetadata
+        + ", valueTimeseriesMetadataList="
+        + valueTimeseriesMetadataList
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
index 21643c5fed1..beef43a4ed0 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
@@ -115,9 +115,27 @@ public class ChunkMetadata implements IChunkMetadata {
 
   @Override
   public String toString() {
-    return String.format(
-        "measurementId: %s, datatype: %s, version: %d, " + "Statistics: %s, deleteIntervalList: %s",
-        measurementUid, tsDataType, version, statistics, deleteIntervalList);
+    return "ChunkMetadata{"
+        + "measurementUid='"
+        + measurementUid
+        + '\''
+        + ", offsetOfChunkHeader="
+        + offsetOfChunkHeader
+        + ", tsDataType="
+        + tsDataType
+        + ", version="
+        + version
+        + ", deleteIntervalList="
+        + deleteIntervalList
+        + ", modified="
+        + modified
+        + ", statistics="
+        + statistics
+        + ", isSeq="
+        + isSeq
+        + ", isClosed="
+        + isClosed
+        + '}';
   }
 
   public long getNumOfPoints() {
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlock.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlock.java
index 39233628159..e972a584a12 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlock.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlock.java
@@ -553,4 +553,16 @@ public class TsBlock {
       }
     }
   }
+
+  @Override
+  public String toString() {
+    return "TsBlock{"
+        + "timeColumn="
+        + timeColumn
+        + ", valueColumns="
+        + Arrays.toString(valueColumns)
+        + ", positionCount="
+        + positionCount
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BinaryColumn.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BinaryColumn.java
index e383342f736..8fa0e2175c9 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BinaryColumn.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BinaryColumn.java
@@ -167,4 +167,18 @@ public class BinaryColumn implements Column {
   public int getInstanceSize() {
     return INSTANCE_SIZE;
   }
+
+  @Override
+  public String toString() {
+    return "BinaryColumn{"
+        + "arrayOffset="
+        + arrayOffset
+        + ", positionCount="
+        + positionCount
+        + ", valueIsNull="
+        + Arrays.toString(valueIsNull)
+        + ", values="
+        + Arrays.toString(values)
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BooleanColumn.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BooleanColumn.java
index daed6cf312d..59f3014e9c9 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BooleanColumn.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/BooleanColumn.java
@@ -165,4 +165,18 @@ public class BooleanColumn implements Column {
   public int getInstanceSize() {
     return INSTANCE_SIZE;
   }
+
+  @Override
+  public String toString() {
+    return "BooleanColumn{"
+        + "arrayOffset="
+        + arrayOffset
+        + ", positionCount="
+        + positionCount
+        + ", valueIsNull="
+        + Arrays.toString(valueIsNull)
+        + ", values="
+        + Arrays.toString(values)
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/DoubleColumn.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/DoubleColumn.java
index 6042b471592..2892f6e8654 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/DoubleColumn.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/DoubleColumn.java
@@ -166,4 +166,18 @@ public class DoubleColumn implements Column {
   public int getInstanceSize() {
     return INSTANCE_SIZE;
   }
+
+  @Override
+  public String toString() {
+    return "DoubleColumn{"
+        + "arrayOffset="
+        + arrayOffset
+        + ", positionCount="
+        + positionCount
+        + ", valueIsNull="
+        + Arrays.toString(valueIsNull)
+        + ", values="
+        + Arrays.toString(values)
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/FloatColumn.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/FloatColumn.java
index 003ad3fce04..27408c34507 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/FloatColumn.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/FloatColumn.java
@@ -165,4 +165,18 @@ public class FloatColumn implements Column {
   public int getInstanceSize() {
     return INSTANCE_SIZE;
   }
+
+  @Override
+  public String toString() {
+    return "FloatColumn{"
+        + "arrayOffset="
+        + arrayOffset
+        + ", positionCount="
+        + positionCount
+        + ", valueIsNull="
+        + Arrays.toString(valueIsNull)
+        + ", values="
+        + Arrays.toString(values)
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/IntColumn.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/IntColumn.java
index 867cb37ee84..1f24fd17c25 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/IntColumn.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/IntColumn.java
@@ -165,4 +165,18 @@ public class IntColumn implements Column {
   public int getInstanceSize() {
     return INSTANCE_SIZE;
   }
+
+  @Override
+  public String toString() {
+    return "IntColumn{"
+        + "arrayOffset="
+        + arrayOffset
+        + ", positionCount="
+        + positionCount
+        + ", valueIsNull="
+        + Arrays.toString(valueIsNull)
+        + ", values="
+        + Arrays.toString(values)
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/LongColumn.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/LongColumn.java
index 0cbacc7bd5a..2f2b270567d 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/LongColumn.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/LongColumn.java
@@ -165,4 +165,18 @@ public class LongColumn implements Column {
   public int getInstanceSize() {
     return INSTANCE_SIZE;
   }
+
+  @Override
+  public String toString() {
+    return "LongColumn{"
+        + "arrayOffset="
+        + arrayOffset
+        + ", positionCount="
+        + positionCount
+        + ", valueIsNull="
+        + Arrays.toString(valueIsNull)
+        + ", values="
+        + Arrays.toString(values)
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/NullColumn.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/NullColumn.java
index dff65bc65d6..5533577b84e 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/NullColumn.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/NullColumn.java
@@ -124,4 +124,9 @@ public class NullColumn implements Column {
   public int getInstanceSize() {
     return INSTANCE_SIZE;
   }
+
+  @Override
+  public String toString() {
+    return "NullColumn{" + "positionCount=" + positionCount + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/RunLengthEncodedColumn.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/RunLengthEncodedColumn.java
index 8db2209281d..633f7c8f1fd 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/RunLengthEncodedColumn.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/RunLengthEncodedColumn.java
@@ -213,4 +213,9 @@ public class RunLengthEncodedColumn implements Column {
   public int getInstanceSize() {
     return INSTANCE_SIZE;
   }
+
+  @Override
+  public String toString() {
+    return "RunLengthEncodedColumn{" + "value=" + value + ", positionCount=" + positionCount + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumn.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumn.java
index c5cc3f5c0f8..7303f09a4e3 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumn.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumn.java
@@ -22,6 +22,8 @@ package org.apache.iotdb.tsfile.read.common.block.column;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.utils.RamUsageEstimator;
 
+import java.util.Arrays;
+
 import static org.apache.iotdb.tsfile.read.common.block.column.ColumnUtil.checkValidRegion;
 import static org.apache.iotdb.tsfile.utils.RamUsageEstimator.sizeOfLongArray;
 
@@ -149,4 +151,16 @@ public class TimeColumn implements Column {
   public int getInstanceSize() {
     return INSTANCE_SIZE;
   }
+
+  @Override
+  public String toString() {
+    return "TimeColumn{"
+        + "arrayOffset="
+        + arrayOffset
+        + ", positionCount="
+        + positionCount
+        + ", values="
+        + Arrays.toString(values)
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
index 373187ed6a7..303b2115474 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
@@ -258,4 +258,18 @@ public class AlignedChunkReader extends AbstractChunkReader {
     }
     return false;
   }
+
+  @Override
+  public String toString() {
+    return "AlignedChunkReader{"
+        + "timeChunkHeader="
+        + timeChunkHeader
+        + ", valueChunkHeaderList="
+        + valueChunkHeaderList
+        + ", valueDeleteIntervalsList="
+        + valueDeleteIntervalsList
+        + ", queryFilter="
+        + queryFilter
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
index c24b76798e4..bdb5b8fb6c9 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
@@ -434,4 +434,24 @@ public class AlignedPageReader implements IPageReader {
       builder = new TsBlockBuilder((int) timePageReader.getStatistics().getCount(), dataTypes);
     }
   }
+
+  @Override
+  public String toString() {
+    return "AlignedPageReader{"
+        + "timePageReader="
+        + timePageReader
+        + ", valuePageReaderList="
+        + valuePageReaderList
+        + ", valueCount="
+        + valueCount
+        + ", globalTimeFilter="
+        + globalTimeFilter
+        + ", pushDownFilter="
+        + pushDownFilter
+        + ", paginationController="
+        + paginationController
+        + ", isModified="
+        + isModified
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/TimePageReader.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/TimePageReader.java
index daa7cfad4f9..246909e23a3 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/TimePageReader.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/TimePageReader.java
@@ -115,4 +115,16 @@ public class TimePageReader {
     }
     return false;
   }
+
+  @Override
+  public String toString() {
+    return "TimePageReader{"
+        + "pageHeader="
+        + pageHeader
+        + ", deleteIntervalList="
+        + deleteIntervalList
+        + ", deleteCursor="
+        + deleteCursor
+        + '}';
+  }
 }
diff --git a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/ValuePageReader.java b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/ValuePageReader.java
index d18818c5476..387d8890817 100644
--- a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/ValuePageReader.java
+++ b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/ValuePageReader.java
@@ -553,4 +553,22 @@ public class ValuePageReader {
   public byte[] getBitmap() {
     return Arrays.copyOf(bitmap, bitmap.length);
   }
+
+  @Override
+  public String toString() {
+    return "ValuePageReader{"
+        + "pageHeader="
+        + pageHeader
+        + ", dataType="
+        + dataType
+        + ", bitmap="
+        + Arrays.toString(bitmap)
+        + ", size="
+        + size
+        + ", deleteIntervalList="
+        + deleteIntervalList
+        + ", deleteCursor="
+        + deleteCursor
+        + '}';
+  }
 }