阿里云DTS踩坑经验分享系列|全量迁移加速方法指南

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
简介: 阿里云数据传输服务DTS是一个便捷、高效的数据迁移和数据同步服务。一般而言,一个完整的DTS数据迁移任务主要包括预检查、结构迁移,全量迁移,增量迁移等阶段,其中全量迁移会将源数据库的存量数据全部迁移到目标数据库。面对各种各样的用户场景, 本文将重点介绍如何使用阿里云DTS实现全量数据迁移加速,以缩短迁移时间,确保数据迁移的效率和稳定性。

阿里云DTS作为数据世界高速传输通道的建造者,每周为您分享一个避坑技巧,助力数据之旅更加快捷、便利、安全。

点击立即体验MySQL->ClickHouse同步链路


导读

阿里云数据传输服务(Data Transmission Service,简称DTS)是一个便捷、高效的数据迁移和数据同步服务。一般而言,一个完整的DTS数据迁移任务主要包括预检查、结构迁移,全量迁移,增量迁移等阶段,其中全量迁移会将源数据库的存量数据全部迁移到目标数据库。面对各种各样的用户场景, 本文将重点介绍如何使用阿里云DTS实现全量数据迁移加速,以缩短迁移时间,确保数据迁移的效率和稳定性。

阿里云DTS全量迁移的工作原理

要对DTS全量迁移进行加速,首先要理解DTS全量迁移的工作原理。 如下图所示,DTS全量迁移主要包含三大模块:库表抓取模块,表切分模块,切片调度模块。其中库表抓取模块主要是根据 dblist 获取要迁移的库表,并从源库和目标库拉取这些表的表结构。表切分模块用于将每个表按照一定的大小切分成固定大小的切片。切片调度模块会启动若干source线程从源库拉取切片对应的数据, 放到DTS内部的内存队列中,并启动若干sink线程从内存队列中拉取切片对应的数据,写入到目标库中。然后在数

定位全量迁移慢的原因

根据服务数千客户的经验,大部分客户全量迁移较慢的原因为以下几点:

  • 用户认为全量慢,实际任务正常,只是用户数据量大,希望进行加速。
  • 任务实际上已经报错,但是因为在重试,任务并未失败,全量进度也停止了推进。用户误以为是全量慢。
  • 用户任务由于一些特殊场景,比如说大字段,目标端rt高等导致全量迁移速率不符合预期。

针对第一类问题,下文会介绍一些常见全量迁移加速方法,用户可根据这些方法进行尝试,而对于第二类问题,由于任务已经失败,用户一方面可以等任务停止重试后根据控制台上报错提示来采取相应的策略恢复任务,另外一方面可以提交工单找值班同学进行处理。针对第三类问题,我们需要先根据DTS任务日志,数据库状态等资源定位出导致全量慢的原因,再针对性的采取加速策略。

根据上面介绍的全量迁移原理, 全量迁移主要包括拉取库表结构,切片,从源库拉数据,向目标端写数据等步骤。导致全量慢的原因也可以从这四个方面进行分析。

拉表结构慢

一般而言,拉表结构都不会慢,但是也有例外。为了加速拉取表结构的速度, 目前DTS拉取库表结构是从information_schema 的相关视图中批量获取的。 但是当遇到需要迁移的表数量过大时,比如说达到几十万的量级,DTS执行这个批量拉取表结构的SQL时可能会卡住。这种case目前只能提工单,由DTS值班同学切换成 单个表获取表结构的方式。

切片慢

切片慢的原因是DTS 执行获取切片左右边界的sql时比较慢。常见的场景是用户配置任务时配置了过滤器,以实现只迁移满足条件的数据到目标端。DTS 切片时,会把这个过滤条件添加到切片sql的where条件中,  从而导致切片sql 的执行计划改变从而慢。如下所示, 用户希望只迁移2023年之后的数据, 切片SQL执行时先按照主键做排序(order by), 然后直接在主键上按顺序扫描,直到create_time>='2023-01-01 00:00:00的条数达到1000。由于create_time>='2023-01-01 00:00:00的分布都比较靠后,所以接近全表扫描,导致切片SQL执行慢。这种case目前也只能提工单,由DTS值班同学切换成切片时不加过滤条件的方式。

拉数据慢

拉数据慢的原因很多,比如说源库是自建库,源端RT较高, 再比如说表结构中有大字段(指text, longtext, blob等类型字段),都可能导致dts 从源库拉数据的sql执行时间较长。我们可以通过在DTS服务器上连接源库,在源库执行一些简单的sql, 根据sql的执行时间来大致判断源端的RT。 如果是网络原因导致的RT高,可找用户提高专线带宽,或者找网络同学排查具体网络问题。 如果是数据库原因导致的RT高,则需要数据库的相关值班同学介入调查。如果源库表结构中存在大字段,可适当调整切片大小和每批写入目标端的记录数大小,可通过观察全量迁移的RPS或者BPS指标多次尝试调整,目标就是在保证拉数据sql能执行得动以及全量不发生OOM的前提下,尽可能使全量迁移的bps或者rps更高。

写数据慢

写数据慢的场景比较常见,有可能是数据库的原因,也有可能是网络的原因,也有可能是DTS在特定场景下的默认参数设置不合理。一方面我们可以通过numen上的任务进程页面知道sink线程执行SQL的时间, 另外一方面也可以通过观察DTS日志知道DTS写一个bach需要的时间。根据sink sql执行时间,可以判断是否是写数据慢导致的全量迁移慢。如果确定是写数据慢,一方面可以对目标库做一些检查,比如说磁盘空间是否已满,目标库写入是否达到了性能瓶颈,目标端的RT,目标端是否存在锁表,表结构是否是宽表等等。另外一方面,可以参考如下的全量迁移加速方法,通过观察全量迁移的RPS或者BPS指标进行多次尝试调整。

全量迁移加速方法

根据以往的值班经验,可以尝试使用如下全量加速方法进行调整:

  • 如果是filter导致的切片慢,需要找值班同学切换成切片sql不加过滤条件的方式。
  • 当未迁移的表较少时, 可以将source.polling.schema.max.missed.times 设置为1减少负载均衡的等待。
  • 如果任务卡在切片,但是单个切片执行较快, 可提高切片线程数 dts.datamove.record.blasters 。
  • 在batch模式时,可以尝试提高读写线程数和单个batch的大小来提升全量迁移速度:
  • 读线程数:dts.datamove.record.pumper.readers
  • 写线程数:sink.task.number
  • batch的最小值 :dts.datamove.record.batch.size.min
  • batch的最大值:dts.datamove.record.batch.size.max
  • 在bulkcopy模式时,可以尝试提高mysql.bulk.copy.rows.per.transaction 参数来提升每次load data的数量。
  • 在DTS任务受到规格限制时, 可以尝试提高全量任务的内存大小和cpulimit, 来提升全量迁移速度。
  • 在一些全量极致加速的场景,可以把DTS任务切换到高规格的oxs机器,速度会比vpc机器更快。


快来关注

  1. 数据传输服务(Data Transmission Service,简称DTS)支持关系型数据库、NoSQL、大数据(OLAP)等数据源,集数据迁移、订阅、实时同步、校验功能于一体,能够解决公共云、混合云场景下,远距离、秒级异步数据传输难题。其底层基础设施采用阿里双11异地多活架构,为数千下游应用提供实时数据流,已在线上稳定运行7年之久,是一款沉淀了丰富实践经验的可靠产品。点击了解更多DTS相关信息
  2. 欢迎加入钉群讨论交流:

image.png

相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
相关文章
|
2月前
|
NoSQL 安全 容灾
阿里云DTS踩坑经验分享系列|Redis迁移、同步
阿里云数据传输服务DTS在帮助用户迁移Redis数据、同步数据时,在某些复杂场景下会出现报错,或者源库与目标库数据不一致的问题,给用户带来困扰。本文介绍了DTS Redis到Redis迁移、同步过程中的典型问题,以帮助用户更好地使用DTS。
198 2
|
3月前
|
NoSQL MongoDB 数据库
DTS 的惊天挑战:迁移海量 MongoDB 数据时,捍卫数据准确完整的生死之战!
【8月更文挑战第7天】在数字化时代,大数据量的MongoDB迁移至关重要。DTS(数据传输服务)通过全面的数据评估、可靠的传输机制(如事务保证一致性)、异常处理(如回滚或重试),以及迁移后的数据校验来确保数据准确无损。DTS还处理数据转换与映射,即使面对不同数据库结构也能保持数据完整性,为企业提供可靠的数据迁移解决方案。
65 2
|
4月前
|
关系型数据库 数据库 RDS
利用DTS将自建mysql5.7版本数据库迁移至对应rds报错
利用DTS将自建mysql5.7版本数据库迁移至对应rds报错
149 0
|
6月前
|
关系型数据库 MySQL 数据挖掘
阿里云 SelectDB 携手 DTS ,一键实现 TP 数据实时入仓
DTS 作为阿里云核心的数据交互引擎,以其高效的实时数据流处理能力和广泛的数据源兼容性,为用户构建了一个安全可靠、可扩展、高可用的数据架构桥梁。阿里云数据库 SelectDB 通过与 DTS 联合,为用户提供了简单、实时、极速且低成本的事务数据分析方案。用户可以通过 DTS 数据传输服务,一键将自建 MySQL / RDS MySQL / PolarDB for MySQL 数据库,迁移或同步至阿里云数据库 SelectDB 的实例中,帮助企业在短时间内完成数据迁移或同步,并即时获得深度洞察。
阿里云 SelectDB 携手 DTS ,一键实现 TP 数据实时入仓
|
6月前
|
SQL 分布式计算 监控
在数据传输服务(DTS)中,要查看每个小时源端产生了多少条数据
【2月更文挑战第32天】在数据传输服务(DTS)中,要查看每个小时源端产生了多少条数据
65 6
|
6月前
DTS数据传输延迟可能有多种原因
【1月更文挑战第16天】【1月更文挑战第79篇】DTS数据传输延迟可能有多种原因
284 2
|
5月前
|
SQL 分布式计算 DataWorks
MaxCompute产品使用问题之dts是否支持传输数据到mc主键表2.0
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5月前
|
存储 数据采集 NoSQL
DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
【6月更文挑战第4天】DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
141 1
|
5月前
|
NoSQL 关系型数据库 MongoDB
DTS支持哪些非关系型数据库的数据交互?
【6月更文挑战第4天】DTS支持哪些非关系型数据库的数据交互?
65 1
|
6月前
|
SQL 运维 关系型数据库
阿里云DTS踩坑经验分享系列|数据不一致修复大法
阿里云数据传输服务DTS在帮助用户迁移数据、同步数据时,在某些复杂场景下会出现源库与目标库数据不一致的问题,造成数据错误,给用户带来困扰。由于数据不一致的问题很难完全避免,为了及时修复不一致的数据,DTS产品推出数据订正功能,保障用户在同步\迁移数据时的数据一致性。本文介绍了产生数据不一致的一些典型场景,并重点阐述了如何使用DTS数据订正功能来修复不一致的数据。
554 4