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

qiaojialin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iotdb-docs.git


The following commit(s) were added to refs/heads/main by this push:
     new 7aa9e54f Add system operation and maintenance documents (#560)
7aa9e54f is described below

commit 7aa9e54f993597110d042fe7170ff94a618f5885
Author: W1y1r <[email protected]>
AuthorDate: Tue Feb 18 10:34:07 2025 +0800

    Add system operation and maintenance documents (#560)
---
 src/.vuepress/sidebar/V2.0.x/zh-Table.ts           |   8 +
 src/.vuepress/sidebar_timecho/V2.0.x/zh-Table.ts   |   8 +
 .../Table/User-Manual/Maintenance-statement.md     | 631 +++++++++++++++++++++
 .../User-Manual/Query-Performance-Analysis.md      | 335 +++++++++++
 .../User-Manual/Maintenance-statement.md           | 631 +++++++++++++++++++++
 .../User-Manual/Query-Performance-Analysis.md      | 335 +++++++++++
 6 files changed, 1948 insertions(+)

diff --git a/src/.vuepress/sidebar/V2.0.x/zh-Table.ts 
b/src/.vuepress/sidebar/V2.0.x/zh-Table.ts
index e0b7acbc..e65e7462 100644
--- a/src/.vuepress/sidebar/V2.0.x/zh-Table.ts
+++ b/src/.vuepress/sidebar/V2.0.x/zh-Table.ts
@@ -90,6 +90,14 @@ export const zhSidebar = {
       // children: 'structure',
       children: [
         { text: '数据同步', link: 'Data-Sync_apache' },
+        {
+          text: '系统运维',
+          collapsible: true,
+          children: [
+            { text: '查询性能分析', link: 'Query-Performance-Analysis' },
+            { text: '运维语句', link: 'Maintenance-statement' },
+          ],
+        },
       ],
     },
     {
diff --git a/src/.vuepress/sidebar_timecho/V2.0.x/zh-Table.ts 
b/src/.vuepress/sidebar_timecho/V2.0.x/zh-Table.ts
index 9c634ae0..481b969c 100644
--- a/src/.vuepress/sidebar_timecho/V2.0.x/zh-Table.ts
+++ b/src/.vuepress/sidebar_timecho/V2.0.x/zh-Table.ts
@@ -93,6 +93,14 @@ export const zhSidebar = {
       children: [
         { text: '数据同步', link: 'Data-Sync_timecho' },
         { text: '多级存储', link: 'Tiered-Storage_timecho' },
+        {
+          text: '系统运维',
+          collapsible: true,
+          children: [
+            { text: '查询性能分析', link: 'Query-Performance-Analysis' },
+            { text: '运维语句', link: 'Maintenance-statement' },
+          ],
+        },
       ],
     },
     {
diff --git a/src/zh/UserGuide/Master/Table/User-Manual/Maintenance-statement.md 
b/src/zh/UserGuide/Master/Table/User-Manual/Maintenance-statement.md
new file mode 100644
index 00000000..5453f2f3
--- /dev/null
+++ b/src/zh/UserGuide/Master/Table/User-Manual/Maintenance-statement.md
@@ -0,0 +1,631 @@
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+    
+        http://www.apache.org/licenses/LICENSE-2.0
+    
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+# 运维语句
+
+## 1  状态查看
+
+### 1.1 查看连接的模型
+
+**含义**:返回当前连接的 sql_dialect 是树模型/表模型。
+
+#### 语法:
+
+```SQL
+showCurrentSqlDialectStatement
+    : SHOW CURRENT_SQL_DIALECT
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW CURRENT_SQL_DIALECT
+```
+
+执行结果如下:
+
+```SQL
++-----------------+
+|CurrentSqlDialect|
++-----------------+
+|            TABLE|
++-----------------+
+```
+### 1.2 查看登录的用户名
+
+**含义**:返回当前登录的用户名。
+
+#### 语法:
+
+```SQL
+showCurrentUserStatement
+    : SHOW CURRENT_USER
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW CURRENT_USER
+```
+
+执行结果如下:
+
+```SQL
++-----------+
+|CurrentUser|
++-----------+
+|       root|
++-----------+
+```
+
+### 1.3 查看连接的数据库名
+
+**含义**:返回当前连接的数据库名,若没有执行过 use 语句,则为 null。
+
+#### 语法:
+
+```SQL
+showCurrentDatabaseStatement
+    : SHOW CURRENT_DATABASE
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW CURRENT_DATABASE;
+
+IoTDB> USE test;
+
+IoTDB> SHOW CURRENT_DATABASE;
+```
+
+执行结果如下:
+
+```SQL
++---------------+
+|CurrentDatabase|
++---------------+
+|           null|
++---------------+
+
++---------------+
+|CurrentDatabase|
++---------------+
+|           test|
++---------------+
+```
+
+### 1.4 查看集群版本
+
+**含义**:返回当前集群的版本。
+
+#### 语法:
+
+```SQL
+showVersionStatement
+    : SHOW VERSION
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW VERSION
+```
+
+执行结果如下:
+
+```SQL
++-------+---------+
+|Version|BuildInfo|
++-------+---------+
+|2.0.1.2|  1ca4008|
++-------+---------+
+```
+
+### 1.5 查看集群关键参数
+
+**含义**:返回当前集群的关键参数。
+
+#### 语法:
+
+```SQL
+showVariablesStatement
+    : SHOW VARIABLES
+    ;
+```
+
+关键参数如下:
+
+1. **ClusterName**:当前集群的名称。
+2. **DataReplicationFactor**:数据副本的数量,表示每个数据分区(DataRegion)的副本数。
+3. **SchemaReplicationFactor**:元数据副本的数量,表示每个元数据分区(SchemaRegion)的副本数。
+4. **DataRegionConsensusProtocolClass**:数据分区(DataRegion)使用的共识协议类。
+5. **SchemaRegionConsensusProtocolClass**:元数据分区(SchemaRegion)使用的共识协议类。
+6. **ConfigNodeConsensusProtocolClass**:配置节点(ConfigNode)使用的共识协议类。
+7. **TimePartitionOrigin**:数据库时间分区的起始时间戳。
+8. **TimePartitionInterval**:数据库的时间分区间隔(单位:毫秒)。
+9. **ReadConsistencyLevel**:读取操作的一致性级别。
+10. **SchemaRegionPerDataNode**:数据节点(DataNode)上的元数据分区(SchemaRegion)数量。
+11. **DataRegionPerDataNode**:数据节点(DataNode)上的数据分区(DataRegion)数量。
+12. **SeriesSlotNum**:数据分区(DataRegion)的序列槽(SeriesSlot)数量。
+13. **SeriesSlotExecutorClass**:序列槽的实现类。
+14. **DiskSpaceWarningThreshold**:磁盘空间告警阈值(单位:百分比)。
+15. **TimestampPrecision**:时间戳精度。
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW VARIABLES
+```
+
+执行结果如下:
+
+```SQL
++----------------------------------+-----------------------------------------------------------------+
+|                          Variable|                                           
                 Value|
++----------------------------------+-----------------------------------------------------------------+
+|                       ClusterName|                                           
        defaultCluster|
+|             DataReplicationFactor|                                           
                     1|
+|           SchemaReplicationFactor|                                           
                     1|
+|  DataRegionConsensusProtocolClass|                      
org.apache.iotdb.consensus.iot.IoTConsensus|
+|SchemaRegionConsensusProtocolClass|                  
org.apache.iotdb.consensus.ratis.RatisConsensus|
+|  ConfigNodeConsensusProtocolClass|                  
org.apache.iotdb.consensus.ratis.RatisConsensus|
+|               TimePartitionOrigin|                                           
                     0|
+|             TimePartitionInterval|                                           
             604800000|
+|              ReadConsistencyLevel|                                           
                strong|
+|           SchemaRegionPerDataNode|                                           
                     1|
+|             DataRegionPerDataNode|                                           
                     0|
+|                     SeriesSlotNum|                                           
                  1000|
+|           
SeriesSlotExecutorClass|org.apache.iotdb.commons.partition.executor.hash.BKDRHashExecutor|
+|         DiskSpaceWarningThreshold|                                           
                  0.05|
+|                TimestampPrecision|                                           
                    ms|
++----------------------------------+-----------------------------------------------------------------+
+```
+
+### 1.6 查看集群ID
+
+**含义**:返回当前集群的ID。
+
+#### 语法:
+
+```SQL
+showClusterIdStatement
+    : SHOW (CLUSTERID | CLUSTER_ID)
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW CLUSTER_ID
+```
+
+执行结果如下:
+
+```SQL
++------------------------------------+
+|                           ClusterId|
++------------------------------------+
+|40163007-9ec1-4455-aa36-8055d740fcda|
+```
+
+### 1.7 查看客户端直连的 DataNode 进程所在服务器的时间
+
+#### 语法:
+
+**含义**:返回当前客户端直连的 DataNode 进程所在服务器的时间。
+
+```SQL
+showCurrentTimestampStatement
+    : SHOW CURRENT_TIMESTAMP
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW CURRENT_TIMESTAMP
+```
+
+执行结果如下:
+
+```SQL
++-----------------------------+
+|             CurrentTimestamp|
++-----------------------------+
+|2025-02-17T11:11:52.987+08:00|
++-----------------------------+
+```
+
+### 1.8 查看正在执行的查询信息
+
+**含义**:用于显示所有正在执行的查询信息。
+
+#### 语法:
+
+```SQL
+showQueriesStatement
+    : SHOW (QUERIES | QUERY PROCESSLIST)
+        (WHERE where=booleanExpression)?
+        (ORDER BY sortItem (',' sortItem)*)?
+        limitOffsetClause
+    ;
+```
+
+**参数解释**:
+
+1. **WHERE** 子句:需保证过滤的目标列是结果集中存在的列
+2. **ORDER BY** 子句:需保证`sortKey`是结果集中存在的列
+3. **limitOffsetClause**:
+   - **含义**:用于限制结果集的返回数量。
+   - **格式**:`LIMIT <offset>, <row_count>`, `<offset>` 是偏移量,`<row_count>` 
是返回的行数。
+4. **QUERIES** 表中的列:
+   - **query_id**:查询语句的 ID
+   - **start_time**:查询开始的时间戳,时间戳精度与系统精度一致
+   - **datanode_id**:发起查询语句的 DataNode 的ID
+   - **elapsed_time**:查询的执行耗时,单位是秒
+   - **statement**:查询的 SQL 语句
+   - **user**:发起查询的用户
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW QUERIES WHERE elapsed_time > 30 
+```
+
+执行结果如下:
+
+```SQL
++-----------------------+-----------------------------+-----------+------------+------------+----+
+|               query_id|                   
start_time|datanode_id|elapsed_time|   statement|user|
++-----------------------+-----------------------------+-----------+------------+------------+----+
+|20250108_101015_00000_1|2025-01-08T18:10:15.935+08:00|          1|      
32.283|show queries|root|
++-----------------------+-----------------------------+-----------+------------+------------+----+
+```
+
+## 2 状态设置
+
+### 2.1 设置连接的模型
+
+**含义**:将当前连接的 sql_dialect 置为树模型/表模型。
+
+#### 语法:
+
+```SQL
+SET SQL_DIALECT EQ (TABLE | TREE)
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SET SQL_DIALECT=TABLE
+IoTDB> SHOW CURRENT_SQL_DIALECT
+```
+
+执行结果如下:
+
+```SQL
++-----------------+
+|CurrentSqlDialect|
++-----------------+
+|            TABLE|
++-----------------+
+```
+
+### 2.2 更新配置项
+
+**含义**:用于更新配置项,执行完成后会进行配置项的热加载,对于支持热修改的配置项会立即生效。
+
+#### 语法:
+
+```SQL
+setConfigurationStatement
+    : SET CONFIGURATION propertyAssignments (ON INTEGER_VALUE)?
+    ;
+
+propertyAssignments
+    : property (',' property)*
+    ;
+    
+property
+    : identifier EQ propertyValue
+    ;
+
+propertyValue
+    : DEFAULT
+    | expression
+    ;
+```
+
+**参数解释**:
+
+1. **propertyAssignments**
+   - **含义**:更新的配置列表,由多个 `property` 组成。
+   - 可以更新多个配置列表,用逗号分隔。
+   - **取值**:
+      - `DEFAULT`:将配置项恢复为默认值。
+      - `expression`:具体的值,必须是一个字符串。
+2. **ON INTEGER_VALUE**
+   - **含义**:指定要更新配置的节点 ID。
+   - **可选性**:可选。如果不指定或指定的值低于 0,则更新所有 ConfigNode 和 DataNode 的配置。
+
+#### 示例:
+
+```SQL
+IoTDB> SET CONFIGURATION "a"='1',b='1' ON 1;
+```
+
+### 2.3 读取手动修改的配置文件
+
+**含义**:用于读取手动修改过的配置文件,并对配置项进行热加载,对于支持热修改的配置项会立即生效。
+
+#### 语法:
+
+```SQL
+loadConfigurationStatement
+    : LOAD CONFIGURATION localOrClusterMode?
+    ;
+    
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1. **localOrClusterMode**
+   - **含义**:指定配置热加载的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:只对客户端直连的 DataNode 进行配置热加载。
+      - `ON CLUSTER`:对集群中所有 DataNode 进行配置热加载。
+
+#### 示例:
+
+```SQL
+IoTDB> LOAD CONFIGURATION ON LOCAL;
+```
+
+### 2.4 设置系统的状态
+
+**含义**:用于设置系统的状态。
+
+#### 语法:
+
+```SQL
+setSystemStatusStatement
+    : SET SYSTEM TO (READONLY | RUNNING) localOrClusterMode?
+    ;    
+    
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1. **RUNNING | READONLY**
+   - **含义**:指定系统的新状态。
+   - **取值**:
+      - `RUNNING`:将系统设置为运行状态,允许读写操作。
+      - `READONLY`:将系统设置为只读状态,只允许读取操作,禁止写入操作。
+2. **localOrClusterMode**
+   - **含义**:指定状态变更的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:仅对客户端直连的 DataNode 生效。
+      - `ON CLUSTER`:对集群中所有 DataNode 生效。
+
+#### 示例:
+
+```SQL
+IoTDB> SET SYSTEM TO READONLY ON CLUSTER;
+```
+
+
+## 3 数据管理
+
+### 3.1 刷写内存表中的数据到磁盘
+
+**含义**:将内存表中的数据刷写到磁盘上。
+
+#### 语法:
+
+```SQL
+flushStatement
+    : FLUSH identifier? (',' identifier)* booleanValue? localOrClusterMode?
+    ;
+
+booleanValue
+    : TRUE | FALSE
+    ;
+
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1.  **identifier**
+    - **含义**:指定要刷写的数据库名称。
+    - **可选性**:可选。如果不指定,则默认刷写所有数据库。
+    - **多个数据库**:可以指定多个数据库名称,用逗号分隔。例如:`FLUSH test_db1, test_db2`。
+2. **booleanValue**
+   - **含义**:指定刷写的内容。
+   - **可选性**:可选。如果不指定,则默认刷写顺序和乱序空间的内存。
+   - **取值**:
+      - `TRUE`:只刷写顺序空间的内存表。
+      - `FALSE`:只刷写乱序空间的MemTable。
+3. **localOrClusterMode**
+   - **含义**:指定刷写的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:只刷写客户端直连的 DataNode 上的内存表。
+      - `ON CLUSTER`:刷写集群中所有 DataNode 上的内存表。
+
+#### 示例:
+
+```SQL
+IoTDB> FLUSH test_db TRUE ON LOCAL;
+```
+
+### 3.2 清除 DataNode 上的缓存
+
+**含义**:用于清除 DataNode 上的某种类型的缓存。
+
+#### 语法:
+
+```SQL
+clearCacheStatement
+    : CLEAR clearCacheOptions? CACHE localOrClusterMode?
+    ;
+
+clearCacheOptions
+    : ATTRIBUTE
+    | QUERY
+    | ALL
+    ;
+
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1. **clearCacheOptions**
+   - **含义**:指定要清除的缓存类型。
+   - **可选性**:可选。如果不指定,默认清除查询缓存(`QUERY`)。
+   - **取值**:
+      - `ATTRIBUTE`:清除设备属性缓存。
+      - `QUERY`:清除存储引擎中的查询缓存。
+      - `ALL`:清除所有缓存,包括设备属性缓存、查询缓存以及树模型中的模式缓存。
+2. **localOrClusterMode**
+   - **含义**:指定清除缓存的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:只清除客户端直连的 DataNode 上的缓存。
+      - `ON CLUSTER`:清除集群中所有 DataNode 上的缓存。
+
+#### 示例:
+
+```SQL
+IoTDB> CLEAR ALL CACHE ON LOCAL;
+```
+
+## 4 数据修复
+
+### 4.1 启动后台扫描并修复 tsfile 任务
+
+**含义**:启动一个后台任务,开始扫描并修复 tsfile,能够修复数据文件内的时间戳乱序类异常。
+
+#### 语法:
+
+```SQL
+startRepairDataStatement
+    : START REPAIR DATA localOrClusterMode?
+    ;
+    
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1. **localOrClusterMode**
+   - **含义**:指定数据修复的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:仅对客户端直连的 DataNode 执行。
+      - `ON CLUSTER`:对集群中所有 DataNode 执行。
+
+#### 示例:
+
+```SQL
+IoTDB> START REPAIR DATA ON CLUSTER;
+```
+
+### 4.2 暂停后台修复 tsfile 任务
+
+**含义**:暂停后台的修复任务,暂停中的任务可通过再次执行 start repair data 命令恢复。
+
+#### 语法:
+
+```SQL
+stopRepairDataStatement
+    : STOP REPAIR DATA localOrClusterMode?
+    ;
+    
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1. **localOrClusterMode**
+   - **含义**:指定数据修复的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:仅对客户端直连的 DataNode 执行。
+      - `ON CLUSTER`:对集群中所有 DataNode 执行。
+
+#### 示例:
+
+```SQL
+IoTDB> STOP REPAIR DATA ON CLUSTER;
+```
+
+## 5 终止查询
+
+### 5.1 主动终止查询
+
+**含义**:使用该命令主动地终止查询。
+
+#### 语法:
+
+```SQL
+killQueryStatement
+    : KILL (QUERY queryId=string | ALL QUERIES)
+    ;
+```
+
+**参数解释**:
+
+1. **QUERY queryId=string**
+   - **含义**:指定要终止的查询的 ID。 `<queryId>` 是正在执行的查询的唯一标识符。
+   - **获取查询 ID**:可以通过 `SHOW QUERIES` 命令获取所有正在执行的查询及其 ID。
+2. **ALL QUERIES**
+   - **含义**:终止所有正在执行的查询。
+
+#### 示例:
+
+通过指定 `queryId` 可以中止指定的查询,为了获取正在执行的查询 id,用户可以使用 show queries 
命令,该命令将显示所有正在执行的查询列表。
+
+```SQL
+IoTDB> KILL QUERY 20250108_101015_00000_1; -- 终止指定query
+IoTDB> KILL ALL QUERIES; -- 终止所有query
+```
\ No newline at end of file
diff --git 
a/src/zh/UserGuide/Master/Table/User-Manual/Query-Performance-Analysis.md 
b/src/zh/UserGuide/Master/Table/User-Manual/Query-Performance-Analysis.md
new file mode 100644
index 00000000..b577983a
--- /dev/null
+++ b/src/zh/UserGuide/Master/Table/User-Manual/Query-Performance-Analysis.md
@@ -0,0 +1,335 @@
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+    
+        http://www.apache.org/licenses/LICENSE-2.0
+    
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+# 系统运维
+
+## 查询性能分析
+
+查询分析的意义在于帮助用户理解查询的执行机制和性能瓶颈,从而实现查询优化和性能提升。这不仅关乎到查询的执行效率,也直接影响到应用的用户体验和资源的有效利用。为了进行有效的查询分析,IoTDB
 提供了查询分析语句:Explain 和 Explain Analyze。
+
+- Explain 语句:允许用户预览查询 SQL 的执行计划,包括 IoTDB 如何组织数据检索和处理。
+- Explain Analyze 语句:在 Explain 语句基础上增加了性能分析,完整执行 SQL 并展示查询执行过程中的时间和资源消耗。为 
IoTDB 用户深入理解查询详情以及进行查询优化提供了详细的相关信息。与其他常用的 IoTDB 排查手段相比,Explain Analyze 
没有部署负担,同时能够针对单条 sql 进行分析,能够更好定位问题。各类方法对比如下::
+
+| 方法                | 安装难度                                                     
| 业务影响                                             | 功能范围                       
                        |
+| ------------------- | 
------------------------------------------------------------ | 
---------------------------------------------------- | 
------------------------------------------------------ |
+| Explain Analyze语句 | 低。无需安装额外组件,为IoTDB内置SQL语句                     | 
低。只会影响当前分析的单条查询,对线上其他负载无影响 | 支持分布式,可支持对单条SQL进行追踪                    |
+| 监控面板            | 中。需要安装IoTDB监控面板工具(企业版工具),并开启IoTDB监控服务 | 
中。IoTDB监控服务记录指标会带来额外耗时              | 支持分布式,仅支持对数据库整体查询负载和耗时进行分析   |
+| Arthas抽样          | 中。需要安装Java Arthas工具(部分内网无法直接安装Arthas,且安装后,有时需要重启应用) | 
高。CPU 抽样可能会影响线上业务的响应速度             | 不支持分布式,仅支持对数据库整体查询负载和耗时进行分析 |
+
+### Explain 语句
+
+#### 语法
+
+Explain命令允许用户查看SQL查询的执行计划。执行计划以算子的形式展示,描述了IoTDB会如何执行查询。其语法如下,其中SELECT_STATEMENT是查询相关的SQL语句:
+
+```SQL
+EXPLAIN <SELECT_STATEMENT>
+```
+#### 含义
+
+```SQL
+-- 创建数据库
+create database test;
+
+-- 创建表
+use test;
+create table t1 (device_id STRING ID, type STRING ATTRIBUTE, speed float);
+
+-- 插入数据
+insert into t1(device_id, type, speed) values('car_1', 'Model Y', 120.0);
+insert into t1(device_id, type, speed) values('car_2', 'Model 3', 100.0);
+
+-- 执行 explain 语句
+explain select * from t1;
+```
+执行上方SQL,会得到如下结果。不难看出,IoTDB 分别通过两个 TableScan 节点去不同的数据分区中获取表中的数据,最后通过Collect 
算子汇总数据后返回。
+
+```SQL
++-----------------------------------------------------------------------------------------------+
+|                                                                              
distribution plan|
++-----------------------------------------------------------------------------------------------+
+|                        ┌─────────────────────────────────────────────┐       
                 |
+|                        │OutputNode-4                                 │       
                 |
+|                        │OutputColumns-[time, device_id, type, speed] │       
                 |
+|                        │OutputSymbols: [time, device_id, type, speed]│       
                 |
+|                        └─────────────────────────────────────────────┘       
                 |
+|                                               │                              
                 |
+|                                               │                              
                 |
+|                        ┌─────────────────────────────────────────────┐       
                 |
+|                        │Collect-21                                   │       
                 |
+|                        │OutputSymbols: [time, device_id, type, speed]│       
                 |
+|                        └─────────────────────────────────────────────┘       
                 |
+|                       ┌───────────────────────┴───────────────────────┐      
                 |
+|                       │                                               │      
                 |
+|┌─────────────────────────────────────────────┐                  
┌───────────┐                 |
+|│TableScan-19                                 │                  
│Exchange-28│                 |
+|│QualifiedTableName: test.t1                  │                  
└───────────┘                 |
+|│OutputSymbols: [time, device_id, type, speed]│                        │      
                 |
+|│DeviceNumber: 1                              │                        │      
                 |
+|│ScanOrder: ASC                               │ 
┌─────────────────────────────────────────────┐|
+|│PushDownOffset: 0                            │ │TableScan-20                 
                │|
+|│PushDownLimit: 0                             │ │QualifiedTableName: test.t1  
                │|
+|│PushDownLimitToEachDevice: false             │ │OutputSymbols: [time, 
device_id, type, speed]│|
+|│RegionId: 2                                  │ │DeviceNumber: 1              
                │|
+|└─────────────────────────────────────────────┘ │ScanOrder: ASC               
                │|
+|                                                │PushDownOffset: 0            
                │|
+|                                                │PushDownLimit: 0             
                │|
+|                                                │PushDownLimitToEachDevice: 
false             │|
+|                                                │RegionId: 1                  
                │|
+|                                                
└─────────────────────────────────────────────┘|
++-----------------------------------------------------------------------------------------------+
+```
+
+
+### Explain Analyze 语句
+
+#### 语法
+
+```SQL
+EXPLAIN ANALYZE [VERBOSE] <SELECT_STATEMENT>
+```
+
+其中 SELECT_STATEMENT 对应需要分析的查询语句;VERBOSE为打印详细分析结果,不填写VERBOSE时EXPLAIN 
ANALYZE将会省略部分信息。
+
+#### 含义
+
+Explain Analyze 是 IOTDB 查询引擎自带的性能分析 SQL,与 Explain 
不同,它会执行对应的查询计划并统计执行信息,可以用于追踪一条查询的具体性能分布,用于对资源进行观察,进行性能调优与异常分析。
+
+在 EXPLAIN ANALYZE 的结果集中,会包含如下信息:
+
+![explain-analyze-1.png](/img/explain-analyze-1.png)
+
+其中:
+
+- QueryStatistics 包含查询层面进的统计信息,主要包含各规划阶段耗时,查询分片数量等信息。
+  - Analyze Cost: SQL 分析阶段的耗时(包含 FetchPartitionCost 和 FetchSchemaCost)
+  - Fetch Partition Cost:拉取分区表的耗时
+  - Fetch Schema Cost:拉取元数据以及权限校验的耗时
+  - Logical Plan Cost:构建逻辑计划的耗时
+  - Logical Optimization Cost: 逻辑计划优化的耗时
+  - Distribution Plan Cost:构建分布式计划的耗时
+  - Fragment Instance Count:总的查询分片的数量,每个查询分片的信息会挨个输出
+- FragmentInstance 是 IoTDB 一个查询分片的封装,每一个查询分片都会在结果集中输出一份分片的执行信息,主要包含 
FragmentStatistics 和算子信息。FragmentStastistics 包含 Fragment 
的统计信息,包括总实际耗时(墙上时间),所涉及到的 TsFile,调度信息等情况。在一个 Fragment 
的信息输出同时会以节点树层级的方式展示该Fragment 
下计划节点的统计信息,主要包括:CPU运行时间、输出的数据行数、指定接口被调用的次数、所占用的内存、节点专属的定制信息。
+  - Total Wall Time: 该分片从开始执行到执行结束的物理时间
+  - Cost of initDataQuerySource:构建查询文件列表
+  - Seq File(unclosed): 未封口(memtable)的顺序文件数量,  Seq File(closed): 封口的顺序文件数量
+  - UnSeq File(unclosed): 未封口(memtable)的乱序文件数量, UnSeq File(closed): 未封口的乱序文件数量
+  - ready queued time: 查询分片的所有task在 ready queue 中的总时长(task 
未阻塞,但没有查询执行线程资源时,会被放入ready queue),blocked queued time: 查询分片的所有task在 bloced 
queue 中的总时长(task 因为某些资源,如内存,或者上游数据未发送过来,则会被放入blocked queue)
+  - BloomFilter 相关(用于判断某个序列在tsfile中是否存在,存储于tsfile尾部)
+    - loadBloomFilterFromCacheCount: 命中BloomFilterCache的次数
+    - loadBloomFilterFromDiskCount: 从磁盘中读取的次数
+    - loadBloomFilterActualIOSize: 从磁盘中读取BloomFilter时耗费的磁盘IO(单位为bytes)
+    - loadBloomFilterTime: 读取BloomFilter + 计算序列是否存在的总耗时(单位为ms)
+  - TimeSeriesMetadata 相关(序列在tsfile中的索引信息,一个序列在一个tsfile中只会存储一个)
+    - loadTimeSeriesMetadataDiskSeqCount: 从封口的顺序文件里加载出的TimeSeriesMetadata数量
+      - 大部分情况下等于Seq File(closed),但如果有limit等算子,可能实际加载的数量会小于Seq File(closed)
+    - loadTimeSeriesMetadataDiskUnSeqCount: 从封口的乱序文件里加载出的TimeSeriesMetadata数量
+      - 大部分情况下等于UnSeq File(closed),但如果有limit等算子,可能实际加载的数量会小于UnSeq File(closed)
+    - loadTimeSeriesMetadataDiskSeqTime: 从封口的顺序文件里加载TimeSeriesMetadata的耗时
+      - 并不是所有的 TimeSeriesMetadata 加载都涉及磁盘 
IO,有可能会命中TimeSeriesMetadataCache,直接从缓存中读取,但输出信息里并没有分开统计这两者的耗时
+    - loadTimeSeriesMetadataDiskUnSeqTime: 从未封口的顺序文件里加载TimeSeriesMetadata的耗时
+    - loadTimeSeriesMetadataFromCacheCount: 
命中TimeSeriesMetadataCache的次数,注意这里对于对齐设备来讲,每个分量(包括time列,都会去单独请求Cache,所以对于对齐设备来讲,(loadTimeSeriesMetadataFromCacheCount
 + loadTimeSeriesMetadataFromDiskCount)= tsfile number * subSensor 
number(包括time列)
+    - loadTimeSeriesMetadataFromDiskCount: 
从磁盘中读取TimeSeriesMetadata的次数,一次读取会把该设备下查询所有涉及到的分量都读出来缓存在TimeSeriesMetadataCache中
+    - loadTimeSeriesMetadataActualIOSize: 
从磁盘中读取TimeSeriesMetadata时耗费的磁盘IO(单位为bytes)
+  - Mods 文件相关
+    - TimeSeriesMetadataModificationTime: 读取mods文件花费的时间
+  - Chunk 相关
+    - constructAlignedChunkReadersDiskCount: 读取已封口 tsfile 中总的 Chunk 数量
+    - constructAlignedChunkReadersDiskTime: 读取已封口 tsfile 中 Chunk 
的总耗时(包含磁盘IO和解压缩)
+    - pageReadersDecodeAlignedDiskCount: 解编码已封口 tsfile 中总的 page 数量
+    - pageReadersDecodeAlignedDiskTime: 解编码已封口 tsfile 中 page 的总耗时
+    - loadChunkFromCacheCount: 
命中ChunkCache的次数,注意这里对于对齐设备来讲,每个分量(包括time列,都会去单独请求Cache,所以对于对齐设备来讲,(loadChunkFromCacheCount
 + loadChunkFromDiskCount)= tsfile number * subSensor number(包括time列)* avg 
chunk number in each tsfile
+    - loadChunkFromDiskCount: 从磁盘中读取Chunk的次数,一次只会读取一个分量,并缓存在ChunkCache中
+    - loadChunkActualIOSize: 从磁盘中读取Chunk时耗费的磁盘IO(单位为bytes)
+
+
+##### 特别说明
+
+查询超时场景使用 Explain Analyze 语句:
+
+Explain Analyze 本身是一种特殊的查询,所以当执行超时的时候,Explain Analyze 
语句也无法正常返回结果。为了在查询超时的情况下也可以通过分析结果排查超时原因,Explain Analyze 
提供了定时日志机制(无需用户配置),每经过一定的时间间隔会将 Explain Analyze 
的当前结果以文本的形式输出到专门的日志中。当查询超时时,用户可以前往logs/log_explain_analyze.log中查看对应的日志进行排查。
+日志的时间间隔基于查询的超时时间进行计算,可以保证在超时的情况下至少会有两次的结果记录。
+
+##### 示例
+
+下面是Explain Analyze的一个例子:
+
+```SQL
+-- 创建数据库
+create database test;
+
+-- 创建表
+use test;
+create table t1 (device_id STRING ID, type STRING ATTRIBUTE, speed float);
+
+-- 插入数据
+insert into t1(device_id, type, speed) values('car_1', 'Model Y', 120.0);
+insert into t1(device_id, type, speed) values('car_2', 'Model 3', 100.0);
+
+-- 执行 explain analyze 语句
+explain analyze verbose select * from t1;
+```
+
+得到输出如下:
+
+```SQL
++-----------------------------------------------------------------------------------------------+
+|                                                                              
  Explain Analyze|
++-----------------------------------------------------------------------------------------------+
+|Analyze Cost: 38.860 ms                                                       
                 |
+|Fetch Partition Cost: 9.888 ms                                                
                 |
+|Fetch Schema Cost: 54.046 ms                                                  
                 |
+|Logical Plan Cost: 10.102 ms                                                  
                 |
+|Logical Optimization Cost: 17.396 ms                                          
                 |
+|Distribution Plan Cost: 2.508 ms                                              
                 |
+|Dispatch Cost: 22.126 ms                                                      
                 |
+|Fragment Instances Count: 2                                                   
                 |
+|                                                                              
                 |
+|FRAGMENT-INSTANCE[Id: 20241127_090849_00009_1.2.0][IP: 0.0.0.0][DataRegion: 
2][State: FINISHED]|
+|  Total Wall Time: 18 ms                                                      
                 |
+|  Cost of initDataQuerySource: 6.153 ms                                       
                 |
+|  Seq File(unclosed): 1, Seq File(closed): 0                                  
                 |
+|  UnSeq File(unclosed): 0, UnSeq File(closed): 0                              
                 |
+|  ready queued time: 0.164 ms, blocked queued time: 0.342 ms                  
                 |
+|  Query Statistics:                                                           
                 |
+|    loadBloomFilterFromCacheCount: 0                                          
                 |
+|    loadBloomFilterFromDiskCount: 0                                           
                 |
+|    loadBloomFilterActualIOSize: 0                                            
                 |
+|    loadBloomFilterTime: 0.000                                                
                 |
+|    loadTimeSeriesMetadataAlignedMemSeqCount: 1                               
                 |
+|    loadTimeSeriesMetadataAlignedMemSeqTime: 0.246                            
                 |
+|    loadTimeSeriesMetadataFromCacheCount: 0                                   
                 |
+|    loadTimeSeriesMetadataFromDiskCount: 0                                    
                 |
+|    loadTimeSeriesMetadataActualIOSize: 0                                     
                 |
+|    constructAlignedChunkReadersMemCount: 1                                   
                 |
+|    constructAlignedChunkReadersMemTime: 0.294                                
                 |
+|    loadChunkFromCacheCount: 0                                                
                 |
+|    loadChunkFromDiskCount: 0                                                 
                 |
+|    loadChunkActualIOSize: 0                                                  
                 |
+|    pageReadersDecodeAlignedMemCount: 1                                       
                 |
+|    pageReadersDecodeAlignedMemTime: 0.047                                    
                 |
+|    [PlanNodeId 43]: IdentitySinkNode(IdentitySinkOperator)                   
                 |
+|        CPU Time: 5.523 ms                                                    
                 |
+|        output: 2 rows                                                        
                 |
+|        HasNext() Called Count: 6                                             
                 |
+|        Next() Called Count: 5                                                
                 |
+|        Estimated Memory Size: : 327680                                       
                 |
+|      [PlanNodeId 31]: CollectNode(CollectOperator)                           
                 |
+|          CPU Time: 5.512 ms                                                  
                 |
+|          output: 2 rows                                                      
                 |
+|          HasNext() Called Count: 6                                           
                 |
+|          Next() Called Count: 5                                              
                 |
+|          Estimated Memory Size: : 327680                                     
                 |
+|        [PlanNodeId 29]: TableScanNode(TableScanOperator)                     
                 |
+|            CPU Time: 5.439 ms                                                
                 |
+|            output: 1 rows                                                    
                 |
+|            HasNext() Called Count: 3
+|            Next() Called Count: 2                                            
                 |
+|            Estimated Memory Size: : 327680                                   
                 |
+|            DeviceNumber: 1                                                   
                 |
+|            CurrentDeviceIndex: 0                                             
                 |
+|        [PlanNodeId 40]: ExchangeNode(ExchangeOperator)                       
                 |
+|            CPU Time: 0.053 ms                                                
                 |
+|            output: 1 rows                                                    
                 |
+|            HasNext() Called Count: 2                                         
                 |
+|            Next() Called Count: 1                                            
                 |
+|            Estimated Memory Size: : 131072                                   
                 |
+|                                                                              
                 |
+|FRAGMENT-INSTANCE[Id: 20241127_090849_00009_1.3.0][IP: 0.0.0.0][DataRegion: 
1][State: FINISHED]|
+|  Total Wall Time: 13 ms                                                      
                 |
+|  Cost of initDataQuerySource: 5.725 ms                                       
                 |
+|  Seq File(unclosed): 1, Seq File(closed): 0                                  
                 |
+|  UnSeq File(unclosed): 0, UnSeq File(closed): 0                              
                 |
+|  ready queued time: 0.118 ms, blocked queued time: 5.844 ms                  
                 |
+|  Query Statistics:                                                           
                 |
+|    loadBloomFilterFromCacheCount: 0                                          
                 |
+|    loadBloomFilterFromDiskCount: 0                                           
                 |
+|    loadBloomFilterActualIOSize: 0                                            
                 |
+|    loadBloomFilterTime: 0.000                                                
                 |
+|    loadTimeSeriesMetadataAlignedMemSeqCount: 1                               
                 |
+|    loadTimeSeriesMetadataAlignedMemSeqTime: 0.004                            
                 |
+|    loadTimeSeriesMetadataFromCacheCount: 0                                   
                 |
+|    loadTimeSeriesMetadataFromDiskCount: 0                                    
                 |
+|    loadTimeSeriesMetadataActualIOSize: 0                                     
                 |
+|    constructAlignedChunkReadersMemCount: 1                                   
                 |
+|    constructAlignedChunkReadersMemTime: 0.001                                
                 |
+|    loadChunkFromCacheCount: 0                                                
                 |
+|    loadChunkFromDiskCount: 0                                                 
                 |
+|    loadChunkActualIOSize: 0                                                  
                 |
+|    pageReadersDecodeAlignedMemCount: 1                                       
                 |
+|    pageReadersDecodeAlignedMemTime: 0.007                                    
                 |
+|    [PlanNodeId 42]: IdentitySinkNode(IdentitySinkOperator)                   
                 |
+|        CPU Time: 0.270 ms                                                    
                 |
+|        output: 1 rows                                                        
                 |
+|        HasNext() Called Count: 3                                             
                 |
+|        Next() Called Count: 2                                                
                 |
+|        Estimated Memory Size: : 327680                                       
                 |
+|      [PlanNodeId 30]: TableScanNode(TableScanOperator)                       
                 |
+|          CPU Time: 0.250 ms                                                  
                 |
+|          output: 1 rows                                                      
                 |
+|          HasNext() Called Count: 3                                           
                 |
+|          Next() Called Count: 2                                              
                 |
+|          Estimated Memory Size: : 327680                                     
                 |
+|          DeviceNumber: 1                                                     
                 |
+|          CurrentDeviceIndex: 0                                               
                 |
++-----------------------------------------------------------------------------------------------+
+```
+
+### 常见问题
+
+#### 1. WALL TIME(墙上时间)和 CPU TIME(CPU时间)的区别?
+
+CPU 时间也称为处理器时间或处理器使用时间,指的是程序在执行过程中实际占用 CPU 进行计算的时间,显示的是程序实际消耗的处理器资源。
+
+墙上时间也称为实际时间或物理时间,指的是从程序开始执行到程序结束的总时间,包括了所有等待时间。。
+
+1. WALL TIME < CPU TIME 的场景:比如一个查询分片最后被调度器使用两个线程并行执行,真实物理世界上是 10s 
过去了,但两个线程,可能一直占了两个 cpu 核跑了 10s,那 cpu time 就是 20s,wall time就是 10s
+2. WALL TIME > CPU TIME 的场景:因为系统内可能会存在多个查询并行执行,但查询的执行线程数和内存是固定的,
+   1. 所以当查询分片被某些资源阻塞住时(比如没有足够的内存进行数据传输、或等待上游数据)就会放入Blocked Queue,此时查询分片并不会占用 
CPU TIME,但WALL TIME(真实物理时间的时间)是在向前流逝的
+   2. 
或者当查询线程资源不足时,比如当前共有16个查询线程,但系统内并发有20个查询分片,即使所有查询都没有被阻塞,也只会同时并行运行16个查询分片,另外四个会被放入
 READY QUEUE,等待被调度执行,此时查询分片并不会占用 CPU TIME,但WALL TIME(真实物理时间的时间)是在向前流逝的
+
+
+#### 2. Explain Analyze 是否有额外开销,测出的耗时是否与查询真实执行时有差别?
+
+几乎没有,因为 explain analyze operator 是单独的线程执行,收集原查询的统计信息,且这些统计信息,即使不explain 
analyze,原来的查询也会生成,只是没有人去取。并且 explain analyze 是纯 next 
遍历结果集,不会打印,所以与原来查询真实执行时的耗时不会有显著差别。
+
+#### 3. IO 耗时主要关注几个指标?
+
+涉及 IO 耗时的指标主要有:loadBloomFilterActualIOSize, loadBloomFilterTime, 
loadTimeSeriesMetadataAlignedDisk[Seq/Unseq]Time, 
loadTimeSeriesMetadataActualIOSize, alignedTimeSeriesMetadataModificationTime, 
constructAlignedChunkReadersDiskTime, loadChunkActualIOSize,各指标的具体含义见上文。
+TimeSeriesMetadata 的加载分别统计了顺序和乱序文件,但 Chunk 
的读取暂时未分开统计,但顺乱序比例可以通过TimeseriesMetadata 顺乱序的比例计算出来。
+
+
+#### 4. 乱序数据对查询性能的影响能否有一些指标展示出来?
+
+乱序数据产生的影响主要有两个:
+
+1. 需要在内存中多做一个归并排序(一般认为这个耗时是比较短的,毕竟是纯内存的 cpu 操作)
+2. 乱序数据会产生数据块间的时间范围重叠,导致统计信息无法使用
+   1. 无法利用统计信息直接 skip 掉整个不满足值过滤要求的 chunk
+      1. 一般用户的查询都是只包含时间过滤条件,则不会有影响
+   2. 无法利用统计信息直接计算出聚合值,无需读取数据
+
+单独对于乱序数据的性能影响,目前并没有有效的观测手段,除非就是在有乱序数据的时候,执行一遍查询耗时,然后等乱序合完了,再执行一遍,才能对比出来。
+
+因为即使乱序这部分数据进了顺序,也是需要 IO、加压缩、decode,这个耗时少不了,不会因为乱序数据被合并进乱序了,就减少了。
+
+#### 5. 执行 explain analyze 时,查询超时后,为什么结果没有输出在 log_explain_analyze.log 中?
+
+升级时,只替换了 lib 包,没有替换 conf/logback-datanode.xml,需要替换一下 
conf/logback-datanode.xml,然后不需要重启(该文件内容可以被热加载),大约等待 1 分钟后,重新执行 explain analyze 
verbose。
diff --git a/src/zh/UserGuide/latest-Table/User-Manual/Maintenance-statement.md 
b/src/zh/UserGuide/latest-Table/User-Manual/Maintenance-statement.md
new file mode 100644
index 00000000..5453f2f3
--- /dev/null
+++ b/src/zh/UserGuide/latest-Table/User-Manual/Maintenance-statement.md
@@ -0,0 +1,631 @@
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+    
+        http://www.apache.org/licenses/LICENSE-2.0
+    
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+# 运维语句
+
+## 1  状态查看
+
+### 1.1 查看连接的模型
+
+**含义**:返回当前连接的 sql_dialect 是树模型/表模型。
+
+#### 语法:
+
+```SQL
+showCurrentSqlDialectStatement
+    : SHOW CURRENT_SQL_DIALECT
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW CURRENT_SQL_DIALECT
+```
+
+执行结果如下:
+
+```SQL
++-----------------+
+|CurrentSqlDialect|
++-----------------+
+|            TABLE|
++-----------------+
+```
+### 1.2 查看登录的用户名
+
+**含义**:返回当前登录的用户名。
+
+#### 语法:
+
+```SQL
+showCurrentUserStatement
+    : SHOW CURRENT_USER
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW CURRENT_USER
+```
+
+执行结果如下:
+
+```SQL
++-----------+
+|CurrentUser|
++-----------+
+|       root|
++-----------+
+```
+
+### 1.3 查看连接的数据库名
+
+**含义**:返回当前连接的数据库名,若没有执行过 use 语句,则为 null。
+
+#### 语法:
+
+```SQL
+showCurrentDatabaseStatement
+    : SHOW CURRENT_DATABASE
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW CURRENT_DATABASE;
+
+IoTDB> USE test;
+
+IoTDB> SHOW CURRENT_DATABASE;
+```
+
+执行结果如下:
+
+```SQL
++---------------+
+|CurrentDatabase|
++---------------+
+|           null|
++---------------+
+
++---------------+
+|CurrentDatabase|
++---------------+
+|           test|
++---------------+
+```
+
+### 1.4 查看集群版本
+
+**含义**:返回当前集群的版本。
+
+#### 语法:
+
+```SQL
+showVersionStatement
+    : SHOW VERSION
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW VERSION
+```
+
+执行结果如下:
+
+```SQL
++-------+---------+
+|Version|BuildInfo|
++-------+---------+
+|2.0.1.2|  1ca4008|
++-------+---------+
+```
+
+### 1.5 查看集群关键参数
+
+**含义**:返回当前集群的关键参数。
+
+#### 语法:
+
+```SQL
+showVariablesStatement
+    : SHOW VARIABLES
+    ;
+```
+
+关键参数如下:
+
+1. **ClusterName**:当前集群的名称。
+2. **DataReplicationFactor**:数据副本的数量,表示每个数据分区(DataRegion)的副本数。
+3. **SchemaReplicationFactor**:元数据副本的数量,表示每个元数据分区(SchemaRegion)的副本数。
+4. **DataRegionConsensusProtocolClass**:数据分区(DataRegion)使用的共识协议类。
+5. **SchemaRegionConsensusProtocolClass**:元数据分区(SchemaRegion)使用的共识协议类。
+6. **ConfigNodeConsensusProtocolClass**:配置节点(ConfigNode)使用的共识协议类。
+7. **TimePartitionOrigin**:数据库时间分区的起始时间戳。
+8. **TimePartitionInterval**:数据库的时间分区间隔(单位:毫秒)。
+9. **ReadConsistencyLevel**:读取操作的一致性级别。
+10. **SchemaRegionPerDataNode**:数据节点(DataNode)上的元数据分区(SchemaRegion)数量。
+11. **DataRegionPerDataNode**:数据节点(DataNode)上的数据分区(DataRegion)数量。
+12. **SeriesSlotNum**:数据分区(DataRegion)的序列槽(SeriesSlot)数量。
+13. **SeriesSlotExecutorClass**:序列槽的实现类。
+14. **DiskSpaceWarningThreshold**:磁盘空间告警阈值(单位:百分比)。
+15. **TimestampPrecision**:时间戳精度。
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW VARIABLES
+```
+
+执行结果如下:
+
+```SQL
++----------------------------------+-----------------------------------------------------------------+
+|                          Variable|                                           
                 Value|
++----------------------------------+-----------------------------------------------------------------+
+|                       ClusterName|                                           
        defaultCluster|
+|             DataReplicationFactor|                                           
                     1|
+|           SchemaReplicationFactor|                                           
                     1|
+|  DataRegionConsensusProtocolClass|                      
org.apache.iotdb.consensus.iot.IoTConsensus|
+|SchemaRegionConsensusProtocolClass|                  
org.apache.iotdb.consensus.ratis.RatisConsensus|
+|  ConfigNodeConsensusProtocolClass|                  
org.apache.iotdb.consensus.ratis.RatisConsensus|
+|               TimePartitionOrigin|                                           
                     0|
+|             TimePartitionInterval|                                           
             604800000|
+|              ReadConsistencyLevel|                                           
                strong|
+|           SchemaRegionPerDataNode|                                           
                     1|
+|             DataRegionPerDataNode|                                           
                     0|
+|                     SeriesSlotNum|                                           
                  1000|
+|           
SeriesSlotExecutorClass|org.apache.iotdb.commons.partition.executor.hash.BKDRHashExecutor|
+|         DiskSpaceWarningThreshold|                                           
                  0.05|
+|                TimestampPrecision|                                           
                    ms|
++----------------------------------+-----------------------------------------------------------------+
+```
+
+### 1.6 查看集群ID
+
+**含义**:返回当前集群的ID。
+
+#### 语法:
+
+```SQL
+showClusterIdStatement
+    : SHOW (CLUSTERID | CLUSTER_ID)
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW CLUSTER_ID
+```
+
+执行结果如下:
+
+```SQL
++------------------------------------+
+|                           ClusterId|
++------------------------------------+
+|40163007-9ec1-4455-aa36-8055d740fcda|
+```
+
+### 1.7 查看客户端直连的 DataNode 进程所在服务器的时间
+
+#### 语法:
+
+**含义**:返回当前客户端直连的 DataNode 进程所在服务器的时间。
+
+```SQL
+showCurrentTimestampStatement
+    : SHOW CURRENT_TIMESTAMP
+    ;
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW CURRENT_TIMESTAMP
+```
+
+执行结果如下:
+
+```SQL
++-----------------------------+
+|             CurrentTimestamp|
++-----------------------------+
+|2025-02-17T11:11:52.987+08:00|
++-----------------------------+
+```
+
+### 1.8 查看正在执行的查询信息
+
+**含义**:用于显示所有正在执行的查询信息。
+
+#### 语法:
+
+```SQL
+showQueriesStatement
+    : SHOW (QUERIES | QUERY PROCESSLIST)
+        (WHERE where=booleanExpression)?
+        (ORDER BY sortItem (',' sortItem)*)?
+        limitOffsetClause
+    ;
+```
+
+**参数解释**:
+
+1. **WHERE** 子句:需保证过滤的目标列是结果集中存在的列
+2. **ORDER BY** 子句:需保证`sortKey`是结果集中存在的列
+3. **limitOffsetClause**:
+   - **含义**:用于限制结果集的返回数量。
+   - **格式**:`LIMIT <offset>, <row_count>`, `<offset>` 是偏移量,`<row_count>` 
是返回的行数。
+4. **QUERIES** 表中的列:
+   - **query_id**:查询语句的 ID
+   - **start_time**:查询开始的时间戳,时间戳精度与系统精度一致
+   - **datanode_id**:发起查询语句的 DataNode 的ID
+   - **elapsed_time**:查询的执行耗时,单位是秒
+   - **statement**:查询的 SQL 语句
+   - **user**:发起查询的用户
+
+#### 示例:
+
+```SQL
+IoTDB> SHOW QUERIES WHERE elapsed_time > 30 
+```
+
+执行结果如下:
+
+```SQL
++-----------------------+-----------------------------+-----------+------------+------------+----+
+|               query_id|                   
start_time|datanode_id|elapsed_time|   statement|user|
++-----------------------+-----------------------------+-----------+------------+------------+----+
+|20250108_101015_00000_1|2025-01-08T18:10:15.935+08:00|          1|      
32.283|show queries|root|
++-----------------------+-----------------------------+-----------+------------+------------+----+
+```
+
+## 2 状态设置
+
+### 2.1 设置连接的模型
+
+**含义**:将当前连接的 sql_dialect 置为树模型/表模型。
+
+#### 语法:
+
+```SQL
+SET SQL_DIALECT EQ (TABLE | TREE)
+```
+
+#### 示例:
+
+```SQL
+IoTDB> SET SQL_DIALECT=TABLE
+IoTDB> SHOW CURRENT_SQL_DIALECT
+```
+
+执行结果如下:
+
+```SQL
++-----------------+
+|CurrentSqlDialect|
++-----------------+
+|            TABLE|
++-----------------+
+```
+
+### 2.2 更新配置项
+
+**含义**:用于更新配置项,执行完成后会进行配置项的热加载,对于支持热修改的配置项会立即生效。
+
+#### 语法:
+
+```SQL
+setConfigurationStatement
+    : SET CONFIGURATION propertyAssignments (ON INTEGER_VALUE)?
+    ;
+
+propertyAssignments
+    : property (',' property)*
+    ;
+    
+property
+    : identifier EQ propertyValue
+    ;
+
+propertyValue
+    : DEFAULT
+    | expression
+    ;
+```
+
+**参数解释**:
+
+1. **propertyAssignments**
+   - **含义**:更新的配置列表,由多个 `property` 组成。
+   - 可以更新多个配置列表,用逗号分隔。
+   - **取值**:
+      - `DEFAULT`:将配置项恢复为默认值。
+      - `expression`:具体的值,必须是一个字符串。
+2. **ON INTEGER_VALUE**
+   - **含义**:指定要更新配置的节点 ID。
+   - **可选性**:可选。如果不指定或指定的值低于 0,则更新所有 ConfigNode 和 DataNode 的配置。
+
+#### 示例:
+
+```SQL
+IoTDB> SET CONFIGURATION "a"='1',b='1' ON 1;
+```
+
+### 2.3 读取手动修改的配置文件
+
+**含义**:用于读取手动修改过的配置文件,并对配置项进行热加载,对于支持热修改的配置项会立即生效。
+
+#### 语法:
+
+```SQL
+loadConfigurationStatement
+    : LOAD CONFIGURATION localOrClusterMode?
+    ;
+    
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1. **localOrClusterMode**
+   - **含义**:指定配置热加载的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:只对客户端直连的 DataNode 进行配置热加载。
+      - `ON CLUSTER`:对集群中所有 DataNode 进行配置热加载。
+
+#### 示例:
+
+```SQL
+IoTDB> LOAD CONFIGURATION ON LOCAL;
+```
+
+### 2.4 设置系统的状态
+
+**含义**:用于设置系统的状态。
+
+#### 语法:
+
+```SQL
+setSystemStatusStatement
+    : SET SYSTEM TO (READONLY | RUNNING) localOrClusterMode?
+    ;    
+    
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1. **RUNNING | READONLY**
+   - **含义**:指定系统的新状态。
+   - **取值**:
+      - `RUNNING`:将系统设置为运行状态,允许读写操作。
+      - `READONLY`:将系统设置为只读状态,只允许读取操作,禁止写入操作。
+2. **localOrClusterMode**
+   - **含义**:指定状态变更的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:仅对客户端直连的 DataNode 生效。
+      - `ON CLUSTER`:对集群中所有 DataNode 生效。
+
+#### 示例:
+
+```SQL
+IoTDB> SET SYSTEM TO READONLY ON CLUSTER;
+```
+
+
+## 3 数据管理
+
+### 3.1 刷写内存表中的数据到磁盘
+
+**含义**:将内存表中的数据刷写到磁盘上。
+
+#### 语法:
+
+```SQL
+flushStatement
+    : FLUSH identifier? (',' identifier)* booleanValue? localOrClusterMode?
+    ;
+
+booleanValue
+    : TRUE | FALSE
+    ;
+
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1.  **identifier**
+    - **含义**:指定要刷写的数据库名称。
+    - **可选性**:可选。如果不指定,则默认刷写所有数据库。
+    - **多个数据库**:可以指定多个数据库名称,用逗号分隔。例如:`FLUSH test_db1, test_db2`。
+2. **booleanValue**
+   - **含义**:指定刷写的内容。
+   - **可选性**:可选。如果不指定,则默认刷写顺序和乱序空间的内存。
+   - **取值**:
+      - `TRUE`:只刷写顺序空间的内存表。
+      - `FALSE`:只刷写乱序空间的MemTable。
+3. **localOrClusterMode**
+   - **含义**:指定刷写的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:只刷写客户端直连的 DataNode 上的内存表。
+      - `ON CLUSTER`:刷写集群中所有 DataNode 上的内存表。
+
+#### 示例:
+
+```SQL
+IoTDB> FLUSH test_db TRUE ON LOCAL;
+```
+
+### 3.2 清除 DataNode 上的缓存
+
+**含义**:用于清除 DataNode 上的某种类型的缓存。
+
+#### 语法:
+
+```SQL
+clearCacheStatement
+    : CLEAR clearCacheOptions? CACHE localOrClusterMode?
+    ;
+
+clearCacheOptions
+    : ATTRIBUTE
+    | QUERY
+    | ALL
+    ;
+
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1. **clearCacheOptions**
+   - **含义**:指定要清除的缓存类型。
+   - **可选性**:可选。如果不指定,默认清除查询缓存(`QUERY`)。
+   - **取值**:
+      - `ATTRIBUTE`:清除设备属性缓存。
+      - `QUERY`:清除存储引擎中的查询缓存。
+      - `ALL`:清除所有缓存,包括设备属性缓存、查询缓存以及树模型中的模式缓存。
+2. **localOrClusterMode**
+   - **含义**:指定清除缓存的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:只清除客户端直连的 DataNode 上的缓存。
+      - `ON CLUSTER`:清除集群中所有 DataNode 上的缓存。
+
+#### 示例:
+
+```SQL
+IoTDB> CLEAR ALL CACHE ON LOCAL;
+```
+
+## 4 数据修复
+
+### 4.1 启动后台扫描并修复 tsfile 任务
+
+**含义**:启动一个后台任务,开始扫描并修复 tsfile,能够修复数据文件内的时间戳乱序类异常。
+
+#### 语法:
+
+```SQL
+startRepairDataStatement
+    : START REPAIR DATA localOrClusterMode?
+    ;
+    
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1. **localOrClusterMode**
+   - **含义**:指定数据修复的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:仅对客户端直连的 DataNode 执行。
+      - `ON CLUSTER`:对集群中所有 DataNode 执行。
+
+#### 示例:
+
+```SQL
+IoTDB> START REPAIR DATA ON CLUSTER;
+```
+
+### 4.2 暂停后台修复 tsfile 任务
+
+**含义**:暂停后台的修复任务,暂停中的任务可通过再次执行 start repair data 命令恢复。
+
+#### 语法:
+
+```SQL
+stopRepairDataStatement
+    : STOP REPAIR DATA localOrClusterMode?
+    ;
+    
+localOrClusterMode
+    : (ON (LOCAL | CLUSTER))
+    ;
+```
+
+**参数解释**:
+
+1. **localOrClusterMode**
+   - **含义**:指定数据修复的范围。
+   - **可选性**:可选。默认值为 `CLUSTER`。
+   - **取值**:
+      - `ON LOCAL`:仅对客户端直连的 DataNode 执行。
+      - `ON CLUSTER`:对集群中所有 DataNode 执行。
+
+#### 示例:
+
+```SQL
+IoTDB> STOP REPAIR DATA ON CLUSTER;
+```
+
+## 5 终止查询
+
+### 5.1 主动终止查询
+
+**含义**:使用该命令主动地终止查询。
+
+#### 语法:
+
+```SQL
+killQueryStatement
+    : KILL (QUERY queryId=string | ALL QUERIES)
+    ;
+```
+
+**参数解释**:
+
+1. **QUERY queryId=string**
+   - **含义**:指定要终止的查询的 ID。 `<queryId>` 是正在执行的查询的唯一标识符。
+   - **获取查询 ID**:可以通过 `SHOW QUERIES` 命令获取所有正在执行的查询及其 ID。
+2. **ALL QUERIES**
+   - **含义**:终止所有正在执行的查询。
+
+#### 示例:
+
+通过指定 `queryId` 可以中止指定的查询,为了获取正在执行的查询 id,用户可以使用 show queries 
命令,该命令将显示所有正在执行的查询列表。
+
+```SQL
+IoTDB> KILL QUERY 20250108_101015_00000_1; -- 终止指定query
+IoTDB> KILL ALL QUERIES; -- 终止所有query
+```
\ No newline at end of file
diff --git 
a/src/zh/UserGuide/latest-Table/User-Manual/Query-Performance-Analysis.md 
b/src/zh/UserGuide/latest-Table/User-Manual/Query-Performance-Analysis.md
new file mode 100644
index 00000000..b577983a
--- /dev/null
+++ b/src/zh/UserGuide/latest-Table/User-Manual/Query-Performance-Analysis.md
@@ -0,0 +1,335 @@
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+    
+        http://www.apache.org/licenses/LICENSE-2.0
+    
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+# 系统运维
+
+## 查询性能分析
+
+查询分析的意义在于帮助用户理解查询的执行机制和性能瓶颈,从而实现查询优化和性能提升。这不仅关乎到查询的执行效率,也直接影响到应用的用户体验和资源的有效利用。为了进行有效的查询分析,IoTDB
 提供了查询分析语句:Explain 和 Explain Analyze。
+
+- Explain 语句:允许用户预览查询 SQL 的执行计划,包括 IoTDB 如何组织数据检索和处理。
+- Explain Analyze 语句:在 Explain 语句基础上增加了性能分析,完整执行 SQL 并展示查询执行过程中的时间和资源消耗。为 
IoTDB 用户深入理解查询详情以及进行查询优化提供了详细的相关信息。与其他常用的 IoTDB 排查手段相比,Explain Analyze 
没有部署负担,同时能够针对单条 sql 进行分析,能够更好定位问题。各类方法对比如下::
+
+| 方法                | 安装难度                                                     
| 业务影响                                             | 功能范围                       
                        |
+| ------------------- | 
------------------------------------------------------------ | 
---------------------------------------------------- | 
------------------------------------------------------ |
+| Explain Analyze语句 | 低。无需安装额外组件,为IoTDB内置SQL语句                     | 
低。只会影响当前分析的单条查询,对线上其他负载无影响 | 支持分布式,可支持对单条SQL进行追踪                    |
+| 监控面板            | 中。需要安装IoTDB监控面板工具(企业版工具),并开启IoTDB监控服务 | 
中。IoTDB监控服务记录指标会带来额外耗时              | 支持分布式,仅支持对数据库整体查询负载和耗时进行分析   |
+| Arthas抽样          | 中。需要安装Java Arthas工具(部分内网无法直接安装Arthas,且安装后,有时需要重启应用) | 
高。CPU 抽样可能会影响线上业务的响应速度             | 不支持分布式,仅支持对数据库整体查询负载和耗时进行分析 |
+
+### Explain 语句
+
+#### 语法
+
+Explain命令允许用户查看SQL查询的执行计划。执行计划以算子的形式展示,描述了IoTDB会如何执行查询。其语法如下,其中SELECT_STATEMENT是查询相关的SQL语句:
+
+```SQL
+EXPLAIN <SELECT_STATEMENT>
+```
+#### 含义
+
+```SQL
+-- 创建数据库
+create database test;
+
+-- 创建表
+use test;
+create table t1 (device_id STRING ID, type STRING ATTRIBUTE, speed float);
+
+-- 插入数据
+insert into t1(device_id, type, speed) values('car_1', 'Model Y', 120.0);
+insert into t1(device_id, type, speed) values('car_2', 'Model 3', 100.0);
+
+-- 执行 explain 语句
+explain select * from t1;
+```
+执行上方SQL,会得到如下结果。不难看出,IoTDB 分别通过两个 TableScan 节点去不同的数据分区中获取表中的数据,最后通过Collect 
算子汇总数据后返回。
+
+```SQL
++-----------------------------------------------------------------------------------------------+
+|                                                                              
distribution plan|
++-----------------------------------------------------------------------------------------------+
+|                        ┌─────────────────────────────────────────────┐       
                 |
+|                        │OutputNode-4                                 │       
                 |
+|                        │OutputColumns-[time, device_id, type, speed] │       
                 |
+|                        │OutputSymbols: [time, device_id, type, speed]│       
                 |
+|                        └─────────────────────────────────────────────┘       
                 |
+|                                               │                              
                 |
+|                                               │                              
                 |
+|                        ┌─────────────────────────────────────────────┐       
                 |
+|                        │Collect-21                                   │       
                 |
+|                        │OutputSymbols: [time, device_id, type, speed]│       
                 |
+|                        └─────────────────────────────────────────────┘       
                 |
+|                       ┌───────────────────────┴───────────────────────┐      
                 |
+|                       │                                               │      
                 |
+|┌─────────────────────────────────────────────┐                  
┌───────────┐                 |
+|│TableScan-19                                 │                  
│Exchange-28│                 |
+|│QualifiedTableName: test.t1                  │                  
└───────────┘                 |
+|│OutputSymbols: [time, device_id, type, speed]│                        │      
                 |
+|│DeviceNumber: 1                              │                        │      
                 |
+|│ScanOrder: ASC                               │ 
┌─────────────────────────────────────────────┐|
+|│PushDownOffset: 0                            │ │TableScan-20                 
                │|
+|│PushDownLimit: 0                             │ │QualifiedTableName: test.t1  
                │|
+|│PushDownLimitToEachDevice: false             │ │OutputSymbols: [time, 
device_id, type, speed]│|
+|│RegionId: 2                                  │ │DeviceNumber: 1              
                │|
+|└─────────────────────────────────────────────┘ │ScanOrder: ASC               
                │|
+|                                                │PushDownOffset: 0            
                │|
+|                                                │PushDownLimit: 0             
                │|
+|                                                │PushDownLimitToEachDevice: 
false             │|
+|                                                │RegionId: 1                  
                │|
+|                                                
└─────────────────────────────────────────────┘|
++-----------------------------------------------------------------------------------------------+
+```
+
+
+### Explain Analyze 语句
+
+#### 语法
+
+```SQL
+EXPLAIN ANALYZE [VERBOSE] <SELECT_STATEMENT>
+```
+
+其中 SELECT_STATEMENT 对应需要分析的查询语句;VERBOSE为打印详细分析结果,不填写VERBOSE时EXPLAIN 
ANALYZE将会省略部分信息。
+
+#### 含义
+
+Explain Analyze 是 IOTDB 查询引擎自带的性能分析 SQL,与 Explain 
不同,它会执行对应的查询计划并统计执行信息,可以用于追踪一条查询的具体性能分布,用于对资源进行观察,进行性能调优与异常分析。
+
+在 EXPLAIN ANALYZE 的结果集中,会包含如下信息:
+
+![explain-analyze-1.png](/img/explain-analyze-1.png)
+
+其中:
+
+- QueryStatistics 包含查询层面进的统计信息,主要包含各规划阶段耗时,查询分片数量等信息。
+  - Analyze Cost: SQL 分析阶段的耗时(包含 FetchPartitionCost 和 FetchSchemaCost)
+  - Fetch Partition Cost:拉取分区表的耗时
+  - Fetch Schema Cost:拉取元数据以及权限校验的耗时
+  - Logical Plan Cost:构建逻辑计划的耗时
+  - Logical Optimization Cost: 逻辑计划优化的耗时
+  - Distribution Plan Cost:构建分布式计划的耗时
+  - Fragment Instance Count:总的查询分片的数量,每个查询分片的信息会挨个输出
+- FragmentInstance 是 IoTDB 一个查询分片的封装,每一个查询分片都会在结果集中输出一份分片的执行信息,主要包含 
FragmentStatistics 和算子信息。FragmentStastistics 包含 Fragment 
的统计信息,包括总实际耗时(墙上时间),所涉及到的 TsFile,调度信息等情况。在一个 Fragment 
的信息输出同时会以节点树层级的方式展示该Fragment 
下计划节点的统计信息,主要包括:CPU运行时间、输出的数据行数、指定接口被调用的次数、所占用的内存、节点专属的定制信息。
+  - Total Wall Time: 该分片从开始执行到执行结束的物理时间
+  - Cost of initDataQuerySource:构建查询文件列表
+  - Seq File(unclosed): 未封口(memtable)的顺序文件数量,  Seq File(closed): 封口的顺序文件数量
+  - UnSeq File(unclosed): 未封口(memtable)的乱序文件数量, UnSeq File(closed): 未封口的乱序文件数量
+  - ready queued time: 查询分片的所有task在 ready queue 中的总时长(task 
未阻塞,但没有查询执行线程资源时,会被放入ready queue),blocked queued time: 查询分片的所有task在 bloced 
queue 中的总时长(task 因为某些资源,如内存,或者上游数据未发送过来,则会被放入blocked queue)
+  - BloomFilter 相关(用于判断某个序列在tsfile中是否存在,存储于tsfile尾部)
+    - loadBloomFilterFromCacheCount: 命中BloomFilterCache的次数
+    - loadBloomFilterFromDiskCount: 从磁盘中读取的次数
+    - loadBloomFilterActualIOSize: 从磁盘中读取BloomFilter时耗费的磁盘IO(单位为bytes)
+    - loadBloomFilterTime: 读取BloomFilter + 计算序列是否存在的总耗时(单位为ms)
+  - TimeSeriesMetadata 相关(序列在tsfile中的索引信息,一个序列在一个tsfile中只会存储一个)
+    - loadTimeSeriesMetadataDiskSeqCount: 从封口的顺序文件里加载出的TimeSeriesMetadata数量
+      - 大部分情况下等于Seq File(closed),但如果有limit等算子,可能实际加载的数量会小于Seq File(closed)
+    - loadTimeSeriesMetadataDiskUnSeqCount: 从封口的乱序文件里加载出的TimeSeriesMetadata数量
+      - 大部分情况下等于UnSeq File(closed),但如果有limit等算子,可能实际加载的数量会小于UnSeq File(closed)
+    - loadTimeSeriesMetadataDiskSeqTime: 从封口的顺序文件里加载TimeSeriesMetadata的耗时
+      - 并不是所有的 TimeSeriesMetadata 加载都涉及磁盘 
IO,有可能会命中TimeSeriesMetadataCache,直接从缓存中读取,但输出信息里并没有分开统计这两者的耗时
+    - loadTimeSeriesMetadataDiskUnSeqTime: 从未封口的顺序文件里加载TimeSeriesMetadata的耗时
+    - loadTimeSeriesMetadataFromCacheCount: 
命中TimeSeriesMetadataCache的次数,注意这里对于对齐设备来讲,每个分量(包括time列,都会去单独请求Cache,所以对于对齐设备来讲,(loadTimeSeriesMetadataFromCacheCount
 + loadTimeSeriesMetadataFromDiskCount)= tsfile number * subSensor 
number(包括time列)
+    - loadTimeSeriesMetadataFromDiskCount: 
从磁盘中读取TimeSeriesMetadata的次数,一次读取会把该设备下查询所有涉及到的分量都读出来缓存在TimeSeriesMetadataCache中
+    - loadTimeSeriesMetadataActualIOSize: 
从磁盘中读取TimeSeriesMetadata时耗费的磁盘IO(单位为bytes)
+  - Mods 文件相关
+    - TimeSeriesMetadataModificationTime: 读取mods文件花费的时间
+  - Chunk 相关
+    - constructAlignedChunkReadersDiskCount: 读取已封口 tsfile 中总的 Chunk 数量
+    - constructAlignedChunkReadersDiskTime: 读取已封口 tsfile 中 Chunk 
的总耗时(包含磁盘IO和解压缩)
+    - pageReadersDecodeAlignedDiskCount: 解编码已封口 tsfile 中总的 page 数量
+    - pageReadersDecodeAlignedDiskTime: 解编码已封口 tsfile 中 page 的总耗时
+    - loadChunkFromCacheCount: 
命中ChunkCache的次数,注意这里对于对齐设备来讲,每个分量(包括time列,都会去单独请求Cache,所以对于对齐设备来讲,(loadChunkFromCacheCount
 + loadChunkFromDiskCount)= tsfile number * subSensor number(包括time列)* avg 
chunk number in each tsfile
+    - loadChunkFromDiskCount: 从磁盘中读取Chunk的次数,一次只会读取一个分量,并缓存在ChunkCache中
+    - loadChunkActualIOSize: 从磁盘中读取Chunk时耗费的磁盘IO(单位为bytes)
+
+
+##### 特别说明
+
+查询超时场景使用 Explain Analyze 语句:
+
+Explain Analyze 本身是一种特殊的查询,所以当执行超时的时候,Explain Analyze 
语句也无法正常返回结果。为了在查询超时的情况下也可以通过分析结果排查超时原因,Explain Analyze 
提供了定时日志机制(无需用户配置),每经过一定的时间间隔会将 Explain Analyze 
的当前结果以文本的形式输出到专门的日志中。当查询超时时,用户可以前往logs/log_explain_analyze.log中查看对应的日志进行排查。
+日志的时间间隔基于查询的超时时间进行计算,可以保证在超时的情况下至少会有两次的结果记录。
+
+##### 示例
+
+下面是Explain Analyze的一个例子:
+
+```SQL
+-- 创建数据库
+create database test;
+
+-- 创建表
+use test;
+create table t1 (device_id STRING ID, type STRING ATTRIBUTE, speed float);
+
+-- 插入数据
+insert into t1(device_id, type, speed) values('car_1', 'Model Y', 120.0);
+insert into t1(device_id, type, speed) values('car_2', 'Model 3', 100.0);
+
+-- 执行 explain analyze 语句
+explain analyze verbose select * from t1;
+```
+
+得到输出如下:
+
+```SQL
++-----------------------------------------------------------------------------------------------+
+|                                                                              
  Explain Analyze|
++-----------------------------------------------------------------------------------------------+
+|Analyze Cost: 38.860 ms                                                       
                 |
+|Fetch Partition Cost: 9.888 ms                                                
                 |
+|Fetch Schema Cost: 54.046 ms                                                  
                 |
+|Logical Plan Cost: 10.102 ms                                                  
                 |
+|Logical Optimization Cost: 17.396 ms                                          
                 |
+|Distribution Plan Cost: 2.508 ms                                              
                 |
+|Dispatch Cost: 22.126 ms                                                      
                 |
+|Fragment Instances Count: 2                                                   
                 |
+|                                                                              
                 |
+|FRAGMENT-INSTANCE[Id: 20241127_090849_00009_1.2.0][IP: 0.0.0.0][DataRegion: 
2][State: FINISHED]|
+|  Total Wall Time: 18 ms                                                      
                 |
+|  Cost of initDataQuerySource: 6.153 ms                                       
                 |
+|  Seq File(unclosed): 1, Seq File(closed): 0                                  
                 |
+|  UnSeq File(unclosed): 0, UnSeq File(closed): 0                              
                 |
+|  ready queued time: 0.164 ms, blocked queued time: 0.342 ms                  
                 |
+|  Query Statistics:                                                           
                 |
+|    loadBloomFilterFromCacheCount: 0                                          
                 |
+|    loadBloomFilterFromDiskCount: 0                                           
                 |
+|    loadBloomFilterActualIOSize: 0                                            
                 |
+|    loadBloomFilterTime: 0.000                                                
                 |
+|    loadTimeSeriesMetadataAlignedMemSeqCount: 1                               
                 |
+|    loadTimeSeriesMetadataAlignedMemSeqTime: 0.246                            
                 |
+|    loadTimeSeriesMetadataFromCacheCount: 0                                   
                 |
+|    loadTimeSeriesMetadataFromDiskCount: 0                                    
                 |
+|    loadTimeSeriesMetadataActualIOSize: 0                                     
                 |
+|    constructAlignedChunkReadersMemCount: 1                                   
                 |
+|    constructAlignedChunkReadersMemTime: 0.294                                
                 |
+|    loadChunkFromCacheCount: 0                                                
                 |
+|    loadChunkFromDiskCount: 0                                                 
                 |
+|    loadChunkActualIOSize: 0                                                  
                 |
+|    pageReadersDecodeAlignedMemCount: 1                                       
                 |
+|    pageReadersDecodeAlignedMemTime: 0.047                                    
                 |
+|    [PlanNodeId 43]: IdentitySinkNode(IdentitySinkOperator)                   
                 |
+|        CPU Time: 5.523 ms                                                    
                 |
+|        output: 2 rows                                                        
                 |
+|        HasNext() Called Count: 6                                             
                 |
+|        Next() Called Count: 5                                                
                 |
+|        Estimated Memory Size: : 327680                                       
                 |
+|      [PlanNodeId 31]: CollectNode(CollectOperator)                           
                 |
+|          CPU Time: 5.512 ms                                                  
                 |
+|          output: 2 rows                                                      
                 |
+|          HasNext() Called Count: 6                                           
                 |
+|          Next() Called Count: 5                                              
                 |
+|          Estimated Memory Size: : 327680                                     
                 |
+|        [PlanNodeId 29]: TableScanNode(TableScanOperator)                     
                 |
+|            CPU Time: 5.439 ms                                                
                 |
+|            output: 1 rows                                                    
                 |
+|            HasNext() Called Count: 3
+|            Next() Called Count: 2                                            
                 |
+|            Estimated Memory Size: : 327680                                   
                 |
+|            DeviceNumber: 1                                                   
                 |
+|            CurrentDeviceIndex: 0                                             
                 |
+|        [PlanNodeId 40]: ExchangeNode(ExchangeOperator)                       
                 |
+|            CPU Time: 0.053 ms                                                
                 |
+|            output: 1 rows                                                    
                 |
+|            HasNext() Called Count: 2                                         
                 |
+|            Next() Called Count: 1                                            
                 |
+|            Estimated Memory Size: : 131072                                   
                 |
+|                                                                              
                 |
+|FRAGMENT-INSTANCE[Id: 20241127_090849_00009_1.3.0][IP: 0.0.0.0][DataRegion: 
1][State: FINISHED]|
+|  Total Wall Time: 13 ms                                                      
                 |
+|  Cost of initDataQuerySource: 5.725 ms                                       
                 |
+|  Seq File(unclosed): 1, Seq File(closed): 0                                  
                 |
+|  UnSeq File(unclosed): 0, UnSeq File(closed): 0                              
                 |
+|  ready queued time: 0.118 ms, blocked queued time: 5.844 ms                  
                 |
+|  Query Statistics:                                                           
                 |
+|    loadBloomFilterFromCacheCount: 0                                          
                 |
+|    loadBloomFilterFromDiskCount: 0                                           
                 |
+|    loadBloomFilterActualIOSize: 0                                            
                 |
+|    loadBloomFilterTime: 0.000                                                
                 |
+|    loadTimeSeriesMetadataAlignedMemSeqCount: 1                               
                 |
+|    loadTimeSeriesMetadataAlignedMemSeqTime: 0.004                            
                 |
+|    loadTimeSeriesMetadataFromCacheCount: 0                                   
                 |
+|    loadTimeSeriesMetadataFromDiskCount: 0                                    
                 |
+|    loadTimeSeriesMetadataActualIOSize: 0                                     
                 |
+|    constructAlignedChunkReadersMemCount: 1                                   
                 |
+|    constructAlignedChunkReadersMemTime: 0.001                                
                 |
+|    loadChunkFromCacheCount: 0                                                
                 |
+|    loadChunkFromDiskCount: 0                                                 
                 |
+|    loadChunkActualIOSize: 0                                                  
                 |
+|    pageReadersDecodeAlignedMemCount: 1                                       
                 |
+|    pageReadersDecodeAlignedMemTime: 0.007                                    
                 |
+|    [PlanNodeId 42]: IdentitySinkNode(IdentitySinkOperator)                   
                 |
+|        CPU Time: 0.270 ms                                                    
                 |
+|        output: 1 rows                                                        
                 |
+|        HasNext() Called Count: 3                                             
                 |
+|        Next() Called Count: 2                                                
                 |
+|        Estimated Memory Size: : 327680                                       
                 |
+|      [PlanNodeId 30]: TableScanNode(TableScanOperator)                       
                 |
+|          CPU Time: 0.250 ms                                                  
                 |
+|          output: 1 rows                                                      
                 |
+|          HasNext() Called Count: 3                                           
                 |
+|          Next() Called Count: 2                                              
                 |
+|          Estimated Memory Size: : 327680                                     
                 |
+|          DeviceNumber: 1                                                     
                 |
+|          CurrentDeviceIndex: 0                                               
                 |
++-----------------------------------------------------------------------------------------------+
+```
+
+### 常见问题
+
+#### 1. WALL TIME(墙上时间)和 CPU TIME(CPU时间)的区别?
+
+CPU 时间也称为处理器时间或处理器使用时间,指的是程序在执行过程中实际占用 CPU 进行计算的时间,显示的是程序实际消耗的处理器资源。
+
+墙上时间也称为实际时间或物理时间,指的是从程序开始执行到程序结束的总时间,包括了所有等待时间。。
+
+1. WALL TIME < CPU TIME 的场景:比如一个查询分片最后被调度器使用两个线程并行执行,真实物理世界上是 10s 
过去了,但两个线程,可能一直占了两个 cpu 核跑了 10s,那 cpu time 就是 20s,wall time就是 10s
+2. WALL TIME > CPU TIME 的场景:因为系统内可能会存在多个查询并行执行,但查询的执行线程数和内存是固定的,
+   1. 所以当查询分片被某些资源阻塞住时(比如没有足够的内存进行数据传输、或等待上游数据)就会放入Blocked Queue,此时查询分片并不会占用 
CPU TIME,但WALL TIME(真实物理时间的时间)是在向前流逝的
+   2. 
或者当查询线程资源不足时,比如当前共有16个查询线程,但系统内并发有20个查询分片,即使所有查询都没有被阻塞,也只会同时并行运行16个查询分片,另外四个会被放入
 READY QUEUE,等待被调度执行,此时查询分片并不会占用 CPU TIME,但WALL TIME(真实物理时间的时间)是在向前流逝的
+
+
+#### 2. Explain Analyze 是否有额外开销,测出的耗时是否与查询真实执行时有差别?
+
+几乎没有,因为 explain analyze operator 是单独的线程执行,收集原查询的统计信息,且这些统计信息,即使不explain 
analyze,原来的查询也会生成,只是没有人去取。并且 explain analyze 是纯 next 
遍历结果集,不会打印,所以与原来查询真实执行时的耗时不会有显著差别。
+
+#### 3. IO 耗时主要关注几个指标?
+
+涉及 IO 耗时的指标主要有:loadBloomFilterActualIOSize, loadBloomFilterTime, 
loadTimeSeriesMetadataAlignedDisk[Seq/Unseq]Time, 
loadTimeSeriesMetadataActualIOSize, alignedTimeSeriesMetadataModificationTime, 
constructAlignedChunkReadersDiskTime, loadChunkActualIOSize,各指标的具体含义见上文。
+TimeSeriesMetadata 的加载分别统计了顺序和乱序文件,但 Chunk 
的读取暂时未分开统计,但顺乱序比例可以通过TimeseriesMetadata 顺乱序的比例计算出来。
+
+
+#### 4. 乱序数据对查询性能的影响能否有一些指标展示出来?
+
+乱序数据产生的影响主要有两个:
+
+1. 需要在内存中多做一个归并排序(一般认为这个耗时是比较短的,毕竟是纯内存的 cpu 操作)
+2. 乱序数据会产生数据块间的时间范围重叠,导致统计信息无法使用
+   1. 无法利用统计信息直接 skip 掉整个不满足值过滤要求的 chunk
+      1. 一般用户的查询都是只包含时间过滤条件,则不会有影响
+   2. 无法利用统计信息直接计算出聚合值,无需读取数据
+
+单独对于乱序数据的性能影响,目前并没有有效的观测手段,除非就是在有乱序数据的时候,执行一遍查询耗时,然后等乱序合完了,再执行一遍,才能对比出来。
+
+因为即使乱序这部分数据进了顺序,也是需要 IO、加压缩、decode,这个耗时少不了,不会因为乱序数据被合并进乱序了,就减少了。
+
+#### 5. 执行 explain analyze 时,查询超时后,为什么结果没有输出在 log_explain_analyze.log 中?
+
+升级时,只替换了 lib 包,没有替换 conf/logback-datanode.xml,需要替换一下 
conf/logback-datanode.xml,然后不需要重启(该文件内容可以被热加载),大约等待 1 分钟后,重新执行 explain analyze 
verbose。


Reply via email to