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

JackieTien97 pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/dev/1.3 by this push:
     new c1050081785 [To dev/1.3] Support debug for query (#18208)
c1050081785 is described below

commit c105008178570988f7298b9f88d7afec9c80152a
Author: Weihao Li <[email protected]>
AuthorDate: Wed Jul 15 19:10:10 2026 +0800

    [To dev/1.3] Support debug for query (#18208)
---
 .../it/env/cluster/node/AbstractNodeWrapper.java   |  19 ++++
 .../assembly/resources/conf/logback-datanode.xml   |   2 +-
 .../protocol/legacy/loader/DeletionLoader.java     |   3 +-
 .../protocol/legacy/loader/TsFileLoader.java       |   3 +-
 .../protocol/thrift/IoTDBDataNodeReceiver.java     |   3 +-
 .../protocol/thrift/impl/ClientRPCServiceImpl.java |  25 ++++--
 .../impl/DataNodeInternalRPCServiceImpl.java       |   1 +
 .../db/queryengine/common/MPPQueryContext.java     |  10 +++
 .../fragment/FakedFragmentInstanceContext.java     |   2 +-
 .../fragment/FragmentInstanceContext.java          |  47 +++++++---
 .../fragment/FragmentInstanceManager.java          |   8 +-
 .../execution/fragment/QueryContext.java           |  10 ++-
 .../iotdb/db/queryengine/plan/Coordinator.java     | 100 ++++++++++++++++-----
 .../analyze/schema/AutoCreateSchemaExecutor.java   |   1 +
 .../analyze/schema/ClusterSchemaFetchExecutor.java |   3 +-
 .../plan/execution/IQueryExecution.java            |   2 +
 .../queryengine/plan/execution/QueryExecution.java |   5 ++
 .../plan/execution/config/ConfigExecution.java     |   5 ++
 .../config/executor/ClusterConfigTaskExecutor.java |   1 +
 .../SimpleFragmentParallelPlanner.java             |   1 +
 .../distribution/WriteFragmentParallelPlanner.java |   3 +-
 .../plan/planner/plan/FragmentInstance.java        |  29 ++++--
 .../plan/scheduler/load/LoadTsFileScheduler.java   |   6 +-
 .../load/active/ActiveLoadTsFileLoader.java        |   3 +-
 .../converter/LoadTsFileDataTypeConverter.java     |   1 +
 .../rest/v1/handler/QueryDataSetHandlerTest.java   |   5 ++
 .../execution/operator/MergeSortOperatorTest.java  |   5 ++
 .../plan/planner/FragmentInstanceSerdeTest.java    |   6 +-
 .../load/LoadTsFileDispatcherImplTest.java         |   2 +-
 .../memtable/MemChunkDeserializeTest.java          |   4 +-
 .../dataregion/memtable/PrimitiveMemTableTest.java |  28 +++---
 .../reader/chunk/MemAlignedChunkLoaderTest.java    |   2 +-
 .../read/reader/chunk/MemChunkLoaderTest.java      |  12 +--
 .../wal/recover/file/TsFilePlanRedoerTest.java     |  21 +++--
 .../apache/iotdb/db/utils/EnvironmentUtils.java    |   4 +-
 35 files changed, 282 insertions(+), 100 deletions(-)

diff --git 
a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/node/AbstractNodeWrapper.java
 
b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/node/AbstractNodeWrapper.java
index 6c8f2717e71..afad120e94c 100644
--- 
a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/node/AbstractNodeWrapper.java
+++ 
b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/node/AbstractNodeWrapper.java
@@ -56,6 +56,7 @@ import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
+import java.nio.file.StandardOpenOption;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -764,4 +765,22 @@ public abstract class AbstractNodeWrapper implements 
BaseNodeWrapper {
   public Process getInstance() {
     return instance;
   }
+
+  public int[] getPortList() {
+    return portList;
+  }
+
+  public void clearLogContent() throws IOException {
+    Files.newOutputStream(Paths.get(getLogPath()), 
StandardOpenOption.TRUNCATE_EXISTING).close();
+  }
+
+  public boolean logContains(String content) throws IOException {
+    List<String> lines = Files.readAllLines(Paths.get(getLogPath()), 
StandardCharsets.UTF_8);
+    for (String line : lines) {
+      if (line.contains(content)) {
+        return true;
+      }
+    }
+    return false;
+  }
 }
diff --git 
a/iotdb-core/datanode/src/assembly/resources/conf/logback-datanode.xml 
b/iotdb-core/datanode/src/assembly/resources/conf/logback-datanode.xml
index e827a7cbef2..a3a59d494ef 100644
--- a/iotdb-core/datanode/src/assembly/resources/conf/logback-datanode.xml
+++ b/iotdb-core/datanode/src/assembly/resources/conf/logback-datanode.xml
@@ -155,7 +155,7 @@
         </rollingPolicy>
         <append>true</append>
         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
-            <pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
+            <pattern>%d [%t] %C{25}:%L - %m %n</pattern>
             <charset>utf-8</charset>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java
index 1c8771e218c..2d2fd3eec12 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java
@@ -75,7 +75,8 @@ public class DeletionLoader implements ILoader {
                   PARTITION_FETCHER,
                   SCHEMA_FETCHER,
                   
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
-                  false);
+                  false,
+                  statement.isDebug());
       if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
         LOGGER.error("Delete {} error, statement: {}.", deletion, statement);
         LOGGER.error("Delete result status : {}.", result.status);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java
index 34028029de3..80b5f834f88 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java
@@ -71,7 +71,8 @@ public class TsFileLoader implements ILoader {
                   PARTITION_FETCHER,
                   SCHEMA_FETCHER,
                   
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
-                  false);
+                  false,
+                  statement.isDebug());
       if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
         LOGGER.error("Load TsFile {} error, statement: {}.", tsFile.getPath(), 
statement);
         LOGGER.error("Load TsFile result status : {}.", result.status);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
index a1975f8bbe2..f2a05a72798 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
@@ -1000,7 +1000,8 @@ public class IoTDBDataNodeReceiver extends 
IoTDBFileReceiver {
             ClusterPartitionFetcher.getInstance(),
             ClusterSchemaFetcher.getInstance(),
             
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
-            false)
+            false,
+            statement.isDebug())
         .status;
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index 1b2f5f400b2..3fe0e5e5267 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -338,7 +338,8 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
                 partitionFetcher,
                 schemaFetcher,
                 req.getTimeout(),
-                true);
+                true,
+                s.isDebug());
       }
 
       if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()
@@ -434,7 +435,8 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
               partitionFetcher,
               schemaFetcher,
               req.getTimeout(),
-              true);
+              true,
+              s.isDebug());
 
       if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
         finished = true;
@@ -525,7 +527,8 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
               partitionFetcher,
               schemaFetcher,
               req.getTimeout(),
-              true);
+              true,
+              s.isDebug());
 
       if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
         finished = true;
@@ -615,7 +618,8 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
               partitionFetcher,
               schemaFetcher,
               req.getTimeout(),
-              true);
+              true,
+              s.isDebug());
 
       if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
         finished = true;
@@ -1063,7 +1067,8 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
               partitionFetcher,
               schemaFetcher,
               req.getTimeout(),
-              true);
+              true,
+              s.isDebug());
 
       if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
         finished = true;
@@ -1666,7 +1671,8 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
                     partitionFetcher,
                     schemaFetcher,
                     config.getQueryTimeoutThreshold(),
-                    false);
+                    false,
+                    s.isDebug());
           }
           results.add(result.status);
         } catch (Exception e) {
@@ -2522,7 +2528,8 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
               partitionFetcher,
               schemaFetcher,
               config.getQueryTimeoutThreshold(),
-              true);
+              true,
+              statement.isDebug());
 
       if (executionResult.status.code != 
TSStatusCode.SUCCESS_STATUS.getStatusCode()
           && executionResult.status.code != 
TSStatusCode.REDIRECTION_RECOMMEND.getStatusCode()) {
@@ -2989,6 +2996,7 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
     ExecutionResult result = null;
     final List<? extends Statement> subStatements = 
statement.getSubStatements();
     final int totalSubStatements = subStatements.size();
+    boolean debug = statement.isDebug();
 
     LOGGER.info(
         "Start batch executing {} sub-statement(s) in tree model, queryId: {}",
@@ -3013,7 +3021,8 @@ public class ClientRPCServiceImpl implements 
IClientRPCServiceWithHandler {
               partitionFetcher,
               schemaFetcher,
               timeoutMs,
-              userQuery);
+              userQuery,
+              debug);
 
       // Exit early if any sub-statement execution fails
       if (result != null
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
index d36e8527596..1d974146464 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
@@ -1492,6 +1492,7 @@ public class DataNodeInternalRPCServiceImpl implements 
IDataNodeRPCService.Iface
               partitionFetcher,
               schemaFetcher,
               req.getTimeout(),
+              false,
               false);
 
       if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
index 25cf17d1515..0705680a3dd 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
@@ -163,6 +163,8 @@ public class MPPQueryContext {
    */
   private boolean needSetHighestPriority = false;
 
+  private boolean debug = false;
+
   @TestOnly
   public MPPQueryContext(QueryId queryId) {
     this.queryId = queryId;
@@ -713,6 +715,14 @@ public class MPPQueryContext {
     this.userQuery = userQuery;
   }
 
+  public boolean isDebug() {
+    return debug;
+  }
+
+  public void setDebug(boolean debug) {
+    this.debug = debug;
+  }
+
   public boolean needSetHighestPriority() {
     return needSetHighestPriority;
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FakedFragmentInstanceContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FakedFragmentInstanceContext.java
index a76ca60fd5c..a2641b881b2 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FakedFragmentInstanceContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FakedFragmentInstanceContext.java
@@ -35,7 +35,7 @@ import java.util.List;
 public class FakedFragmentInstanceContext extends FragmentInstanceContext {
 
   public FakedFragmentInstanceContext(Filter timeFilter, DataRegion 
dataRegion) {
-    super(0, new FakedMemoryReservationManager(), timeFilter, dataRegion);
+    super(0, new FakedMemoryReservationManager(), timeFilter, dataRegion, 
false);
   }
 
   public QueryDataSource getSharedQueryDataSource(PartialPath sourcePath)
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
index d579b7e15c6..35bd6237db8 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
@@ -163,9 +163,12 @@ public class FragmentInstanceContext extends QueryContext {
   private boolean highestPriority = false;
 
   public static FragmentInstanceContext createFragmentInstanceContext(
-      FragmentInstanceId id, FragmentInstanceStateMachine stateMachine, 
SessionInfo sessionInfo) {
+      FragmentInstanceId id,
+      FragmentInstanceStateMachine stateMachine,
+      SessionInfo sessionInfo,
+      boolean debug) {
     FragmentInstanceContext instanceContext =
-        new FragmentInstanceContext(id, stateMachine, sessionInfo);
+        new FragmentInstanceContext(id, stateMachine, sessionInfo, debug);
     instanceContext.initialize();
     instanceContext.start();
     return instanceContext;
@@ -176,9 +179,10 @@ public class FragmentInstanceContext extends QueryContext {
       FragmentInstanceStateMachine stateMachine,
       SessionInfo sessionInfo,
       IDataRegionForQuery dataRegion,
-      Filter timeFilter) {
+      Filter timeFilter,
+      boolean debug) {
     FragmentInstanceContext instanceContext =
-        new FragmentInstanceContext(id, stateMachine, sessionInfo, dataRegion, 
timeFilter);
+        new FragmentInstanceContext(id, stateMachine, sessionInfo, dataRegion, 
timeFilter, debug);
     instanceContext.initialize();
     instanceContext.start();
     return instanceContext;
@@ -190,7 +194,8 @@ public class FragmentInstanceContext extends QueryContext {
       SessionInfo sessionInfo,
       IDataRegionForQuery dataRegion,
       TimePredicate globalTimePredicate,
-      Map<QueryId, DataNodeQueryContext> dataNodeQueryContextMap) {
+      Map<QueryId, DataNodeQueryContext> dataNodeQueryContextMap,
+      boolean debug) {
     FragmentInstanceContext instanceContext =
         new FragmentInstanceContext(
             id,
@@ -198,14 +203,15 @@ public class FragmentInstanceContext extends QueryContext 
{
             sessionInfo,
             dataRegion,
             globalTimePredicate,
-            dataNodeQueryContextMap);
+            dataNodeQueryContextMap,
+            debug);
     instanceContext.initialize();
     instanceContext.start();
     return instanceContext;
   }
 
   public static FragmentInstanceContext 
createFragmentInstanceContextForCompaction(long queryId) {
-    return new FragmentInstanceContext(queryId, null, null, null);
+    return new FragmentInstanceContext(queryId, null, null, null, false);
   }
 
   public void setQueryDataSourceType(QueryDataSourceType queryDataSourceType) {
@@ -217,7 +223,7 @@ public class FragmentInstanceContext extends QueryContext {
       FragmentInstanceId id, FragmentInstanceStateMachine stateMachine) {
     FragmentInstanceContext instanceContext =
         new FragmentInstanceContext(
-            id, stateMachine, new SessionInfo(1, "test", 
ZoneId.systemDefault(), ""));
+            id, stateMachine, new SessionInfo(1, "test", 
ZoneId.systemDefault(), ""), false);
     instanceContext.initialize();
     instanceContext.start();
     return instanceContext;
@@ -233,7 +239,8 @@ public class FragmentInstanceContext extends QueryContext {
             id,
             stateMachine,
             new SessionInfo(1, "test", ZoneId.systemDefault(), ""),
-            memoryReservationManager);
+            memoryReservationManager,
+            false);
     instanceContext.initialize();
     instanceContext.start();
     return instanceContext;
@@ -245,7 +252,9 @@ public class FragmentInstanceContext extends QueryContext {
       SessionInfo sessionInfo,
       IDataRegionForQuery dataRegion,
       TimePredicate globalTimePredicate,
-      Map<QueryId, DataNodeQueryContext> dataNodeQueryContextMap) {
+      Map<QueryId, DataNodeQueryContext> dataNodeQueryContextMap,
+      boolean debug) {
+    super(debug);
     this.id = id;
     this.stateMachine = stateMachine;
     this.executionEndTime.set(END_TIME_INITIAL_VALUE);
@@ -260,7 +269,11 @@ public class FragmentInstanceContext extends QueryContext {
   }
 
   private FragmentInstanceContext(
-      FragmentInstanceId id, FragmentInstanceStateMachine stateMachine, 
SessionInfo sessionInfo) {
+      FragmentInstanceId id,
+      FragmentInstanceStateMachine stateMachine,
+      SessionInfo sessionInfo,
+      boolean debug) {
+    super(debug);
     this.id = id;
     this.stateMachine = stateMachine;
     this.executionEndTime.set(END_TIME_INITIAL_VALUE);
@@ -275,7 +288,9 @@ public class FragmentInstanceContext extends QueryContext {
       FragmentInstanceId id,
       FragmentInstanceStateMachine stateMachine,
       SessionInfo sessionInfo,
-      MemoryReservationManager memoryReservationManager) {
+      MemoryReservationManager memoryReservationManager,
+      boolean debug) {
+    super(debug);
     this.id = id;
     this.stateMachine = stateMachine;
     this.executionEndTime.set(END_TIME_INITIAL_VALUE);
@@ -290,7 +305,9 @@ public class FragmentInstanceContext extends QueryContext {
       FragmentInstanceStateMachine stateMachine,
       SessionInfo sessionInfo,
       IDataRegionForQuery dataRegion,
-      Filter globalTimeFilter) {
+      Filter globalTimeFilter,
+      boolean debug) {
+    super(debug);
     this.id = id;
     this.stateMachine = stateMachine;
     this.executionEndTime.set(END_TIME_INITIAL_VALUE);
@@ -312,7 +329,9 @@ public class FragmentInstanceContext extends QueryContext {
       long queryId,
       MemoryReservationManager memoryReservationManager,
       Filter timeFilter,
-      DataRegion dataRegion) {
+      DataRegion dataRegion,
+      boolean debug) {
+    super(debug);
     this.queryId = queryId;
     this.id = null;
     this.stateMachine = null;
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 9dacdf44d88..93b562444bf 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
@@ -157,7 +157,8 @@ public class FragmentInstanceManager {
                                 instance.getSessionInfo(),
                                 dataRegion,
                                 instance.getGlobalTimePredicate(),
-                                dataNodeQueryContextMap));
+                                dataNodeQueryContextMap,
+                                instance.isDebug()));
                 context.setHighestPriority(instance.isHighestPriority());
 
                 try {
@@ -259,7 +260,10 @@ public class FragmentInstanceManager {
                       instanceId,
                       fragmentInstanceId ->
                           createFragmentInstanceContext(
-                              fragmentInstanceId, stateMachine, 
instance.getSessionInfo()));
+                              fragmentInstanceId,
+                              stateMachine,
+                              instance.getSessionInfo(),
+                              instance.isDebug()));
               context.setHighestPriority(instance.isHighestPriority());
 
               try {
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 d1b235ff7b1..b0022ddb26a 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
@@ -60,7 +60,7 @@ public class QueryContext {
 
   protected long queryId;
 
-  private boolean debug;
+  private final boolean debug;
 
   private long startTime;
   private long timeout;
@@ -72,10 +72,12 @@ public class QueryContext {
   // referenced TVLists for the query
   protected final Set<TVList> tvListSet = new HashSet<>();
 
-  public QueryContext() {}
+  public QueryContext(boolean debug) {
+    this.debug = debug;
+  }
 
-  public QueryContext(long queryId) {
-    this(queryId, false, System.currentTimeMillis(), 0);
+  public QueryContext(long queryId, boolean debug) {
+    this(queryId, debug, System.currentTimeMillis(), 0);
   }
 
   /** Every time we generate the queryContext, register it to 
queryTimeManager. */
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
index 2a548557d8c..22951f71258 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
@@ -61,6 +61,8 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.function.BiFunction;
+import java.util.function.LongSupplier;
+import java.util.function.Supplier;
 
 import static org.apache.iotdb.commons.utils.StatusUtils.needRetry;
 import static org.apache.iotdb.db.utils.CommonUtils.getContentOfRequest;
@@ -83,6 +85,8 @@ public class Coordinator {
   private static final Logger SAMPLED_QUERIES_LOGGER =
       LoggerFactory.getLogger(IoTDBConstant.SAMPLED_QUERIES_LOGGER_NAME);
 
+  private static final Logger DEBUG_LOGGER = 
LoggerFactory.getLogger("QUERY_DEBUG");
+
   private static final IClientManager<TEndPoint, 
SyncDataNodeInternalServiceClient>
       SYNC_INTERNAL_SERVICE_CLIENT_MANAGER =
           new IClientManager.Factory<TEndPoint, 
SyncDataNodeInternalServiceClient>()
@@ -125,6 +129,7 @@ public class Coordinator {
       SessionInfo session,
       String sql,
       boolean userQuery,
+      boolean debug,
       BiFunction<MPPQueryContext, Long, IQueryExecution> 
iQueryExecutionFactory) {
     long startTime = System.currentTimeMillis();
     QueryId globalQueryId = queryIdGenerator.createNextQueryId();
@@ -142,6 +147,7 @@ public class Coordinator {
               DataNodeEndPoints.LOCAL_HOST_DATA_BLOCK_ENDPOINT,
               DataNodeEndPoints.LOCAL_HOST_INTERNAL_ENDPOINT);
       queryContext.setUserQuery(userQuery);
+      queryContext.setDebug(debug);
       IQueryExecution execution = iQueryExecutionFactory.apply(queryContext, 
startTime);
       if (execution.isQuery()) {
         queryExecutionMap.put(queryId, execution);
@@ -173,7 +179,15 @@ public class Coordinator {
       IPartitionFetcher partitionFetcher,
       ISchemaFetcher schemaFetcher) {
     return executeForTreeModel(
-        statement, queryId, session, sql, partitionFetcher, schemaFetcher, 
Long.MAX_VALUE, false);
+        statement,
+        queryId,
+        session,
+        sql,
+        partitionFetcher,
+        schemaFetcher,
+        Long.MAX_VALUE,
+        false,
+        statement.isDebug());
   }
 
   public ExecutionResult executeForTreeModel(
@@ -184,12 +198,14 @@ public class Coordinator {
       IPartitionFetcher partitionFetcher,
       ISchemaFetcher schemaFetcher,
       long timeOut,
-      boolean userQuery) {
+      boolean userQuery,
+      boolean debug) {
     return execution(
         queryId,
         session,
         sql,
         userQuery,
+        debug,
         ((queryContext, startTime) ->
             createQueryExecutionForTreeModel(
                 statement,
@@ -234,6 +250,29 @@ public class Coordinator {
     return new QueryExecution(treeModelPlanner, queryContext, executor);
   }
 
+  /** For compatibility of MQTT and REST, this method should never be called. 
*/
+  @Deprecated
+  public ExecutionResult executeForTreeModel(
+      Statement statement,
+      long queryId,
+      SessionInfo sessionInfo,
+      String s,
+      IPartitionFetcher partitionFetcher,
+      ISchemaFetcher schemaFetcher,
+      long queryTimeoutThreshold,
+      boolean isUserQuery) {
+    return executeForTreeModel(
+        statement,
+        queryId,
+        sessionInfo,
+        s,
+        partitionFetcher,
+        schemaFetcher,
+        queryTimeoutThreshold,
+        isUserQuery,
+        false);
+  }
+
   public IQueryExecution getQueryExecution(Long queryId) {
     return queryExecutionMap.get(queryId);
   }
@@ -270,27 +309,11 @@ public class Coordinator {
         LOGGER.debug("[CleanUpQuery]]");
         queryExecution.stopAndCleanup(t);
         if (queryExecution.isQuery() && queryExecution.isUserQuery()) {
-          long costTime = queryExecution.getTotalExecutionTime();
-          // print slow query
-          if (costTime / 1_000_000 >= CONFIG.getSlowQueryThreshold()) {
-            SLOW_SQL_LOGGER.info(
-                "Cost: {} ms, {}",
-                costTime / 1_000_000,
-                getContentOfRequest(nativeApiRequest, queryExecution));
-          }
-
-          // only sample successful query
-          if (t == null && COMMON_CONFIG.isEnableQuerySampling()) { // 
sampling is enabled
-            String queryRequest = getContentOfRequest(nativeApiRequest, 
queryExecution);
-            if (COMMON_CONFIG.isQuerySamplingHasRateLimit()) {
-              if 
(COMMON_CONFIG.getQuerySamplingRateLimiter().tryAcquire(queryRequest.length())) 
{
-                SAMPLED_QUERIES_LOGGER.info(queryRequest);
-              }
-            } else {
-              // no limit, always sampled
-              SAMPLED_QUERIES_LOGGER.info(queryRequest);
-            }
-          }
+          recordQueries(
+              queryExecution::getTotalExecutionTime,
+              () -> getContentOfRequest(nativeApiRequest, queryExecution),
+              t,
+              queryExecution.isDebug());
         }
       }
     }
@@ -325,6 +348,37 @@ public class Coordinator {
         });
   }
 
+  public static void recordQueries(
+      LongSupplier executionTime,
+      Supplier<String> contentOfQuerySupplier,
+      Throwable t,
+      boolean debug) {
+
+    long costTime = executionTime.getAsLong();
+    // print slow query
+    if (costTime / 1_000_000 >= CONFIG.getSlowQueryThreshold()) {
+      SLOW_SQL_LOGGER.info("Cost: {} ms, {}", costTime / 1_000_000, 
contentOfQuerySupplier.get());
+    }
+
+    // always print the query when debug is true
+    if (debug) {
+      DEBUG_LOGGER.info(contentOfQuerySupplier.get());
+    }
+
+    // only sample successful query
+    if (t == null && COMMON_CONFIG.isEnableQuerySampling()) { // sampling is 
enabled
+      String queryRequest = contentOfQuerySupplier.get();
+      if (COMMON_CONFIG.isQuerySamplingHasRateLimit()) {
+        if 
(COMMON_CONFIG.getQuerySamplingRateLimiter().tryAcquire(queryRequest.length())) 
{
+          SAMPLED_QUERIES_LOGGER.info(queryRequest);
+        }
+      } else {
+        // no limit, always sampled
+        SAMPLED_QUERIES_LOGGER.info(queryRequest);
+      }
+    }
+  }
+
   public void cleanupQueryExecution(Long queryId) {
     cleanupQueryExecution(queryId, null, null);
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
index e7fa45be64a..583afac0e63 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
@@ -95,6 +95,7 @@ class AutoCreateSchemaExecutor {
         context == null || context.getQueryType().equals(QueryType.WRITE)
             ? config.getQueryTimeoutThreshold()
             : context.getTimeOut(),
+        false,
         false);
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
index 400edc058a7..88042fb3588 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
@@ -96,7 +96,8 @@ class ClusterSchemaFetchExecutor {
         ClusterPartitionFetcher.getInstance(),
         schemaFetcher,
         timeout,
-        false);
+        false,
+        statement.isDebug());
   }
 
   /**
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
index 09f25a781e1..d41db48afec 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
@@ -95,4 +95,6 @@ public interface IQueryExecution {
   Optional<String> getExecuteSQL();
 
   String getStatementType();
+
+  boolean isDebug();
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
index 75598e46791..7e8ac469868 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
@@ -746,6 +746,11 @@ public class QueryExecution implements IQueryExecution {
     return analysis.getStatementType();
   }
 
+  @Override
+  public boolean isDebug() {
+    return context.isDebug();
+  }
+
   public MPPQueryContext getContext() {
     return context;
   }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
index e3cf2408f06..86bb3b0ad2d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
@@ -285,4 +285,9 @@ public class ConfigExecution implements IQueryExecution {
   public String getStatementType() {
     return statementType.name();
   }
+
+  @Override
+  public boolean isDebug() {
+    return context.isDebug();
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index 99eee84964e..e2a85023186 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -2522,6 +2522,7 @@ public class ClusterConfigTaskExecutor implements 
IConfigTaskExecutor {
                 ClusterPartitionFetcher.getInstance(),
                 ClusterSchemaFetcher.getInstance(),
                 
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
+                false,
                 false);
     if (executionResult.status.getCode() != 
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
       future.setException(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
index e0a193b63f1..37795a11378 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
@@ -151,6 +151,7 @@ public class SimpleFragmentParallelPlanner implements 
IFragmentParallelPlaner {
             queryContext.getTimeOut(),
             queryContext.getSession(),
             queryContext.isExplainAnalyze(),
+            queryContext.isDebug(),
             fragment.isRoot());
 
     // Get the target region for origin PlanFragment, then its instance will 
be distributed one
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/WriteFragmentParallelPlanner.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/WriteFragmentParallelPlanner.java
index 9bc526ee4f5..3d707d552a3 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/WriteFragmentParallelPlanner.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/WriteFragmentParallelPlanner.java
@@ -63,7 +63,8 @@ public class WriteFragmentParallelPlanner implements 
IFragmentParallelPlaner {
               analysis.getCovertedTimePredicate(),
               queryContext.getQueryType(),
               queryContext.getTimeOut(),
-              queryContext.getSession());
+              queryContext.getSession(),
+              queryContext.isDebug());
       if (split.getRegionReplicaSet() != null) {
         instance.setExecutorAndHost(new 
StorageExecutor(split.getRegionReplicaSet()));
       }
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 b96485199ad..f8dc760f687 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
@@ -79,6 +79,8 @@ public class FragmentInstance implements IConsensusRequest {
   // We need to cache and calculate the statistics of this FragmentInstance if 
it is.
   private boolean isExplainAnalyze = false;
 
+  private final boolean debug;
+
   // We can add some more params for a specific FragmentInstance
   // So that we can make different FragmentInstance owns different data range.
 
@@ -88,7 +90,8 @@ public class FragmentInstance implements IConsensusRequest {
       TimePredicate globalTimePredicate,
       QueryType type,
       long timeOut,
-      SessionInfo sessionInfo) {
+      SessionInfo sessionInfo,
+      boolean debug) {
     this.fragment = fragment;
     this.globalTimePredicate = globalTimePredicate;
     this.id = id;
@@ -96,6 +99,7 @@ public class FragmentInstance implements IConsensusRequest {
     this.timeOut = timeOut > 0 ? timeOut : CONFIG.getQueryTimeoutThreshold();
     this.isRoot = false;
     this.sessionInfo = sessionInfo;
+    this.debug = debug;
   }
 
   public FragmentInstance(
@@ -106,8 +110,9 @@ public class FragmentInstance implements IConsensusRequest {
       long timeOut,
       SessionInfo sessionInfo,
       boolean isExplainAnalyze,
+      boolean debug,
       boolean isRoot) {
-    this(fragment, id, globalTimePredicate, type, timeOut, sessionInfo);
+    this(fragment, id, globalTimePredicate, type, timeOut, sessionInfo, debug);
     this.isRoot = isRoot;
     this.isExplainAnalyze = isExplainAnalyze;
   }
@@ -119,8 +124,9 @@ public class FragmentInstance implements IConsensusRequest {
       QueryType type,
       long timeOut,
       SessionInfo sessionInfo,
-      int dataNodeFINum) {
-    this(fragment, id, globalTimePredicate, type, timeOut, sessionInfo);
+      int dataNodeFINum,
+      boolean debug) {
+    this(fragment, id, globalTimePredicate, type, timeOut, sessionInfo, debug);
     this.dataNodeFINum = dataNodeFINum;
   }
 
@@ -187,6 +193,10 @@ public class FragmentInstance implements IConsensusRequest 
{
     this.dataNodeFINum = dataNodeFINum;
   }
 
+  public boolean isDebug() {
+    return debug;
+  }
+
   public String toString() {
     StringBuilder ret = new StringBuilder();
     ret.append(String.format("FragmentInstance-%s:", getId()));
@@ -216,9 +226,17 @@ public class FragmentInstance implements IConsensusRequest 
{
     TimePredicate globalTimePredicate = hasTimePredicate ? 
TimePredicate.deserialize(buffer) : null;
     QueryType queryType = QueryType.values()[ReadWriteIOUtils.readInt(buffer)];
     int dataNodeFINum = ReadWriteIOUtils.readInt(buffer);
+    boolean debug = ReadWriteIOUtils.readBool(buffer);
     FragmentInstance fragmentInstance =
         new FragmentInstance(
-            planFragment, id, globalTimePredicate, queryType, timeOut, 
sessionInfo, dataNodeFINum);
+            planFragment,
+            id,
+            globalTimePredicate,
+            queryType,
+            timeOut,
+            sessionInfo,
+            dataNodeFINum,
+            debug);
     boolean hasHostDataNode = ReadWriteIOUtils.readBool(buffer);
     fragmentInstance.hostDataNode =
         hasHostDataNode ? 
ThriftCommonsSerDeUtils.deserializeTDataNodeLocation(buffer) : null;
@@ -243,6 +261,7 @@ public class FragmentInstance implements IConsensusRequest {
       }
       ReadWriteIOUtils.write(type.ordinal(), outputStream);
       ReadWriteIOUtils.write(dataNodeFINum, outputStream);
+      ReadWriteIOUtils.write(debug, outputStream);
       ReadWriteIOUtils.write(hostDataNode != null, outputStream);
       if (hostDataNode != null) {
         ThriftCommonsSerDeUtils.serializeTDataNodeLocation(hostDataNode, 
outputStream);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
index 8381e44f753..f0ef7282cc9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
@@ -348,7 +348,8 @@ public class LoadTsFileScheduler implements IScheduler {
             null,
             queryContext.getQueryType(),
             queryContext.getTimeOut(),
-            queryContext.getSession());
+            queryContext.getSession(),
+            queryContext.isDebug());
     instance.setExecutorAndHost(new StorageExecutor(replicaSet));
     Future<FragInstanceDispatchResult> dispatchResultFuture =
         dispatcher.dispatch(null, Collections.singletonList(instance));
@@ -486,7 +487,8 @@ public class LoadTsFileScheduler implements IScheduler {
               null,
               queryContext.getQueryType(),
               queryContext.getTimeOut(),
-              queryContext.getSession());
+              queryContext.getSession(),
+              queryContext.isDebug());
       instance.setExecutorAndHost(new 
StorageExecutor(node.getLocalRegionReplicaSet()));
       dispatcher.dispatchLocally(instance);
     } catch (FragmentInstanceDispatchException e) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java
index a9133efe4f3..9dac9f11759 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java
@@ -271,7 +271,8 @@ public class ActiveLoadTsFileLoader {
               ClusterPartitionFetcher.getInstance(),
               ClusterSchemaFetcher.getInstance(),
               IOTDB_CONFIG.getQueryTimeoutThreshold(),
-              false)
+              false,
+              statement.isDebug())
           .status;
     } finally {
       SESSION_MANAGER.removeCurrSession();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
index be154ac8181..6fc1f1bf6d9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
@@ -204,6 +204,7 @@ public class LoadTsFileDataTypeConverter {
               ClusterPartitionFetcher.getInstance(),
               ClusterSchemaFetcher.getInstance(),
               
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
+              false,
               false)
           .status;
     } finally {
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandlerTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandlerTest.java
index 9f5d3a097ea..d0f6709bc60 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandlerTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandlerTest.java
@@ -151,6 +151,11 @@ public class QueryDataSetHandlerTest {
       return true;
     }
 
+    @Override
+    public boolean isDebug() {
+      return false;
+    }
+
     @Override
     public String getQueryId() {
       return null;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java
index 9afc9c7c540..e2bc5a388c4 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java
@@ -1883,5 +1883,10 @@ public class MergeSortOperatorTest {
     public boolean isUserQuery() {
       return false;
     }
+
+    @Override
+    public boolean isDebug() {
+      return false;
+    }
   }
 }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceSerdeTest.java
index e435468f533..3ee4cb56fe4 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceSerdeTest.java
@@ -77,7 +77,8 @@ public class FragmentInstanceSerdeTest {
             new TreeModelTimePredicate(ExpressionFactory.groupByTime(1, 2, 3, 
4)),
             QueryType.READ,
             config.getQueryTimeoutThreshold(),
-            sessionInfo);
+            sessionInfo,
+            false);
     // test FI with StorageExecutor
     TRegionReplicaSet regionReplicaSet =
         new TRegionReplicaSet(
@@ -119,7 +120,8 @@ public class FragmentInstanceSerdeTest {
             null,
             QueryType.READ,
             config.getQueryTimeoutThreshold(),
-            sessionInfo);
+            sessionInfo,
+            false);
     TRegionReplicaSet regionReplicaSet =
         new TRegionReplicaSet(
             new TConsensusGroupId(TConsensusGroupType.DataRegion, 1),
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileDispatcherImplTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileDispatcherImplTest.java
index 3d496470597..4fc0da17bb9 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileDispatcherImplTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileDispatcherImplTest.java
@@ -84,7 +84,7 @@ public class LoadTsFileDispatcherImplTest {
             null,
             0,
             null,
-            false,
+            0,
             false);
     final TConsensusGroupId consensusGroupId = new 
DataRegionId(1).convertToTConsensusGroupId();
     instance.setExecutorAndHost(
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemChunkDeserializeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemChunkDeserializeTest.java
index 04a81ee1866..4ac89010d31 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemChunkDeserializeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemChunkDeserializeTest.java
@@ -302,7 +302,7 @@ public class MemChunkDeserializeTest {
     memTableMap.put(deviceID, memChunkGroup);
     IMemTable memTable = new PrimitiveMemTable(storageGroup, dataRegionId, 
memTableMap);
 
-    QueryContext context = new QueryContext();
+    QueryContext context = new QueryContext(false);
     MeasurementPath nonAlignedFullPath =
         new MeasurementPath(
             deviceID,
@@ -327,7 +327,7 @@ public class MemChunkDeserializeTest {
     memTableMap.put(deviceID, memChunkGroup);
     IMemTable memTable = new PrimitiveMemTable(storageGroup, dataRegionId, 
memTableMap);
 
-    QueryContext context = new QueryContext();
+    QueryContext context = new QueryContext(false);
     AlignedPath alignedFullPath = new AlignedPath("d1", measurementList, 
schemaList);
     return memTable.query(context, alignedFullPath, Long.MIN_VALUE, null, 
null);
   }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java
index b9259db0a0f..3177e34ee2a 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java
@@ -117,7 +117,7 @@ public class PrimitiveMemTableTest {
     tvListQueryMap.put(series.getWorkingTVList(), 
series.getWorkingTVList().rowCount());
     ReadOnlyMemChunk readableChunk =
         new ReadOnlyMemChunk(
-            new QueryContext(), "s1", dataType, TSEncoding.PLAIN, 
tvListQueryMap, null, null);
+            new QueryContext(false), "s1", dataType, TSEncoding.PLAIN, 
tvListQueryMap, null, null);
     IPointReader it = readableChunk.getPointReader();
     int i = 0;
     while (it.hasNextTimeValuePair()) {
@@ -162,7 +162,7 @@ public class PrimitiveMemTableTest {
             new AlignedPath("root.test.d1", Arrays.asList("s1", "s2", "s3"), 
measurementSchemas));
     ReadOnlyMemChunk readOnlyMemChunk =
         resourcesByPathUtils.getReadOnlyMemChunkFromMemTable(
-            new QueryContext(1), memTable, null, Long.MAX_VALUE, null);
+            new QueryContext(1, false), memTable, null, Long.MAX_VALUE, null);
 
     for (int i = 1; i <= 50; i++) {
       memTable.writeAlignedRow(
@@ -206,7 +206,7 @@ public class PrimitiveMemTableTest {
             new AlignedPath("root.test.d1", Arrays.asList("s1", "s2", "s3"), 
measurementSchemas));
     ReadOnlyMemChunk readOnlyMemChunk =
         resourcesByPathUtils.getReadOnlyMemChunkFromMemTable(
-            new QueryContext(), memTable, null, Long.MAX_VALUE, null);
+            new QueryContext(false), memTable, null, Long.MAX_VALUE, null);
 
     for (int i = 1; i <= 50; i++) {
       memTable.writeAlignedRow(
@@ -243,7 +243,7 @@ public class PrimitiveMemTableTest {
     AlignedReadOnlyMemChunk firstQueryMemChunk =
         (AlignedReadOnlyMemChunk)
             resourcesByPathUtils.getReadOnlyMemChunkFromMemTable(
-                new QueryContext(1), memTable, null, Long.MAX_VALUE, null);
+                new QueryContext(1, false), memTable, null, Long.MAX_VALUE, 
null);
     TVList originalWorkingList = memTable.getWritableMemChunk(deviceID, 
"").getWorkingTVList();
     Assert.assertSame(
         originalWorkingList,
@@ -263,7 +263,7 @@ public class PrimitiveMemTableTest {
     AlignedReadOnlyMemChunk flushingQueryMemChunk =
         (AlignedReadOnlyMemChunk)
             resourcesByPathUtils.getReadOnlyMemChunkFromMemTable(
-                new QueryContext(2), memTable, new ArrayList<>(), 
Long.MAX_VALUE, null);
+                new QueryContext(2, false), memTable, new ArrayList<>(), 
Long.MAX_VALUE, null);
     TVList flushingQueryList =
         
flushingQueryMemChunk.getAligendTvListQueryMap().keySet().iterator().next();
     Assert.assertNotSame(originalWorkingList, flushingQueryList);
@@ -343,7 +343,7 @@ public class PrimitiveMemTableTest {
                 CompressionType.UNCOMPRESSED,
                 Collections.emptyMap()));
     ReadOnlyMemChunk memChunk =
-        memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, null, 
null);
+        memTable.query(new QueryContext(false), fullPath, Long.MIN_VALUE, 
null, null);
     IPointReader iterator = memChunk.getPointReader();
     for (int i = 0; i < dataSize; i++) {
       iterator.hasNextTimeValuePair();
@@ -445,7 +445,7 @@ public class PrimitiveMemTableTest {
         new Deletion(new PartialPath(deviceId, measurementId[0]), 
Long.MAX_VALUE, 10, dataSize);
     modsToMemtable.add(new Pair<>(deletion, memTable));
     ReadOnlyMemChunk memChunk =
-        memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, 
modsToMemtable, null);
+        memTable.query(new QueryContext(false), fullPath, Long.MIN_VALUE, 
modsToMemtable, null);
     IPointReader iterator = memChunk.getPointReader();
     int cnt = 0;
     while (iterator.hasNextTimeValuePair()) {
@@ -501,7 +501,7 @@ public class PrimitiveMemTableTest {
         new Deletion(new PartialPath(deviceId, measurementId[0]), 
Long.MAX_VALUE, 10, dataSize);
     modsToMemtable.add(new Pair<>(deletion, memTable));
     ReadOnlyMemChunk memChunk =
-        memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, 
modsToMemtable, null);
+        memTable.query(new QueryContext(false), fullPath, Long.MIN_VALUE, 
modsToMemtable, null);
     IPointReader iterator = memChunk.getPointReader();
     int cnt = 0;
     while (iterator.hasNextTimeValuePair()) {
@@ -541,7 +541,9 @@ public class PrimitiveMemTableTest {
                 CompressionType.UNCOMPRESSED,
                 Collections.emptyMap()));
     IPointReader tvPair =
-        memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, null, 
null).getPointReader();
+        memTable
+            .query(new QueryContext(false), fullPath, Long.MIN_VALUE, null, 
null)
+            .getPointReader();
     Arrays.sort(ret);
     TimeValuePair last = null;
     for (int i = 0; i < ret.length; i++) {
@@ -587,7 +589,9 @@ public class PrimitiveMemTableTest {
                     CompressionType.UNCOMPRESSED,
                     Collections.emptyMap())));
     IPointReader tvPair =
-        memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, null, 
null).getPointReader();
+        memTable
+            .query(new QueryContext(false), fullPath, Long.MIN_VALUE, null, 
null)
+            .getPointReader();
     for (int i = 0; i < 100; i++) {
       tvPair.hasNextTimeValuePair();
       TimeValuePair next = tvPair.nextTimeValuePair();
@@ -614,7 +618,9 @@ public class PrimitiveMemTableTest {
                     Collections.emptyMap())));
 
     tvPair =
-        memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, null, 
null).getPointReader();
+        memTable
+            .query(new QueryContext(false), fullPath, Long.MIN_VALUE, null, 
null)
+            .getPointReader();
     for (int i = 0; i < 100; i++) {
       tvPair.hasNextTimeValuePair();
       TimeValuePair next = tvPair.nextTimeValuePair();
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
index 87c6e28ea55..02a3fc90e38 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
@@ -63,7 +63,7 @@ public class MemAlignedChunkLoaderTest {
   public void testMemAlignedChunkLoader() throws IOException {
     AlignedReadOnlyMemChunk chunk = 
Mockito.mock(AlignedReadOnlyMemChunk.class);
     ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
-    QueryContext ctx = new QueryContext();
+    QueryContext ctx = new QueryContext(false);
     MemAlignedChunkLoader memAlignedChunkLoader = new 
MemAlignedChunkLoader(ctx, chunk);
 
     try {
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
index e852c656253..c8102c8eb59 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
@@ -75,7 +75,7 @@ public class MemChunkLoaderTest {
     
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
 
     ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
-    MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(), 
chunk);
+    MemChunkLoader memChunkLoader = new MemChunkLoader(new 
QueryContext(false), chunk);
     try {
       memChunkLoader.loadChunk(chunkMetadata);
       fail();
@@ -154,7 +154,7 @@ public class MemChunkLoaderTest {
     
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
 
     ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
-    MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(), 
chunk);
+    MemChunkLoader memChunkLoader = new MemChunkLoader(new 
QueryContext(false), chunk);
     try {
       memChunkLoader.loadChunk(chunkMetadata);
       fail();
@@ -234,7 +234,7 @@ public class MemChunkLoaderTest {
     
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
 
     ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
-    MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(), 
chunk);
+    MemChunkLoader memChunkLoader = new MemChunkLoader(new 
QueryContext(false), chunk);
     try {
       memChunkLoader.loadChunk(chunkMetadata);
       fail();
@@ -314,7 +314,7 @@ public class MemChunkLoaderTest {
     
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
 
     ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
-    MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(), 
chunk);
+    MemChunkLoader memChunkLoader = new MemChunkLoader(new 
QueryContext(false), chunk);
     try {
       memChunkLoader.loadChunk(chunkMetadata);
       fail();
@@ -394,7 +394,7 @@ public class MemChunkLoaderTest {
     
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
 
     ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
-    MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(), 
chunk);
+    MemChunkLoader memChunkLoader = new MemChunkLoader(new 
QueryContext(false), chunk);
     try {
       memChunkLoader.loadChunk(chunkMetadata);
       fail();
@@ -474,7 +474,7 @@ public class MemChunkLoaderTest {
     
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
 
     ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
-    MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(), 
chunk);
+    MemChunkLoader memChunkLoader = new MemChunkLoader(new 
QueryContext(false), chunk);
     try {
       memChunkLoader.loadChunk(chunkMetadata);
       fail();
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java
index fae5ee647a8..acbaaae6620 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java
@@ -156,7 +156,7 @@ public class TsFilePlanRedoerTest {
         new MeasurementPath(
             DEVICE2_NAME, "s1", new MeasurementSchema("s1", TSDataType.FLOAT, 
TSEncoding.RLE));
     ReadOnlyMemChunk memChunk =
-        recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, 
null, null);
+        recoveryMemTable.query(new QueryContext(false), fullPath, 
Long.MIN_VALUE, null, null);
     IPointReader iterator = memChunk.getPointReader();
     time = 5;
     while (iterator.hasNextTimeValuePair()) {
@@ -170,7 +170,8 @@ public class TsFilePlanRedoerTest {
     fullPath =
         new MeasurementPath(
             DEVICE2_NAME, "s2", new MeasurementSchema("s2", TSDataType.DOUBLE, 
TSEncoding.RLE));
-    memChunk = recoveryMemTable.query(new QueryContext(), fullPath, 
Long.MIN_VALUE, null, null);
+    memChunk =
+        recoveryMemTable.query(new QueryContext(false), fullPath, 
Long.MIN_VALUE, null, null);
     iterator = memChunk.getPointReader();
     time = 5;
     while (iterator.hasNextTimeValuePair()) {
@@ -256,7 +257,7 @@ public class TsFilePlanRedoerTest {
                 new MeasurementSchema("s4", TSDataType.FLOAT, TSEncoding.RLE),
                 new MeasurementSchema("s5", TSDataType.TEXT, 
TSEncoding.PLAIN)));
     ReadOnlyMemChunk memChunk =
-        recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, 
null, null);
+        recoveryMemTable.query(new QueryContext(false), fullPath, 
Long.MIN_VALUE, null, null);
     IPointReader iterator = memChunk.getPointReader();
     int time = 6;
     while (iterator.hasNextTimeValuePair()) {
@@ -336,7 +337,7 @@ public class TsFilePlanRedoerTest {
         new MeasurementPath(
             DEVICE1_NAME, "s1", new MeasurementSchema("s1", TSDataType.INT32, 
TSEncoding.RLE));
     ReadOnlyMemChunk memChunk =
-        recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, 
null, null);
+        recoveryMemTable.query(new QueryContext(false), fullPath, 
Long.MIN_VALUE, null, null);
     IPointReader iterator = memChunk.getPointReader();
     int time = 5;
     while (iterator.hasNextTimeValuePair()) {
@@ -350,7 +351,8 @@ public class TsFilePlanRedoerTest {
     fullPath =
         new MeasurementPath(
             DEVICE1_NAME, "s2", new MeasurementSchema("s2", TSDataType.INT64, 
TSEncoding.RLE));
-    memChunk = recoveryMemTable.query(new QueryContext(), fullPath, 
Long.MIN_VALUE, null, null);
+    memChunk =
+        recoveryMemTable.query(new QueryContext(false), fullPath, 
Long.MIN_VALUE, null, null);
     iterator = memChunk.getPointReader();
     time = 5;
     while (iterator.hasNextTimeValuePair()) {
@@ -449,7 +451,7 @@ public class TsFilePlanRedoerTest {
                 new MeasurementSchema("s4", TSDataType.FLOAT, TSEncoding.RLE),
                 new MeasurementSchema("s5", TSDataType.TEXT, 
TSEncoding.PLAIN)));
     ReadOnlyMemChunk memChunk =
-        recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, 
null, null);
+        recoveryMemTable.query(new QueryContext(false), fullPath, 
Long.MIN_VALUE, null, null);
     IPointReader iterator = memChunk.getPointReader();
     int time = 6;
     while (iterator.hasNextTimeValuePair()) {
@@ -571,13 +573,14 @@ public class TsFilePlanRedoerTest {
         new MeasurementPath(
             DEVICE1_NAME, "s1", new MeasurementSchema("s1", TSDataType.INT32, 
TSEncoding.RLE));
     ReadOnlyMemChunk memChunk =
-        recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, 
null, null);
+        recoveryMemTable.query(new QueryContext(false), fullPath, 
Long.MIN_VALUE, null, null);
     assertTrue(memChunk == null || memChunk.isEmpty());
     // check d1.s2
     fullPath =
         new MeasurementPath(
             DEVICE1_NAME, "s2", new MeasurementSchema("s2", TSDataType.INT64, 
TSEncoding.RLE));
-    memChunk = recoveryMemTable.query(new QueryContext(), fullPath, 
Long.MIN_VALUE, null, null);
+    memChunk =
+        recoveryMemTable.query(new QueryContext(false), fullPath, 
Long.MIN_VALUE, null, null);
     assertTrue(memChunk == null || memChunk.isEmpty());
   }
 
@@ -716,7 +719,7 @@ public class TsFilePlanRedoerTest {
                 new MeasurementSchema("s4", TSDataType.FLOAT, TSEncoding.RLE),
                 new MeasurementSchema("s5", TSDataType.TEXT, 
TSEncoding.PLAIN)));
     ReadOnlyMemChunk memChunk =
-        recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, 
null, null);
+        recoveryMemTable.query(new QueryContext(false), fullPath, 
Long.MIN_VALUE, null, null);
     IPointReader iterator = memChunk.getPointReader();
     time = 6;
     while (iterator.hasNextTimeValuePair()) {
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
index 1291540be05..66f33554c9f 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
@@ -82,7 +82,7 @@ public class EnvironmentUtils {
   private static final TierManager tierManager = TierManager.getInstance();
 
   public static long TEST_QUERY_JOB_ID = 1;
-  public static QueryContext TEST_QUERY_CONTEXT = new 
QueryContext(TEST_QUERY_JOB_ID);
+  public static QueryContext TEST_QUERY_CONTEXT = new 
QueryContext(TEST_QUERY_JOB_ID, false);
   public static FragmentInstanceContext TEST_QUERY_FI_CONTEXT =
       
FragmentInstanceContext.createFragmentInstanceContextForCompaction(TEST_QUERY_JOB_ID);
 
@@ -279,7 +279,7 @@ public class EnvironmentUtils {
     DeviceIDFactory.getInstance().reset();
 
     TEST_QUERY_JOB_ID = QueryResourceManager.getInstance().assignQueryId();
-    TEST_QUERY_CONTEXT = new QueryContext(TEST_QUERY_JOB_ID);
+    TEST_QUERY_CONTEXT = new QueryContext(TEST_QUERY_JOB_ID, false);
   }
 
   private static void createAllDir() {

Reply via email to