DM 1.0-GA 性能测试报告

本报告记录了对 1.0-GA 版本的 DM 进行性能测试的目的、环境、场景和结果。

测试目的

该性能测试用于评估使用 DM 进行全量数据导入和增量数据复制的性能上限,并根据测试结果提供 DM 迁移任务的参考配置。

测试环境

测试机器信息

系统信息:

机器 IP操作系统内核版本文件系统类型
172.16.4.39CentOS Linux release 7.6.18103.10.0-957.1.3.el7.x86_64ext4
172.16.4.40CentOS Linux release 7.6.18103.10.0-957.1.3.el7.x86_64ext4
172.16.4.41CentOS Linux release 7.6.18103.10.0-957.1.3.el7.x86_64ext4
172.16.4.42CentOS Linux release 7.6.18103.10.0-957.1.3.el7.x86_64ext4
172.16.4.43CentOS Linux release 7.6.18103.10.0-957.1.3.el7.x86_64ext4
172.16.4.44CentOS Linux release 7.6.18103.10.0-957.1.3.el7.x86_64ext4

硬件信息:

类别指标
CPU40 vCPUs, Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
内存192GB, 12 条 16GB DIMM DDR4 2133 MHz
磁盘Intel DC P4510 4TB NVMe PCIe 3.0
网卡万兆网卡

其他:

  • 服务器间网络延迟:rtt min/avg/max/mdev = 0.074/0.088/0.121/0.019 ms

集群拓扑

机器 IP部署的服务
172.16.4.39PD1, DM-worker1, DM-master
172.16.4.40PD2, MySQL1
172.16.4.41PD3, TiDB
172.16.4.42TiKV1
172.16.4.43TiKV2
172.16.4.44TiKV3

各服务版本信息

  • MySQL 版本: 5.7.27-log
  • TiDB 版本: v4.0.0-alpha-198-gbde7f440e
  • DM 版本: v1.0.1
  • Sysbench 版本: 1.0.17

测试场景

迁移数据流

MySQL1 (172.16.4.40) -> DM-worker1 (172.16.4.39) -> TiDB (172.16.4.41)

公共配置信息

迁移数据表结构

CREATE TABLE `sbtest` ( `id` int(11) NOT NULL AUTO_INCREMENT, `k` int(11) NOT NULL DEFAULT '0', `c` char(120) CHARSET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '', `pad` char(60) CHARSET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `k_1` (`k`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin

数据库配置

使用 TiDB Ansible 部署 TiDB 测试集群,所有配置使用 TiDB Ansible 提供的默认配置。

全量导入性能测试用例

测试过程

  • 部署测试环境
  • 使用 sysbench 在上游创建测试表,并生成全量导入的测试数据
  • full 模式下启动 DM 迁移任务

sysbench 生成数据的命令如下所示:

sysbench --test=oltp_insert --tables=4 --mysql-host=172.16.4.40 --mysql-port=3306 --mysql-user=root --mysql-db=dm_benchmark --db-driver=mysql --table-size=50000000 prepare

全量导入性能测试结果

mydumpers 中使用 --rows 选项可以开启单表多线程并发导出(当前 mydumpers 在 MySQL 的单表并发会优先选出一列做拆分基准,选择优先级为主键>唯一索引>普通索引,选出目标列后需保证该列为 INT 类型;针对 TiDB 的并发导出则会优先尝试 _tidb_rowid 列),以下的第一项测试用于验证开启单表并发导出可以提高数据导出性能。

测试项导出线程数mydumpers extra-args 参数导出速度 (MB/s)
开启单表并发导出32"--rows 320000 --regex '^sbtest.*'"191.03
不开启单表并发导出4"--regex '^sbtest.*'"72.22
测试项事务执行延迟 (s)每条插入语句包含的行数导入数据量 (GB)导入时间 (s)导入速度 (MB/s)
load data1.737487838.142346.916.64

在 load 处理单元使用不同 pool size 的性能测试对比

该测试中全量导入的数据量为 3.78 GB,使用以下 sysbench 命令生成:

sysbench --test=oltp_insert --tables=4 --mysql-host=172.16.4.40 --mysql-port=3306 --mysql-user=root --mysql-db=dm_benchmark --db-driver=mysql --table-size=5000000 prepare
load 处理单元 pool size事务执行时间 (s)导入时间 (s)导入速度 (MB/s)TiDB 99 duration (s)
20.250425.99.10.23
40.523360.110.70.41
80.986267.014.50.93
162.022265.914.52.68
323.778262.314.76.39
647.452281.913.78.00

导入数据时每条插入语句包含行数不同的情况下的性能测试对比

该测试中全量导入的数据量为 3.78 GB,load 处理单元 pool-size 大小为 32。插入语句包含行数通过 dump 处理单元的 --statement-size 来控制。

每条语句中包含的行数mydumpers extra-args 参数事务执行时间 (s)导入时间 (s)导入速度 (MB/s)TiDB 99 duration (s)
7426-s 1500000 -r 3200006.982258.315.010.34
4903-s 1000000 -r 3200003.778262.314.76.39
2470-s 500000 -r 3200001.962271.3614.32.00
1236-s 250000 -r 3200001.911283.313.71.50
618-s 125000 -r 3200000.683299.912.90.73
310-s 62500 -r 3200000.413322.612.00.49

增量复制性能测试用例

测试过程

  • 部署测试环境
  • 使用 sysbench 在上游创建测试表,并生成全量导入的测试数据
  • all 模式下启动 DM 迁移任务,等待迁移任务进入 sync 迁移阶段
  • 使用 sysbench 在上游持续生成增量数据,通过 query-status 命令观测 DM 的复制状态,通过 Grafana 观测 DM 和 TiDB 的监控指标。

增量复制性能测试结果

上游 sysbench 生成增量数据命令

sysbench --test=oltp_insert --tables=4 --num-threads=32 --mysql-host=172.17.4.40 --mysql-port=3306 --mysql-user=root --mysql-db=dm_benchmark --db-driver=mysql --report-interval=10 --time=1800 run

该性能测试中迁移任务 sync 处理单元 worker-count 设置为 32,batch 大小设置为 100。

组件qpstps95% 延迟
MySQL42.79k42.79k1.18ms
DM relay log unit-11.3MB/s45us (binlog 读延迟)
DM binlog replication unit22.97k (binlog event 接收qps,不包括忽略的 event)-20ms (事务执行时间)
TiDB31.30k (Begin/Commit 3.93k Insert 22.76k)4.16k95%: 6.4ms 99%: 9ms

在 sync 处理单元使用不同并发度的性能测试对比

sync 处理单元 worker-count 数DM 内部 job tpsDM 事务执行时间 (ms)TiDB qpsTiDB 99 duration (ms)
47074637.1k3
8146846414.9k4
16234865624.9k6
32233452829.2k10
64233023031.2k16
1024222257056.9k70

不同数据分布的增量复制性能测试对比

sysbench 语句类型DM relay log 持久化速率 (MB/s)DM 内部 job tpsDM 事务执行时间 (ms)TiDB qpsTiDB 99 duration (ms)
insert_only11.3233452829.2k10
write_only18.73347012934.6k11

推荐迁移任务参数配置

dump 处理单元

推荐每一条插入语句的大小在 200KB ~ 1MB 之间,相应每条语句包含的行数大约在 1000-5000(具体包含的语句行数与实际场景中每行数据大小有关)。

load 处理单元

推荐 pool-size 设置为 16。

sync 处理单元

推荐将 batch 设置为 100,worker-count 设置为 16 ~ 32。

下载 PDF
产品
TiDB
TiDB Cloud
© 2024 PingCAP. All Rights Reserved.
Privacy Policy.