diff --git a/dashboard/top-sql.md b/dashboard/top-sql.md
index 50118d6cfbe2..db8158bd8862 100644
--- a/dashboard/top-sql.md
+++ b/dashboard/top-sql.md
@@ -1,16 +1,21 @@
---
title: TiDB Dashboard Top SQL 页面
-summary: 使用 Top SQL 找到 CPU 开销较大的 SQL 语句
+summary: 使用 Top SQL 找到消耗 CPU、网络和逻辑 IO 资源较多的查询
---
# TiDB Dashboard Top SQL 页面
-TiDB Dashboard 的 Top SQL 功能允许你可视化地监控和探索数据库中各个 SQL 语句在执行过程中的 CPU 开销情况,从而对数据库性能问题进行优化和处理。Top SQL 持续收集各个 TiDB 及 TiKV 实例每秒的实时 CPU 负载等数据(按 SQL 类型分别统计),并存储至多 30 天。你可以通过 Top SQL 展示的图表及表格快速分析某个 TiDB 或 TiKV 实例在某段时间中高 CPU 负载是来自于哪些 SQL 语句。
+在 TiDB Dashboard 的 Top SQL 页面,你可以查看和分析指定的 TiDB 或 TiKV 实例在一段时间内最消耗资源的 SQL 查询。
+
+- 开启 Top SQL 后,该功能会持续采集各个 TiDB 和 TiKV 实例的 CPU 负载数据,并保留至多 30 天。
+- 从 v8.5.6 起,你还可以在 Top SQL 设置中开启 **TiKV 网络 IO 采集(多维度)**,以进一步查看指定 TiKV 实例的 `Network Bytes`、`Logical IO Bytes` 等指标,并按 `By Query`、`By Table`、`By DB` 或 `By Region` 维度进行聚合分析。
Top SQL 具有以下功能:
-* 通过图表及表格,可视化地展示 CPU 开销最多的 5 类 SQL 语句。
-* 展示每秒请求数、平均延迟、查询计划等详细执行信息。
+* 通过图表和表格展示当前时间范围内资源消耗最高的 Top `5`、`20` 或 `100` 类 SQL 查询,其余记录自动汇总为 `Others`。
+* 支持按 CPU 耗时、网络字节数排序查看资源消耗热点;选择 TiKV 实例时,还支持按逻辑 IO 字节数排序。
+* 支持按 Query 查看 SQL 及其执行计划详情;选择 TiKV 实例时,还支持按 `By Table`、`By DB` 和 `By Region` 聚合分析。
+* 支持框选图表缩放时间范围、手动刷新、自动刷新以及导出 CSV。
* 支持统计所有正在执行、尚未执行完毕的 SQL 语句。
* 支持查看集群中指定 TiDB 及 TiKV 实例的情况。
@@ -18,15 +23,15 @@ Top SQL 具有以下功能:
Top SQL 适用于分析性能问题。以下列举了一些典型的 Top SQL 适用场景:
-* 通过监控图发现集群中有个别 TiKV 实例的 CPU 非常高,期望了解 CPU 热点来自于哪些 SQL 语句,以便对其进行优化、更好地利用上分布式资源。
-* 集群整体 CPU 占用率非常高、数据库查询缓慢,期望快速知悉目前哪些 SQL 语句开销了最多的 CPU 资源,以便对它们进行优化。
-* 集群整体 CPU 占用率突然发生了显著变化,期望了解变化前后主要的 SQL 资源开销区别。
-* 分析集群当前最消耗资源的 SQL 语句情况,希望对它们进行优化以便降低硬件开支。
+* 通过监控发现个别 TiDB 或 TiKV 实例 CPU 负载很高,希望快速定位是哪类 SQL 正在消耗大量 CPU 资源。
+* 集群整体查询变慢,希望找出当前最消耗资源的 SQL,或者对比负载变化前后最主要的查询差异。
+* 需要从更高维度定位热点,希望按 `Table`、`DB` 或 `Region` 聚合查看 TiKV 侧的资源消耗。
+* 需要从网络流量或逻辑 IO 角度排查 TiKV 热点,而不仅仅局限于 CPU 维度。
Top SQL 不适用于分析以下问题:
- 不能用于解答与性能无关的问题,例如数据正确性或异常崩溃问题。
-- 暂不支持分析并非由于 CPU 负载高导致的数据库性能问题,例如锁冲突。
+- 不适合直接分析锁冲突、事务语义错误等并非由资源消耗导致的问题。
## 访问页面
@@ -47,10 +52,10 @@ Top SQL 不适用于分析以下问题:
Top SQL 开启后会对集群性能产生轻微的影响(平均 3% 以内),因此该功能默认关闭。你可以通过以下方法启用 Top SQL:
1. 访问 [Top SQL 页面](#访问页面)。
-2. 点击**打开设置** (Open Settings)。在右侧**设置** (Settings) 页面,将**启用特性** (Enable Feature) 下方的开关打开。
+2. 点击**打开设置** (Open Settings)。在右侧**设置** (Settings) 页面,将**启用功能** (Enable Feature) 下方的开关打开。
3. 点击**保存** (Save)。
-你仅能看到开启功能之后的 CPU 负载细节情况,在开启功能之前的 CPU 负载细节无法在界面上呈现。另外,数据有至多 1 分钟左右的延迟,因此你可能需要等待片刻才能看到数据。
+启用 Top SQL 后,你只能查看开启之后新采集到的数据;开启之前的数据不会补采。数据展示通常会有约 1 分钟的延迟,因此需要等待片刻才能看到新数据。关闭 Top SQL 后,如果历史数据尚未过期,Top SQL 页面仍然会展示这些历史数据,但不会再采集和展示新的数据。
除了通过图形化界面以外,你也可以配置 TiDB 系统变量 [`tidb_enable_top_sql`](/system-variables.md#tidb_enable_top_sql-从-v540-版本开始引入) 来启用 Top SQL 功能:
@@ -60,6 +65,29 @@ Top SQL 开启后会对集群性能产生轻微的影响(平均 3% 以内)
SET GLOBAL tidb_enable_top_sql = 1;
```
+### 开启 TiKV 网络 IO 采集(可选)从 v8.5.6 开始引入
+
+针对 TiKV 实例,如需按照 `Order By Network`、`Order By Logical IO` 查看 Top SQL,或者使用 `By Region` 聚合,请在 Top SQL 设置面板中打开 **开启 TiKV 网络 IO 采集(多维度)** (Enable TiKV Network IO collection (multi-dimensional)) 开关并保存。
+
+- **Order By Network**:按照 TiKV 请求处理过程中产生的网络字节数排序。
+- **Order By Logical IO**:按照 TiKV 请求在 TiKV 存储层处理的逻辑数据字节数排序,例如读取过程中扫描或处理的数据量,以及写请求写入的数据量。
+
+如下图所示,右侧**设置** (Settings) 面板中会同时显示 **启用功能** (Enable Feature) 和 **开启 TiKV 网络 IO 采集(多维度)** (Enable TiKV Network IO collection (multi-dimensional)) 两个开关。
+
+
+
+**开启 TiKV 网络 IO 采集(多维度)**会增加一定的存储和查询开销。开启后,系统会将配置下发到当前所有 TiKV 节点;数据展示可能同样存在约 1 分钟延迟。如果部分 TiKV 节点未成功开启该功能,页面会给出告警提示,此时新数据可能不完整。
+
+对于后续新扩容的 TiKV 节点,这个开关不会自动生效。你需要在 Top SQL 设置面板中将 **开启 TiKV 网络 IO 采集(多维度)** 开关设置为全开并保存,使配置重新下发到所有 TiKV 节点。如果你希望新增的 TiKV 节点自动开启该功能,可以在 TiUP 集群拓扑文件的 `server_configs.tikv` 下增加以下配置,并通过 TiUP 重新下发 TiKV 配置:
+
+```yaml
+server_configs:
+ tikv:
+ resource-metering.enable-network-io-collection: true
+```
+
+关于 TiUP 拓扑配置的更多信息,请参见 [TiUP 集群拓扑文件配置](/tiup/tiup-cluster-topology-reference.md)。
+
## 使用 Top SQL
以下是 Top SQL 的常用步骤:
@@ -70,47 +98,71 @@ SET GLOBAL tidb_enable_top_sql = 1;

- 如果你不知道要观察哪一个 TiDB 或 TiKV 实例,可以选择任意一个实例。在集群 CPU 开销非常不均衡的情况下,你可以首先通过 Grafana 中的 CPU 监控来确定具体期望观察的实例。
+ 如果你不知道要观察哪一个实例,可以先从 Grafana 或 [TiDB Dashboard 概况页面](/dashboard/dashboard-overview.md)中定位负载异常的节点,再返回 Top SQL 页面进一步分析。
-3. 观察 Top SQL 呈现的 Top 5 图表及表格。
+3. 设置时间范围,并根据需要刷新数据。
- 
+ 你可以在时间选择器中调整时间范围,或在图表中框选一个时间范围来缩放观察窗口。更小的时间范围能够展示更细粒度的数据,精度最高可达 1 秒。
- 柱状图中色块的大小代表了 SQL 语句在该时刻消耗的 CPU 资源的多少,不同颜色区分了不同类型的 SQL 语句。大多数情况下,你都应该关注图表中相应时间范围内 CPU 资源开销较大的 SQL 语句。
+ 
-4. 点击表格中的某一个 SQL 语句后,可以展开查看该语句不同执行计划的执行情况,例如 Call/sec(平均每秒请求数)、Scan Indexes/sec(平均每秒扫描索引数)等。
+ 如果图表中显示的数据已过时,你可以点击**刷新** (Refresh) 按钮执行一次刷新,或在**刷新** (Refresh) 下拉列表中选择数据自动刷新的频率。
- 
+ 
-5. 基于这些初步线索,进一步在 [SQL 语句分析](/dashboard/dashboard-statement-list.md)或[慢查询](/dashboard/dashboard-slow-query.md)界面中了解该 SQL 语句开销大量 CPU 资源、或扫大量数据的详细原因。
+4. 选择观察模式。
- 你可以在时间选择器中调整时间范围,或在图表中框选一个时间范围,来更精确、细致地观察问题。更小的时间范围将能提供细节更丰富的数据,数据最高精度可达 1 秒。
+ - 通过 `Limit` 选择展示 Top `5`、`20` 或 `100` 类 SQL 查询。
+ - 默认的聚合维度为 `By Query`。如果当前选择的是 TiKV 实例,还可以选择按照 `By Table`、`By DB` 或 `By Region` 维度进行聚合。
- 
+ 
- 如果图表中显示的数据已过时,你可以点击**刷新** (Refresh) 按钮,或在**刷新** (Refresh) 下拉列表中选择自动刷新。
+ - 默认的排序方式是 `Order By CPU`(按 CPU 耗时排序)。如果当前选择的是 TiKV 实例且已[开启 TiKV 网络 IO 采集(多维度)](#开启-tikv-网络-io-采集可选),还可以选择 `Order By Network`(按网络字节数排序) 或 `Order By Logical IO`(按逻辑 IO 字节数排序)。
- 
+ 
+
+ > **注意**
+ >
+ > `By Region` 以及 `Order By Network`、`Order By Logical IO` 仅在 [TiKV 网络 IO 采集(多维度)](#开启-tikv-网络-io-采集可选)开启时可选。若该功能未开启,但历史数据仍然存在,页面会继续展示历史数据,并提示新数据无法完整采集。
-6. 查看按表或者数据库维度的 CPU 资源使用情况,快速定位更高维度的资源使用情况。目前只支持查看 TiKV 实例。
+5. 观察图表和表格中的资源消耗热点记录。
- 选择一个 TiKV 实例,然后选择 **By TABLE** 或者 **By DB**:
+ 
+
+ 柱状图表示当前排序维度下的资源消耗,不同颜色表示不同记录。表格会按照当前排序维度展示累计值,并在最后提供 `Others` 行,用于汇总所有非 Top N 记录。
+
+6. 在 `By Query` 视图中,点击表格中的某一行 SQL,即可查看该类 SQL 的执行计划详情。
+
+ 
- 
+ 你可以在 SQL 详情中查看对应的 SQL 模板、SQL 模板 ID、Plan 模板 ID 以及执行计划文本。SQL 详情表会根据实例类型展示不同指标:
- 查看高维度的聚合结果:
+ - TiDB 实例通常显示 `Call/sec` 与 `Latency/call`。
+ - TiKV 实例通常显示 `Call/sec`、`Scan Rows/sec` 和 `Scan Indexes/sec`。
+
+ > **注意**
+ >
+ > 如果当前选择的是 `By Table`、`By DB` 或 `By Region` 聚合视图,页面展示的是聚合结果,不再按 SQL 执行计划展开详情。
+
+ 在 `By Query` 视图中,你也可以直接点击 Top SQL 表格中的**在 SQL 语句分析中搜索** (Search in SQL Statements) 跳转到对应的 SQL 语句分析页面。若需要离线分析当前表格结果,可以点击表格上方的 `Download to CSV` 导出当前表格数据。
+
+7. 在 TiKV 实例上,如果需要从更高维度定位热点,可以切换到 `By Table`、`By DB` 或 `By Region`,查看聚合后的结果。

+8. 基于这些初步线索,进一步在 [SQL 语句分析](/dashboard/dashboard-statement-list.md)或[慢查询](/dashboard/dashboard-slow-query.md)页面中分析根因。
+
## 停用 Top SQL
你可以通过以下步骤停用该功能:
1. 访问 [Top SQL 页面](#访问页面)。
-2. 点击右上角**齿轮按钮**打开设置界面,将**启用特性** (Enable Feature) 下方的开关关闭。
+2. 点击右上角**齿轮按钮**打开设置界面,将**启用功能** (Enable Feature) 下方的开关关闭。
3. 点击**保存** (Save)。
4. 在弹出的**关闭 Top SQL 功能** (Disable Top SQL Feature) 对话框中,点击**确认** (Disable)。
+停用后将停止采集新的 Top SQL 数据,但历史数据在过期前仍可查看。
+
除了通过图形化界面以外,你也可以配置 TiDB 系统变量 [`tidb_enable_top_sql`](/system-variables.md#tidb_enable_top_sql-从-v540-版本开始引入) 来停用 Top SQL 功能:
{{< copyable "sql" >}}
@@ -119,6 +171,15 @@ SET GLOBAL tidb_enable_top_sql = 1;
SET GLOBAL tidb_enable_top_sql = 0;
```
+### 停用 TiKV 网络 IO 采集
+
+如果你只想停止采集 TiKV 的 `Network Bytes`、`Logical IO Bytes` 等多维度数据,而保留 Top SQL 的 CPU 维度分析能力,可以在 Top SQL 设置面板中关闭 **开启 TiKV 网络 IO 采集(多维度)** 开关。
+
+关闭后:
+
+- Top SQL 页面仍可查看之前已采集到的尚未过期的历史网络 IO 和逻辑 IO 数据。
+- 新的网络 IO 和逻辑 IO 数据,以及 `By Region` 数据将不再继续采集。
+
## 常见问题
**1. 界面上提示“集群中未启动必要组件 NgMonitoring”无法启用功能**
@@ -127,15 +188,15 @@ SET GLOBAL tidb_enable_top_sql = 0;
**2. 该功能开启后对集群是否有性能影响?**
-该功能对集群性能有轻微影响。根据我们的测算,该功能对集群的平均性能影响小于 3%。
+开启 Top SQL 对集群性能有轻微影响。根据测算,该功能对集群的平均性能影响小于 3%。如果你同时开启了 TiKV 网络 IO 采集(多维度),还会额外增加一定的存储和查询开销。
**3. 该功能目前是什么状态?**
该功能是正式特性,在生产环境中可用。
-**4. 界面中显示的其他语句(Other Statements)是什么意思?**
+**4. 界面中的 `Others` 是什么意思?**
-其他所有非 Top 5 语句产生的 CPU 开销或执行情况都会被统计在该项中。你可以基于这一项了解 Top 5 的 SQL 语句开销在整体所有 SQL 语句的 CPU 开销中的比例。
+`Others` 表示当前排序维度下所有非 Top N 记录的汇总结果。你可以基于这一项了解 Top N 记录在整体负载中的占比。
**5. Top SQL 展示的 CPU 开销总和与进程的实际 CPU 开销是什么关系?**
@@ -143,8 +204,21 @@ SET GLOBAL tidb_enable_top_sql = 0;
**6. Top SQL 图表的纵坐标是什么意思?**
-代表消耗 CPU 资源的多少。消耗资源越多的 SQL 语句,该值越大。在绝大多数情况下,你都不需要关心纵坐标具体数值的含义。
+Top SQL 图表纵坐标表示当前排序维度下的资源消耗大小。
+
+- 选择 `Order By CPU` 时,纵坐标表示 CPU 耗时。
+- 选择 `Order By Network` 时,纵坐标表示网络字节数。
+- 选择 `Order By Logical IO` 时,纵坐标表示逻辑 IO 字节数。
**7. 还没有执行完毕的 SQL 语句会被统计到吗?**
-会。Top SQL 图表上所展示的每一时刻 CPU 开销比例即为这一时刻所有正在运行的 SQL 语句的 CPU 开销情况。
+会。TiDB Dashboard 会统计 Top SQL 开启后所有正在运行或已经执行完成的 SQL 的资源消耗,因此尚未执行完毕的 SQL 也会被统计在内。
+
+**8. 为什么看不到 `Order By Network`、`Order By Logical IO` 或 `By Region` 的新数据?**
+
+这些视图依赖 TiKV 网络 IO 采集(多维度)。请确认以下事项:
+
+- 你当前选择的是 TiKV 实例。
+- Top SQL 设置面板中的**开启 TiKV 网络 IO 采集(多维度)**已经打开。
+- 集群中的相关 TiKV 节点都已成功开启该配置;如果只有部分节点开启,Top SQL 页面会提示新数据可能不完整。
+- 如果是新扩容的 TiKV 节点,需要重新在 Top SQL 设置面板中手工操作一次 **开启 TiKV 网络 IO 采集(多维度)** 开关并保存;如果希望后续扩容节点自动生效,请在 TiUP 的 TiKV 默认配置中同步开启 `resource-metering.enable-network-io-collection`。
diff --git a/media/dashboard/top-sql-access.png b/media/dashboard/top-sql-access.png
index 62a14c98b07c..03d0bd067684 100644
Binary files a/media/dashboard/top-sql-access.png and b/media/dashboard/top-sql-access.png differ
diff --git a/media/dashboard/top-sql-details.png b/media/dashboard/top-sql-details.png
index c38be5bd5778..1238253c8e32 100644
Binary files a/media/dashboard/top-sql-details.png and b/media/dashboard/top-sql-details.png differ
diff --git a/media/dashboard/top-sql-settings-enable-tikv-network-io.png b/media/dashboard/top-sql-settings-enable-tikv-network-io.png
new file mode 100644
index 000000000000..a1108241d7b2
Binary files /dev/null and b/media/dashboard/top-sql-settings-enable-tikv-network-io.png differ
diff --git a/media/dashboard/top-sql-usage-agg-by-db-detail.png b/media/dashboard/top-sql-usage-agg-by-db-detail.png
index 116cbd055bab..94b285958ab1 100644
Binary files a/media/dashboard/top-sql-usage-agg-by-db-detail.png and b/media/dashboard/top-sql-usage-agg-by-db-detail.png differ
diff --git a/media/dashboard/top-sql-usage-change-timerange.png b/media/dashboard/top-sql-usage-change-timerange.png
index ee92126357a9..b1b80644d211 100644
Binary files a/media/dashboard/top-sql-usage-change-timerange.png and b/media/dashboard/top-sql-usage-change-timerange.png differ
diff --git a/media/dashboard/top-sql-usage-chart.png b/media/dashboard/top-sql-usage-chart.png
index 7817a7f09e46..7fce9778d1f8 100644
Binary files a/media/dashboard/top-sql-usage-chart.png and b/media/dashboard/top-sql-usage-chart.png differ
diff --git a/media/dashboard/top-sql-usage-refresh.png b/media/dashboard/top-sql-usage-refresh.png
index 1e365fd48092..815ebf5ddf21 100644
Binary files a/media/dashboard/top-sql-usage-refresh.png and b/media/dashboard/top-sql-usage-refresh.png differ
diff --git a/media/dashboard/top-sql-usage-select-agg-by.png b/media/dashboard/top-sql-usage-select-agg-by.png
index 8d88f81d757a..967de9aef27c 100644
Binary files a/media/dashboard/top-sql-usage-select-agg-by.png and b/media/dashboard/top-sql-usage-select-agg-by.png differ
diff --git a/media/dashboard/top-sql-usage-select-instance.png b/media/dashboard/top-sql-usage-select-instance.png
index 227679120202..3308b2724398 100644
Binary files a/media/dashboard/top-sql-usage-select-instance.png and b/media/dashboard/top-sql-usage-select-instance.png differ
diff --git a/media/dashboard/top-sql-usage-select-order-by.png b/media/dashboard/top-sql-usage-select-order-by.png
new file mode 100644
index 000000000000..c9c2a621d7e4
Binary files /dev/null and b/media/dashboard/top-sql-usage-select-order-by.png differ
diff --git a/tikv-configuration-file.md b/tikv-configuration-file.md
index 72362c885c7a..d8b2fb58df5a 100644
--- a/tikv-configuration-file.md
+++ b/tikv-configuration-file.md
@@ -2675,6 +2675,21 @@ Raft Engine 相关的配置项。
+ 在默认的一个 TSO 物理时钟更新周期内 (50ms),PD 最多提供 262144 个 TSO,超过这个数量后 PD 会暂缓 TSO 请求的处理。这个配置用于避免 PD 的 TSO 消耗殆尽、影响其他业务的使用。如果增大这个参数,建议同时减小 PD 的 [`tso-update-physical-interval`](/pd-configuration-file.md#tso-update-physical-interval) 参数,以获得足够的 TSO。
+ 默认值:8192
+## resource-metering
+
+资源计量 (Resource Metering) 相关的配置项。
+
+### `enable-network-io-collection` 从 v8.5.6 开始引入
+
++ 是否在 [Top SQL](dashboard/top-sql.md) 中额外采集 TiKV 网络流量和逻辑 I/O 信息。
++ 开启后,TiKV 会在请求处理过程中额外记录网络入站字节数、网络出站字节数、逻辑读字节数和逻辑写字节数。
++ 在资源消耗上报时,TiKV 会同时考虑 CPU 时间、网络流量和逻辑 I/O 来筛选 Top N 记录,并额外按 Region 维度上报这些统计结果,便于更细粒度地分析热点请求或资源消耗来源。
++ 默认值:false
+
+> **注意:**
+>
+> 逻辑 I/O 指请求在 TiKV 存储层处理的逻辑数据量,例如读取过程中扫描或处理的数据量,以及写请求自身的逻辑写入字节数;物理 I/O 指底层存储设备实际发生的磁盘读写流量,会受到 block cache、compaction、flush 等因素影响。因此,逻辑 I/O 与实际物理 I/O 并不等价,也不能直接一一对应。
+
## resource-control
资源控制 (Resource Control) 在 TiKV 存储层相关的配置项。