IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    一次大量事务日志生产的链条分析

    Jimmy He发表于 2024-08-29 10:43:21
    love 0

    数据传输工具,在全量同步中,往往是并发执行的,dts有个重写逻辑,是:
    1)DTS碰到死锁的时候,会当前session中重试,继续写入数据。比如:DTS一批写入1024条数据,写到第1000条失败了,会在当前session中继续从头写入这1024条数据。这个过程可能会出现数据重复写入,会发生主键冲突。
    2)DTS写入检测到主键冲突报错,就会将insert转换成delete + insert执行,先对当前1024条做delete操作,删除完成后,做insert操作。
    因此,在某些场景下,会导致不断删除重写数据,导致产生大量的事务日志。
    比如oracle的bitmap索引,会enq-TX mode=4的锁堵塞,进而产生死锁,进而引发问题:

    并且在后续,不仅出现insert对insert的死锁,由于dts还要删除数据,会delete数据,因此然后又加上了delete和insert的死锁,后续还有delete和delete的死锁。
    死锁的频率越来越高,重写次数越来越高,因此事务日志的量,可能会变成平时的10多倍,打爆磁盘空间,从而引发事故。



沪ICP备19023445号-2号
友情链接