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-sizerows 或者 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。