本文介绍DTS全量同步或迁移慢的常见原因,以及相应的解决方法。您可以逐一排查这些原因,并根据解决方法恢复任务。
问题现象
DTS在全量数据同步或迁移阶段时,可能会出现耗时很久的现象,或者出现任务卡住的迹象。
可能原因
源库待同步或迁移的数据量大或无主键。
源库创建了多个DTS任务。
源或目标库连接异常。例如,数据库设置了白名单、账号权限不足、账号密码错误等。
源或目标库的性能、网络延时、网络带宽等原因。
目标库不支持写入数据。例如,目标库为只读数据库、磁盘已满、存在死锁情况等。
排查方法
您可以根据如下方法进行排查:
排查源库:
预估迁移时间:
排查源库待迁移对象的数据量级。
尝试迁移部分表,用作基础评估时间,比如10G数据量完成迁移的时长,以此来预估整体迁移时间。
排查任务并行情况:检查是否同时建立了多个任务。
说明多任务并行可能造成一时性的资源紧张,建议分批分时段建立任务。
排查账号密码准确性:检查源库的用户名及密码是否正确。
使用配置任务时指定的用户名和密码从远程连接访问源库,测试数据库能否连通。以MySQL数据库为例,建立连接的命令为
mysql -h<源库IP或者域名> -P<源库端口号> -u<用户名> -p<密码>
。排查白名单设置:如源库为自建库,您可以检查源库的安全设置中是否已完整添加DTS服务器的IP白名单。参见:添加DTS服务器的IP地址段。
排查主键和索引情况:检查源库大表是否都有主键或唯一索引。以MySQL数据库为例,您可输入命令
show create table <数据库名>.<表名>;
,查询源库大表是否都有主键或唯一索引。说明普通索引或无索引可能会出现多数据现象。
排查目标库:
排查账号密码准确性:检查目标库的用户名及密码是否正确。
使用配置任务时指定的用户名和密码从远程连接访问目标库,测试数据库能否连通。以MySQL数据库为例,建立连接的命令为
mysql -h<目标库IP或者域名> -P<目标库端口号> -u<用户名> -p<密码>
。排查白名单设置:如目标库为自建库,您可以检查目标库的安全设置中是否已完整添加DTS服务器的IP白名单。参见:添加DTS服务器的IP地址段。
排查实例类型:检查目标库实例是否为只读实例(不支持写入)。
以MySQL数据库为例,您可以通过如下命令查询并修改数据库状态。
输入命令
show global variables like '%read_only%';
,如返回read_only及super_read_only为ON,则表示MySQL数据库设置为只读。输入如下命令,将MySQL从只读状态设置为读写状态。
unlock tables; set global read_only=0;
说明如MySQL数据库为只读状态,则read_only参数设置为1或TRUE;如MySQL数据库为读写状态,则read_only参数设置为0或FALSE。更多信息,请参见MySQL官网。
排查磁盘空间:检查目标库的磁盘空间是否已满。
以RDS MySQL实例为例,您可以在RDS MySQL控制台查看存储空间的使用情况。查看方式,请参见RDS MySQL空间不足问题。
排查性能负荷情况:检查目标库的负荷状况,是否达到了性能瓶颈。
以目标实例为RDS MySQL为例,您可以在RDS控制台的监控与报警页面查看实例的CPU、内存、I/O等资源负载情况,并对照相应的实例规格,确认是否达到实例规格的限制。查看方式,请参见查看监控信息和RDS MySQL标准版(原X86)主实例规格列表。
排查死锁情况:检查目标库是否存在死锁。
以MySQL数据库为例,您可通过如下命令查询、删除死锁。
查看是否锁表:
show OPEN TABLES whereIn_use > 0;
。查询锁表或者慢SQL进程:
SHOW PROCESSLIST;
。删除该进程:
KILL [CONNECTION | QUERY]thread_id
。
说明出现死锁,会导致数据无法写入。
排查网络:检查网络的连通性是否正常,网络带宽是否存在限制,在条件允许的情况下建议升级带宽。
说明您可以通过OS命令(如ping, telnet等)或使用第三方工具测试网络的连通性及网络延时。
更多信息
增量任务延迟的解决方案,请参见如何解决增量迁移延迟或同步延迟。
若本文无法解决您的问题,您可以通过钉钉(钉钉通讯客户端下载地址)进入到DTS客户交流钉钉群(群号:68325004196或68640008972),进行咨询。