DM 5.3.0 性能测试报告
本报告记录了对 5.3.0 版本的 DM 进行性能测试的目的、环境、场景和结果。
测试目的
该性能测试用于评估使用 DM 进行全量数据导入和增量数据复制的性能上限,并根据测试结果提供 DM 迁移任务的参考配置。
测试环境
测试机器信息
系统信息:
机器 IP | 操作系统 | 内核版本 | 文件系统类型 |
---|---|---|---|
172.16.6.1 | CentOS Linux release 7.8.2003 | 3.10.0-957.el7.x86_64 | ext4 |
172.16.6.2 | CentOS Linux release 7.8.2003 | 3.10.0-957.el7.x86_64 | ext4 |
172.16.6.3 | CentOS Linux release 7.8.2003 | 3.10.0-957.el7.x86_64 | ext4 |
硬件信息:
类别 | 指标 |
---|---|
CPU | Intel(R) Xeon(R) Silver 4214R CPU @ 2.40GHz, 48 Cores |
内存 | 192G, 12 * 16GB DIMM DDR4 2133 MHz |
磁盘 | INTEL SSDPE2KX040T8 4TB |
网卡 | 万兆网卡 |
其他:
- 服务器间网络延迟:rtt min/avg/max/mdev = 0.045/0.064/0.144/0.024 ms
集群拓扑
机器 IP | 部署的服务 |
---|---|
172.16.6.1 | PD1, TiDB1, TiKV1, MySQL1, DM-master1 |
172.16.6.2 | PD2, TiDB2, TiKV2, DM-worker1 |
172.16.6.3 | PD3, TiDB3, TiKV3 |
各服务版本信息
- MySQL 版本:5.7.36-log
- TiDB 版本:v5.2.1
- DM 版本:v5.3.0
- Sysbench 版本:1.1.0
测试场景
可以参考性能测试中介绍的测试场景,测试单个 MySQL 实例到 TiDB 的数据迁移: MySQL1 (172.16.6.1) -> DM-worker(172.16.6.2) -> TiDB(load balance) (172.16.6.4)。
全量导入性能测试
可以参考全量导入性能测试用例中介绍的方法进行测试。
全量导入性能测试结果
在 mydumper
配置项中配置 threads
参数,可以通过 Dumpling 开启多线程并发导出,提高数据导出性能。
测试项 | 数据量 (G) | threads | rows | statement-size | 导出时间 (s) | 导出速度 (MB/s) |
---|---|---|---|---|---|---|
dump data | 38.1 | 32 | 320000 | 1000000 | 45 | 846 |
测试项 | 数据量 (G) | pool size | 每条插入语句包含的行数 | 事务执行最大延迟 (s) | 导入时间 (s) | 导入速度 (MB/s) |
---|---|---|---|---|---|---|
load data | 38.1 | 32 | 4878 | 76 | 2740 | 13.9 |
在 load 处理单元使用不同 pool size 的性能测试对比
该测试中使用 sysbench
全量导入的数据量为 3.78 GB,测试数据如下所示:
load 处理单元 pool size | 事务执行最大延迟 (s) | 导入时间 (s) | 导入速度 (MB/s) | TiDB 99 duration (s) |
---|---|---|---|---|
2 | 0.71 | 397 | 9.5 | 0.61 |
4 | 1.21 | 363 | 10.4 | 1.03 |
8 | 3.30 | 279 | 13.5 | 2.11 |
16 | 5.56 | 200 | 18.9 | 3.04 |
32 | 6.92 | 218 | 17.3 | 6.56 |
64 | 8.59 | 231 | 16.3 | 8.62 |
导入数据时每条插入语句包含行数不同的情况下的性能测试对比
该测试中全量导入的数据量为 3.78 GB,load 处理单元 pool-size
大小为 32。插入语句包含行数通过 mydumper
配置项中的 statement-size
,rows
或者 extra-args
参数来控制。
每条语句中包含的行数 | mydumper extra-args 参数 | 事务执行最大延迟 (s) | 导入时间 (s) | 导入速度 (MB/s) | TiDB 99 duration (s) |
---|---|---|---|---|---|
7506 | -s 1500000 -r 320000 | 8.34 | 229 | 16.5 | 10.64 |
5006 | -s 1000000 -r 320000 | 6.12 | 218 | 17.3 | 7.23 |
2506 | -s 500000 -r 320000 | 4.27 | 232 | 16.2 | 3.24 |
1256 | -s 250000 -r 320000 | 2.25 | 235 | 16.0 | 1.92 |
629 | -s 125000 -r 320000 | 1.03 | 246 | 15.3 | 0.91 |
315 | -s 62500 -r 320000 | 0.63 | 249 | 15.1 | 0.44 |
增量复制性能测试用例
使用增量复制性能测试用例中介绍的方法进行测试。
增量复制性能测试结果
该性能测试中复制任务 sync
处理单元 worker-count
设置为 32,batch
大小设置为 100。
组件 | qps | tps | 95% 延迟 |
---|---|---|---|
MySQL | 40.65k | 40.65k | 1.10ms |
DM binlog replication unit | 29.1k (单位时间内接收到的不被忽略的 binlog event 数量) | - | 92ms (事务执行时间) |
TiDB | 32.0k (Begin/Commit 1.5k Insert 29.1k) | 3.72k | 95%: 6.2ms 99%: 9.3ms |
在 sync 处理单元使用不同并发度的性能测试对比
sync 处理单元 worker-count 数 | DM qps | DM 事务执行最大延迟 (ms) | TiDB qps | TiDB 99 duration (ms) |
---|---|---|---|---|
4 | 10.2 | 40 | 10.5k | 4 |
8 | 17.6k | 64 | 18.9k | 5 |
16 | 29.5k | 80 | 30.5k | 7 |
32 | 29.1k | 92 | 32.0k | 9 |
64 | 27.4k | 88 | 37.7k | 14 |
1024 | 22.9k | 85 | 57.5k | 25 |
不同数据分布的增量复制性能测试对比
sysbench 语句类型 | DM qps | DM 事务执行最大延迟 (ms) | TiDB qps | TiDB 99 duration (ms) |
---|---|---|---|---|
insert_only | 29.1k | 64 | 32.0k | 8 |
write_only | 23.5k | 296 | 24.2k | 18 |
推荐迁移任务参数配置
dump 处理单元
推荐每一条插入语句的大小在 200KB ~ 1MB 之间,相应每条语句包含的行数大约在 1000-5000(具体包含的语句行数与实际场景中每行数据大小有关)。
load 处理单元
推荐 pool-size
设置为 16 ~ 32。
sync 处理单元
推荐将 batch
设置为 100,worker-count
设置为 16 ~ 32。