本文介绍排查DTS增量迁移延迟或同步延迟的方法。

问题描述

DTS在进行增量迁移时,迁移任务或同步任务出现延迟的现象。

可能原因

  • 原因1:任务规格受限制。DTS的增量迁移/同步链路的各个规格有对应的RPS限制,当源库的数据写入量过大时,达到了规格限流,就会导致任务延迟。
  • 原因2:目标实例规格受限:目标库实例的写入性能已达到瓶颈。
  • 原因3:可能存在热点更新,影响性能。无主键表可能会导致热点行更新;源库对单一表或者单一行的高频度更新也会导致热点更新。
  • 原因4:源库实例的读取性能达到瓶颈或网络带宽被打满。
  • 原因5:【特殊】当目标库实例为AnalyticDB MySQL(ADB)时,源库进行变更字段类型的DDL操作会导致同步实例延迟。因为ADB不支持字段类型变更,而DTS会对失败SQL进行多次重试,从而表现出同步延迟。
  • 原因6:目标库带有触发器(trigger),会产生较大延迟。
  • 原因7:目标库支持双写,或目标库实例被同步的表存在既有主键又有唯一建等表结构复杂的情况。

解决方法

  • 解法1:升级DTS增量迁移/同步的链路规格,提高迁移性能。参见升级实例配置
  • 解法2:升级目标库的实例规格,提高目标库实例写入性能。
  • 解法3:在存在热点行更新的情况时,等待热点更新完毕。或者从业务上考虑尽量避免热点更新。
  • 解法4:提升源库实例性能或升级网络带宽。
  • 解法5:当目标库实例为ADB时,建议将做过DDL的表移出同步对象来恢复同步实例,待延迟降0之后,再删除目标库对应表,将该表重新加回同步对象。
  • 解法6:建议删除或禁用目标库的触发器(trigger)。
  • 解法7:检查目标库实例的锁状态以及慢SQL,调整目标库写入或者目标库表结构来解决目标库写入锁以及慢SQL问题。