本文介绍排查DTS全量迁移慢/卡住的方法。
问题现象
DTS在进行全量迁移时,出现迁移耗时很久的现象,或者出现迁移任务卡住的迹象。
排查方法
可根据如下方法进行排查:
- 排查源库:
- 预估迁移时间:
- 排查源库待迁移对象的数据量级。
- 尝试迁移部分表,用作基础评估时间,比如10G数据量完成迁移的时长,以此来预估整体迁移时间。
- 排查任务并行情况:检查是否同时建立了多个任务。
说明 多任务并行可能造成一时性的资源紧张,建议分批分时段建立任务。
- 排查账号密码准确性:检查源库的用户名及密码是否正确。
使用配置任务时指定的用户名和密码从远程连接访问源库,测试数据库能否连通。以MySQL数据库为例,建立连接的命令为
mysql -h<源库IP或者域名> -P<源库端口号> -u<用户名> -p<密码>
。 - 排查白名单设置:如源库为自建库,您可以检查源库的安全设置中是否已完整添加DTS服务器的IP白名单。参见:迁移、同步或订阅本地数据库时需添加的IP白名单。
- 排查主键和索引情况:检查源库大表是否都有主键或唯一索引。以MySQL数据库为例,您可输入命令
show create table <数据库名>.<表名>;
,查询源库大表是否都有主键或唯一索引。说明 普通索引或无索引可能会出现多数据现象。
- 预估迁移时间:
- 排查目标库:
- 排查账号密码准确性:检查目标库的用户名及密码是否正确。
使用配置任务时指定的用户名和密码从远程连接访问目标库,测试数据库能否连通。以MySQL数据库为例,建立连接的命令为
mysql -h<目标库IP或者域名> -P<目标库端口号> -u<用户名> -p<密码>
。 - 排查白名单设置:如目标库为自建库,您可以检查目标库的安全设置中是否已完整添加DTS服务器的IP白名单。参见:迁移、同步或订阅本地数据库时需添加的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主实例规格列表。
- 排查死锁情况:检查目标库是否存在死锁。
以MySQL数据库为例,您可通过如下命令查询、删除死锁。
- 查看是否锁表:
show OPEN TABLES whereIn_use > 0;
。 - 查询锁表或者慢SQL进程:
SHOW PROCESSLIST;
。 - 删除该进程:
KILL [CONNECTION | QUERY]thread_id
。
说明 出现死锁,会导致数据无法写入。 - 查看是否锁表:
- 排查账号密码准确性:检查目标库的用户名及密码是否正确。
- 排查网络:检查网络的连通性是否正常,网络带宽是否存在限制,在条件允许的情况下建议升级带宽。
说明 您可以通过OS命令(如ping, telnet等)或使用第三方工具测试网络的连通性及网络延时。