DM 2.0-GA 性能测试报告
本报告记录了对 2.0-GA 版本的 DM 进行性能测试的目的、环境、场景和结果。
测试目的
该性能测试用于评估使用 DM 进行全量数据导入和增量数据复制的性能上限,并根据测试结果提供 DM 迁移任务的参考配置。
测试环境
测试机器信息
系统信息:
| 机器 IP | 操作系统 | 内核版本 | 文件系统类型 |
|---|---|---|---|
| 172.16.5.32 | CentOS Linux release 7.8.2003 | 3.10.0-957.el7.x86_64 | ext4 |
| 172.16.5.33 | CentOS Linux release 7.8.2003 | 3.10.0-957.el7.x86_64 | ext4 |
| 172.16.5.34 | CentOS Linux release 7.8.2003 | 3.10.0-957.el7.x86_64 | ext4 |
| 172.16.5.35 | CentOS Linux release 7.8.2003 | 3.10.0-957.el7.x86_64 | ext4 |
| 172.16.5.36 | CentOS Linux release 7.8.2003 | 3.10.0-957.el7.x86_64 | ext4 |
| 172.16.5.37 | CentOS Linux release 7.8.2003 | 3.10.0-957.el7.x86_64 | ext4 |
硬件信息:
| 类别 | 指标 |
|---|---|
| CPU | Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz, 40 Cores |
| 内存 | 128G, 8 * 16GB DIMM DDR4 2133 MHz |
| 磁盘 | Intel SSD DC P4800X 375G NVMe * 2 |
| 网卡 | 万兆网卡 |
其他:
- 服务器间网络延迟:rtt min/avg/max/mdev = 0.074/0.116/0.158/0.042 ms
集群拓扑
| 机器 IP | 部署的服务 |
|---|---|
| 172.16.5.32 | PD1, DM-worker1, DM-master |
| 172.16.5.33 | PD2, MySQL1 |
| 172.16.5.34 | PD3, TiDB |
| 172.16.5.35 | TiKV1(nvme0n1), TiKV2(nvme1n1) |
| 172.16.5.36 | TiKV3(nvme0n1), TiKV4(nvme1n1) |
| 172.16.5.37 | TiKV5(nvme0n1), TiKV6(nvme1n1) |
各服务版本信息
- MySQL 版本:5.7.31-log
- TiDB 版本:v4.0.7
- DM 版本:v2.0.0
- Sysbench 版本:1.0.17
测试场景
可以参考性能测试中介绍的测试场景,测试单个 MySQL 实例到 TiDB 的数据迁移: MySQL1 (172.16.5.33) -> DM-worker(172.16.5.32) -> TiDB (172.16.5.34)。
全量导入性能测试
可以参考全量导入性能测试用例中介绍的方法进行测试。
全量导入性能测试结果
在 mydumper 配置项中配置 threads 参数,可以通过 Dumpling 开启多线程并发导出,提高数据导出性能。
| 测试项 | 数据量 (G) | threads | rows | statement-size | 导出时间 (s) | 导出速度 (MB/s) |
|---|---|---|---|---|---|---|
| dump data | 38.1 | 32 | 320000 | 1000000 | 106.73 | 359.43 |
| 测试项 | 数据量 (G) | pool size | 每条插入语句包含的行数 | 事务执行最大延迟 (s) | 导入时间 (s) | 导入速度 (MB/s) |
|---|---|---|---|---|---|---|
| load data | 38.1 | 32 | 4878 | 20.95 | 1580.54 | 24.11 |
在 load 处理单元使用不同 pool size 的性能测试对比
该测试中使用 sysbench 全量导入的数据量为 3.78 GB,测试数据如下所示:
| load 处理单元 pool size | 事务执行最大延迟 (s) | 导入时间 (s) | 导入速度 (MB/s) | TiDB 99 duration (s) |
|---|---|---|---|---|
| 2 | 0.35 | 438 | 8.63 | 0.32 |
| 4 | 0.65 | 305 | 12.30 | 0.55 |
| 8 | 1.82 | 231 | 16.36 | 2.26 |
| 16 | 3.46 | 228 | 16.57 | 3.04 |
| 32 | 5.92 | 208 | 18.17 | 6.56 |
| 64 | 8.59 | 221 | 17.10 | 9.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.74 | 218 | 17.3 | 10.49 |
| 5006 | -s 1000000 -r 320000 | 5.92 | 208 | 18.1 | 6.56 |
| 2506 | -s 500000 -r 320000 | 3.07 | 222 | 17.0 | 2.32 |
| 1256 | -s 250000 -r 320000 | 2.01 | 230 | 16.4 | 1.87 |
| 629 | -s 125000 -r 320000 | 0.98 | 241 | 15.6 | 0.94 |
| 315 | -s 62500 -r 320000 | 0.51 | 245 | 15.4 | 0.45 |
增量复制性能测试用例
使用增量复制性能测试用例中介绍的方法进行测试。
增量复制性能测试结果
该性能测试中复制任务 sync 处理单元 worker-count 设置为 32,batch 大小设置为 100。
| 组件 | qps | tps | 95% 延迟 |
|---|---|---|---|
| MySQL | 38.65k | 38.65k | 1.10ms |
| DM binlog replication unit | 21.33k (单位时间内接收到的不被忽略的 binlog event 数量) | - | 66.75ms (事务执行时间) |
| TiDB | 21.90k (Begin/Commit 2.32k Insert 21.35k) | 3.52k | 95%: 5.2ms 99%: 8.3ms |
在 sync 处理单元使用不同并发度的性能测试对比
| sync 处理单元 worker-count 数 | DM qps | DM 事务执行最大延迟 (ms) | TiDB qps | TiDB 99 duration (ms) |
|---|---|---|---|---|
| 4 | 11.83k | 56 | 12.1k | 4 |
| 8 | 18.34k | 58 | 18.9k | 5 |
| 16 | 20.85k | 60 | 21.6k | 6 |
| 32 | 21.33k | 66 | 21.9k | 8 |
| 64 | 21.52k | 68 | 22.1k | 10 |
| 1024 | 20.45k | 85 | 50.5k | 52 |
不同数据分布的增量复制性能测试对比
| sysbench 语句类型 | DM qps | DM 事务执行最大延迟 (ms) | TiDB qps | TiDB 99 duration (ms) |
|---|---|---|---|---|
| insert_only | 21.33k | 66 | 21.9k | 8 |
| write_only | 10.2k | 87 | 11.2k | 8 |
推荐迁移任务参数配置
dump 处理单元
推荐每一条插入语句的大小在 200KB ~ 1MB 之间,相应每条语句包含的行数大约在 1000-5000(具体包含的语句行数与实际场景中每行数据大小有关)。
load 处理单元
推荐 pool-size 设置为 16。
sync 处理单元
推荐将 batch 设置为 100,worker-count 设置为 16 ~ 32。