本文介绍排查DTS全量迁移慢/卡住的方法。

问题现象

DTS在进行全量迁移时,出现迁移耗时很久的现象,或者出现迁移任务卡住的迹象。

排查方法

可根据如下方法进行排查:

  • 排查源库:
    • 预估迁移时间:
      1. 排查源库待迁移对象的数据量级。
      2. 尝试迁移部分表,用作基础评估时间,比如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数据库为例,您可以通过如下命令查询并修改数据库状态。
      1. 输入命令show global variables like '%read_only%'; ,如返回read_only及super_read_only为ON,则表示MySQL数据库设置为只读。
      2. 输入如下命令,将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数据库为例,您可通过如下命令查询、删除死锁。
      1. 查看是否锁表:show OPEN TABLES whereIn_use > 0;
      2. 查询锁表或者慢SQL进程:SHOW PROCESSLIST;
      3. 删除该进程:KILL [CONNECTION | QUERY]thread_id
      说明 出现死锁,会导致数据无法写入。
  • 排查网络:检查网络的连通性是否正常,网络带宽是否存在限制,在条件允许的情况下建议升级带宽。
    说明 您可以通过OS命令(如ping, telnet等)或使用第三方工具测试网络的连通性及网络延时。