Skip to content

Commit 1ae17b9

Browse files
authored
Add cpu and traffic into performance overview (#19676)
1 parent dcc852a commit 1ae17b9

6 files changed

+144
-68
lines changed

dashboard/dashboard-monitoring.md

+72-52
Original file line numberDiff line numberDiff line change
@@ -21,99 +21,119 @@ summary: 介绍如何通过 TiDB Dashboard 监控页面查看 Performance Overvi
2121

2222
Performance Overview 面板按总分结构对 TiDB、TiKV 和 PD 的性能指标进行了编排组织,包含以下三部分内容:
2323

24-
- 总的概览:数据库时间和 SQL 执行时间概览。通过颜色优化法,你可以快速识别数据库负载特征和性能瓶颈。
25-
- 资源负载:关键指标和资源利用率,包含数据库 QPS、应用和数据库的连接信息和请求命令类型、数据库内部 TSO 和 KV 请求 OPS、TiDB 和 TiKV 的资源使用概况。
26-
- 自上而下的延迟分解:Query 延迟和连接空闲时间对比、Query 延迟分解、execute 阶段 TSO 请求和 KV 请求的延迟、TiKV 内部写延迟的分解等。
24+
- **总体概览**:数据库时间和 SQL 执行时间概览。通过颜色优化法,你可以快速识别数据库负载特征和性能瓶颈。
25+
- **资源负载**:关键指标和资源利用率,包含数据库 QPS、应用和数据库的连接信息和请求命令类型、数据库内部 TSO 和 KV 请求 OPS、TiDB 和 TiKV 的资源使用概况。
26+
- **自上而下的延迟分解**:Query 延迟和连接空闲时间对比、Query 延迟分解、execute 阶段 TSO 请求和 KV 请求的延迟、TiKV 内部写延迟的分解等。
2727

2828
以下为 Performance Overview 面板监控说明:
2929

3030
### Database Time by SQL Type
3131

32-
- database time: 每秒的总数据库时间
33-
- sql_type: 每种 SQL 语句每秒消耗的数据库时间
32+
- `database time`每秒的总数据库时间
33+
- `sql_type`每种 SQL 语句每秒消耗的数据库时间
3434

3535
### Database Time by SQL Phase
3636

37-
- database time: 每秒的总数据库时间
38-
- get token/parse/compile/execute: 4 个 SQL 处理阶段每秒消耗的数据库时间
37+
- `database time`每秒的总数据库时间
38+
- `get token/parse/compile/execute`4 个 SQL 处理阶段每秒消耗的数据库时间
3939

4040
execute 执行阶段为绿色,其他三个阶段偏红色系,如果非绿色的颜色占比明显,意味着在执行阶段之外数据库消耗了过多时间,需要进一步分析根源。
4141

4242
### SQL Execute Time Overview
4343

44-
- execute time: execute 阶段每秒消耗的数据库时间
45-
- tso_wait: execute 阶段每秒同步等待 TSO 的时间
46-
- kv request type: execute 阶段每秒等待每种 KV 请求类型的时间,总的 KV request 等待时间可能超过 execute time,因为 KV request 是并发的
44+
- `execute time`execute 阶段每秒消耗的数据库时间
45+
- `tso_wait`execute 阶段每秒同步等待 TSO 的时间
46+
- `kv request type`execute 阶段每秒等待每种 KV 请求类型的时间,总的 KV 请求等待时间可能超过 execute time,因为 KV 请求是并发的
4747

4848
绿色系标识代表常规的写 KV 请求(例如 Prewrite 和 Commit),蓝色系标识代表常规的读 KV 请求,其他色系标识需要注意的问题。例如,悲观锁加锁请求为红色,TSO 等待为深褐色。如果非蓝色系或者非绿色系占比明显,意味着执行阶段存在异常的瓶颈。例如,当发生严重锁冲突时,红色的悲观锁时间会占比明显;当负载中 TSO 等待的消耗时间过长时,深褐色会占比明显。
4949

5050
### QPS
5151

52-
QPS:按 `SELECT``INSERT``UPDATE` 等类型统计所有 TiDB 实例上每秒执行的 SQL 语句数量
52+
- `QPS`:按 `SELECT``INSERT``UPDATE` 等类型统计所有 TiDB 实例上每秒执行的 SQL 语句数量
5353

5454
### CPS By Type
5555

56-
CPS By Type:按照类型统计所有 TiDB 实例每秒处理的命令数(Command Per Second)
56+
- `CPS By Type`:按照类型统计所有 TiDB 实例每秒处理的命令数(Command Per Second)
5757

5858
### Queries Using Plan Cache OPS
5959

60-
Queries Using Plan Cache OPS:所有 TiDB 实例每秒使用 Plan Cache 的查询数量
60+
- `Queries Using Plan Cache OPS`:所有 TiDB 实例每秒使用 Plan Cache 的查询数量
6161

6262
### KV/TSO Request OPS
6363

64-
- kv request total: 所有 TiDB 实例每秒总的 KV 请求数量
65-
- kv request by type: `Get``Prewrite``Commit` 等类型统计在所有 TiDB 实例每秒的请求数据
66-
- tso - cmd:所有 TiDB 实例每秒发送的 gRPC 请求的数量,每个 gRPC 请求包含一批 (batch) TSO 请求
67-
- tso - request:所有 TiDB 实例每秒的 TSO 请求数量
64+
- `kv request total`所有 TiDB 实例每秒总的 KV 请求数量
65+
- `kv request by type``Get``Prewrite``Commit` 等类型统计在所有 TiDB 实例每秒的请求数据
66+
- `tso - cmd`:所有 TiDB 实例每秒发送的 gRPC 请求的数量,每个 gRPC 请求包含一批 (batch) TSO 请求
67+
- `tso - request`:所有 TiDB 实例每秒的 TSO 请求数量
6868

6969
通常 tso - request 除以 tso - cmd 等于 TSO 请求 batch 的平均大小。
7070

7171
### Connection Count
7272

73-
- total:所有 TiDB 的连接数
74-
- active connections:所有 TiDB 总的活跃连接数
75-
- 各个 TiDB 的连接数
73+
- `total`:所有 TiDB 的连接数
74+
- `active connections`:所有 TiDB 总的活跃连接数
75+
- 各个 TiDB 实例的连接数
7676

77-
### TiDB CPU
77+
### TiDB CPU/Memory
7878

79-
- avg:所有 TiDB 实例平均 CPU 利用率
80-
- delta:所有 TiDB 实例中最大 CPU 利用率减去所有 TiDB 实例中最小 CPU 利用率
81-
- max:所有 TiDB 实例中最大 CPU 利用率
79+
- `CPU-Avg`:所有 TiDB 实例的平均 CPU 利用率
80+
- `CPU-Delta`:所有 TiDB 实例中最大 CPU 利用率减去所有 TiDB 实例中最小 CPU 利用率
81+
- `CPU-Max`:所有 TiDB 实例中最大 CPU 利用率
82+
- `CPU-Quota`:TiDB 可以使用的 CPU 核数
83+
- `Mem-Max`:所有 TiDB 实例中最大内存利用率
8284

83-
### TiKV CPU/IO MBps
85+
### TiKV CPU/Memory
8486

85-
- CPU-Avg:所有 TiKV 实例平均 CPU 利用率
86-
- CPU-Delta:所有 TiKV 实例中最大 CPU 利用率减去所有 TiKV 实例中最小 CPU 利用率
87-
- CPU-MAX:所有 TiKV 实例中最大 CPU 利用率
88-
- IO-Avg:所有 TiKV 实例平均 MBps
89-
- IO-Delta:所有 TiKV 实例中最大 MBps 减去所有 TiKV 实例中最小 MBps
90-
- IO-MAX:所有 TiKV 实例中最大 MBps
87+
- `CPU-Avg`:所有 TiKV 实例的平均 CPU 利用率
88+
- `CPU-Delta`:所有 TiKV 实例中最大 CPU 利用率减去所有 TiKV 实例中最小 CPU 利用率
89+
- `CPU-Max`:所有 TiKV 实例中最大 CPU 利用率
90+
- `CPU-Quota`:TiKV 可以使用的 CPU 核数
91+
- `Mem-Max`:所有 TiKV 实例中最大内存利用率
92+
93+
### PD CPU/Memory
94+
95+
- `CPU-Max`:所有 PD 实例中最大 CPU 利用率
96+
- `CPU-Quota`:PD 可以使用的 CPU 核数
97+
- `Mem-Max`:所有 PD 实例中最大内存利用率
98+
99+
### Read Traffic
100+
101+
- `TiDB -> Client`:从 TiDB 到客户端的出站流量统计
102+
- `Rocksdb -> TiKV`:TiKV 在存储层读操作过程中从 RocksDB 读取的数据流量
103+
104+
### Write Traffic
105+
106+
- `Client -> TiDB`:从客户端到 TiDB 的入站流量统计
107+
- `TiDB -> TiKV: general`:前台事务从 TiDB 写入到 TiKV 的速率
108+
- `TiDB -> TiKV: internal`:后台事务从 TiDB 写入到 TiKV 的速率
109+
- `TiKV -> Rocksdb`:从 TiKV 写入到 RocksDB 的流量
110+
- `RocksDB Compaction`:RocksDB compaction 操作产生的总读写 I/O 流量。
91111

92112
### Duration
93113

94-
- Duration:执行时间解释
114+
- `Duration`:执行时间解释
95115

96116
- 从客户端网络请求发送到 TiDB,到 TiDB 执行结束后返回给客户端的时间。一般情况下,客户端请求都是以 SQL 语句的形式发送,但也可以包含 `COM_PING``COM_SLEEP``COM_STMT_FETCH``COM_SEND_LONG_DATA` 之类的命令执行时间。
97117
- 由于 TiDB 支持 Multi-Query,因此,客户端可以一次性发送多条 SQL 语句,如 `select 1; select 1; select 1;`。此时的执行时间是所有 SQL 语句执行完成的总时间。
98118

99-
- avg:所有请求命令的平均执行时间
100-
- 99: 所有请求命令的 P99 执行时间
101-
- avg by type:按 `SELECT``INSERT``UPDATE` 类型统计所有 TiDB 实例上所有请求命令的平均执行时间
119+
- `avg`:所有请求命令的平均执行时间
120+
- `99`所有请求命令的 P99 执行时间
121+
- `avg by type`:按 `SELECT``INSERT``UPDATE` 类型统计所有 TiDB 实例上所有请求命令的平均执行时间
102122

103123
### Connection Idle Duration
104124

105125
Connection Idle Duration 指空闲连接的持续时间。
106126

107-
- avg-in-txn:处于事务中,空闲连接的平均持续时间
108-
- avg-not-in-txn:没有处于事务中,空闲连接的平均持续时间
109-
- 99-in-txn:处于事务中,空闲连接的 P99 持续时间
110-
- 99-not-in-txn:没有处于事务中,空闲连接的 P99 持续时间
127+
- `avg-in-txn`:处于事务中,空闲连接的平均持续时间
128+
- `avg-not-in-txn`:没有处于事务中,空闲连接的平均持续时间
129+
- `99-in-txn`:处于事务中,空闲连接的 P99 持续时间
130+
- `99-not-in-txn`:没有处于事务中,空闲连接的 P99 持续时间
111131

112132
### Parse Duration、Compile Duration 和 Execute Duration
113133

114-
- Parse Duration:SQL 语句解析耗时统计
115-
- Compile Duration:将解析后的 SQL AST 编译成执行计划的耗时
116-
- Execution Duration:执行 SQL 语句执行计划耗时
134+
- `Parse Duration`:SQL 语句解析耗时统计
135+
- `Compile Duration`:将解析后的 SQL AST 编译成执行计划的耗时
136+
- `Execution Duration`:执行 SQL 语句执行计划耗时
117137

118138
这三个时间指标均包含均所有 TiDB 实例的平均值和 P99 值。
119139

@@ -127,25 +147,25 @@ Connection Idle Duration 指空闲连接的持续时间。
127147

128148
### PD TSO Wait/RPC Duration
129149

130-
- wait - avg:所有 TiDB 实例等待从 PD 返回 TSO 的平均时间
131-
- rpc - avg:所有 TiDB 实例从向 PD 发送获取 TSO 的请求到接收到 TSO 的平均耗时
132-
- wait - 99:所有 TiDB 实例等待从 PD 返回 TSO 的 P99 时间
133-
- rpc - 99:所有 TiDB 实例从向 PD 发送获取 TSO 的请求到接收到 TSO 的 P99 耗时
150+
- `wait - avg`:所有 TiDB 实例等待从 PD 返回 TSO 的平均时间
151+
- `rpc - avg`:所有 TiDB 实例从向 PD 发送获取 TSO 的请求到接收到 TSO 的平均耗时
152+
- `wait - 99`:所有 TiDB 实例等待从 PD 返回 TSO 的 P99 时间
153+
- `rpc - 99`:所有 TiDB 实例从向 PD 发送获取 TSO 的请求到接收到 TSO 的 P99 耗时
134154

135155
### Storage Async Write Duration、Store Duration 和 Apply Duration
136156

137-
- Storage Async Write Duration:异步写所花费的时间
138-
- Store Duration:异步写 Store 步骤所花费的时间
139-
- Apply Duration:异步写 Apply 步骤所花费的时间
157+
- `Storage Async Write Duration`:异步写所花费的时间
158+
- `Store Duration`:异步写入过程中,在存储循环 (store loop) 中所花费的时间
159+
- `Apply Duration`:异步写入过程中,在应用循环 (apply loop) 中所花费的时间
140160

141161
这三个时间指标都包含所有 TiKV 实例的平均值和 P99 值
142162

143163
平均 Storage async write duration = 平均 Store Duration + 平均 Apply Duration
144164

145165
### Append Log Duration、Commit Log Duration 和 Apply Log Duration
146166

147-
- Append Log Duration:Raft append 日志所花费的时间
148-
- Commit Log Duration:Raft commit 日志所花费的时间
149-
- Apply Log Duration:Raft apply 日志所花费的时间
167+
- `Append Log Duration`:Raft append 日志所花费的时间
168+
- `Commit Log Duration`:Raft commit 日志所花费的时间
169+
- `Apply Log Duration`:Raft apply 日志所花费的时间
150170

151171
这三个时间指标均包含所有 TiKV 实例的平均值和 P99 值。

media/performance/titan_disable.png

120 KB
Loading

media/performance/titan_enable.png

108 KB
Loading

media/performance/tpcc_cpu_memory.png

549 KB
Loading
442 KB
Loading

performance-tuning-methods.md

+72-16
Original file line numberDiff line numberDiff line change
@@ -209,34 +209,90 @@ StmtPrepare 每秒执行次数远大于 StmtClose,说明应用程序存在 pre
209209
- 每秒总的 KV 请求数据是 35.5,Cop 请求次数是每秒 9.3。
210210
- KV 处理时间主要来源为 `Cop-internal_stats`,说明 Cop 请求来源于内部的 analyze 操作。
211211

212-
#### TiDB CPU,以及 TiKV CPU 和 IO 使用情况
212+
#### CPU 和内存使用情况
213213

214-
在 TiDB CPU 和 TiKV CPU/IO MBps 这两个面板中,你可以观察到 TiDB 和 TiKV 的逻辑 CPU 使用率和 IO 吞吐,包含平均、最大和 delta(最大 CPU 使用率减去最小 CPU 使用率),从而用来判定 TiDB 和 TiKV 总体的 CPU 使用率
214+
在 TiDB、TiKV 和 PD 的 CPU/Memory 面板中,你可以监控它们各自的逻辑 CPU 使用率和内存消耗情况,例如平均 CPU 利用率、最大 CPU 利用率、CPU 利用率差值(最大 CPU 使用率减去最小 CPU 使用率)、CPU Quota(可以使用的 CPU 核数)以及最大内存使用率。基于这些指标,你可以确定 TiDB、TiKVPD 的整体资源使用情况
215215

216-
- 通过 `delta` 值,你可以判断 TiDB 是否存在 CPU 使用负载不均衡(通常伴随着应用连接不均衡),TiKV 是否存在热点
217-
- 通过 TiDB 和 TiKV 的资源使用概览,你可以快速判断集群是否存在资源瓶颈,最需要扩容的组件是 TiDB 还是 TiKV
216+
- 根据 `delta` 值,你可以判断 TiDB 或 TiKV 的 CPU 使用是否存在不均衡的情况。对于 TiDB,较高的 `delta` 值通常意味着应用程序的连接在 TiDB 实例之间分布不均衡;对于 TiKV,较高的 `delta` 值通常意味着集群中存在读写热点
217+
- 通过 TiDB、TiKVPD 的资源使用概览,你可以快速判断集群是否存在资源瓶颈,以及是否需要对 TiKV、TiDB 或 PD 进行扩容或者硬件配置升级
218218

219-
**示例 1:TiDB 资源使用率高**
219+
**示例 1:TiKV 资源使用率高**
220220

221-
下图负载中,每个 TiDB 和 TiKV 配置 8 CPU。
221+
在以下 TPC-C 负载中,每个 TiDB 和 TiKV 配置了 16 核 CPU,PD 配置了 4 核 CPU。
222222

223-
![TPC-C](/media/performance/tidb_high_cpu.png)
223+
![TPC-C](/media/performance/tpcc_cpu_memory.png)
224224

225-
- TiDB 平均 CPU 为 575%。最大 CPU 为 643%,delta CPU 为 136%。
226-
- TiKV 平均 CPU 为 146%,最大 CPU 215%。delta CPU 为 118%。TiKV 的平均 IO 吞吐为 9.06 MB/s,最大 IO 吞吐为 19.7 MB/s,delta IO 吞吐为 17.1 MB/s。
225+
- TiDB 的平均、最大和 delta CPU 使用率分别为 761%、934% 和 322%。最大内存使用率为 6.86 GiB。
226+
- TiKV 的平均、最大和 delta CPU 使用率分别为 1343%、1505% 和 283%。最大内存使用率为 27.1 GiB。
227+
- PD 的最大 CPU 使用率为 59.1%。最大内存使用率为 221 MiB。
227228

228-
由此可以判断,TiDB 的 CPU 消耗明显更高,并接近于 8 CPU 的瓶颈,可以考虑扩容 TiDB
229+
显然,TiKV 消耗了更多的 CPU,在 TPC-C 这样的写密集场景中,这是符合预期的。建议通过扩容 TiKV 来提升性能
229230

230-
**示例 2:TiKV 资源使用率高**
231+
#### 数据流量
231232

232-
下图 TPC-C 负载中,每个 TiDB 和 TiKV 配置 16 CPU
233+
Read traffic 和 Write traffic 面板可以帮助你深入分析 TiDB 集群内部的流量模式,全面监控从客户端到数据库以及内部组件之间的数据流情况
233234

234-
![TPC-C](/media/performance/tpcc_cpu_io.png)
235+
- Read traffic (读流量)
236+
- `TiDB -> Client`:从 TiDB 到客户端的出站流量统计
237+
- `Rocksdb -> TiKV`:TiKV 在存储层读操作期间从 RocksDB 读取的数据流量
235238

236-
- TiDB 平均 CPU 为 883%。最大 CPU 为 962%,delta CPU 为 153%。
237-
- TiKV 平均 CPU 为 1288%,最大 CPU 1360%。delta CPU 为 126%。TiKV 的平均 IO 吞吐为 130 MB/s,最大 IO 吞吐为 153 MB/s,delta IO 吞吐为 53.7 MB/s。
239+
- Write traffic (写流量)
240+
- `Client -> TiDB`:从客户端到 TiDB 的入站流量统计
241+
- `TiDB -> TiKV: general`:前台事务从 TiDB 写入到 TiKV 的速率
242+
- `TiDB -> TiKV: internal`:内部事务从 TiDB 写入到 TiKV 的速率
243+
- `TiKV -> Rocksdb`:从 TiKV 到 RocksDB 的写操作流量
244+
- `RocksDB Compaction`:RocksDB compaction 操作产生的总读写 I/O 流量。如果 `RocksDB Compaction` 明显高于 `TiKV -> Rocksdb`,且你的平均行大小高于 512 字节,则可以进行以下配置以减少 compaction I/O 流量:启用 Titan,将 `min-blob-size` 设置为 `"512B"``"1KB"`,将 `blob-file-compression` 设置为 `"zstd"`
238245

239-
由此可以判断,TiKV 的 CPU 消耗更高,因为 TPC-C 是一个写密集场景,这是正常现象,可以考虑扩容 TiKV 节点提升性能。
246+
```toml
247+
[rocksdb.titan]
248+
enabled = true
249+
[rocksdb.defaultcf.titan]
250+
min-blob-size = "1KB"
251+
blob-file-compression = "zstd"
252+
```
253+
254+
**示例 1:TPC-C 负载中的读写流量**
255+
256+
以下是 TPC-C 负载中读写流量的示例。
257+
258+
![TPC-C](/media/performance/tpcc_read_write_traffic.png)
259+
260+
- 读流量
261+
- `TiDB -> Client`:14.2 MB/s
262+
- `Rocksdb -> TiKV`:469 MB/s。注意,在提交事务之前,读操作(`SELECT` 语句)和写操作(`INSERT`、`UPDATE` 和 `DELETE` 语句)都需要从 RocksDB 读取数据到 TiKV。
263+
264+
- 写流量
265+
- `Client -> TiDB`:5.05 MB/s
266+
- `TiDB -> TiKV: general`:13.1 MB/s
267+
- `TiDB -> TiKV: internal`:5.07 KB/s
268+
- `TiKV -> Rocksdb`:109 MB/s
269+
- `RocksDB Compaction`:567 MB/s
270+
271+
![TPC-C](/media/performance/tpcc_read_write_traffic.png)
272+
273+
**示例 2:启用 Titan 前后的写流量**
274+
275+
以下示例展示了启用 Titan 前后的性能变化。对于 6 KiB 数据量的插入负载,Titan 显著降低了写流量和 compaction I/O,提高了 TiKV 的整体性能和资源利用率。
276+
277+
- 启用 Titan 前的写流量
278+
279+
- `Client -> TiDB`:510 MB/s
280+
- `TiDB -> TiKV: general`:187 MB/s
281+
- `TiDB -> TiKV: internal`:3.2 KB/s
282+
- `TiKV -> Rocksdb`:753 MB/s
283+
- `RocksDB Compaction`:10.6 GB/s
284+
285+
![Titan 禁用](/media/performance/titan_disable.png)
286+
287+
- 启用 Titan 后的写流量
288+
289+
- `Client -> TiDB`:586 MB/s
290+
- `TiDB -> TiKV: general`:295 MB/s
291+
- `TiDB -> TiKV: internal`:3.66 KB/s
292+
- `TiKV -> Rocksdb`:1.21 GB/s
293+
- `RocksDB Compaction`:4.68 MB/s
294+
295+
![Titan 启用](/media/performance/titan_enable.png)
240296

241297
### Query 延迟分解和关键的延迟指标
242298

0 commit comments

Comments
 (0)