大事务复制延迟优化

更新时间:
复制为 MD 格式

MySQL使用的是逻辑复制,一个事务在主库执行结束后,会发送事务产生的Binlog event到备库应用,进而保证主备的一致性。在这种架构下,对于耗时长的大事务,会导致备库有显著的复制延迟。为解决此问题,RDS MySQL推出了大事务实时应用功能。该功能可以在主库执行大事务时通知备库执行大事务,达到主备同时执行大事务的效果,从而基本消除大事务导致的复制延迟,保障实例的高可用。

功能简介

image

大事务复制延迟(左图):在MySQL中,大事务是在主库提交后才被传输到从库开始应用,因此大事务在从库的执行时间基本相当于复制延迟的时间。在此期间,主库后续提交的其他事务都无法应用,从库的时效性受到严重影响。

大事务实时应用优化(右图):大事务复制延迟的核心优化思路是:让从库和主库同步执行大事务,当大事务在主库提交时,从库也跟着提交;当大事务在主库回滚时,从库也跟着回滚。

适用范围

使用大事务实时应用优化功能时,需满足以下条件:

使用方法

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧导航栏中单击参数设置

  3. 可修改参数页签内搜索以下参数并配置:

    1. 开启大事务实时应用优化功能

      1. 设置loose_binlog_realtime_apply_long_trx_enabledON

      2. 设置loose_binlog_realtime_transmit_source_enabledON

      3. 设置loose_binlog_realtime_transmit_replica_enabledON

    2. 其他需要配置的参数:

      参数名

      参数说明

      推荐值

      loose_binlog_realtime_replica_long_transaction_limit_size

      定义触发实时复制的事务大小阈值。当一个事务产生的Binlog超过该值,其实时复制功能便会自动激活。

      64 MB

      loose_binlog_realtime_enable_log_messag

      是否将实时复制的运行日志记录到error log中,建议开启。

      ON

      loose_binlog_realtime_apply_workers

      控制从库用来实时复制的Brr Worker线程数。

      8

  4. 单击确定,然后单击提交参数,并在弹出的窗口中选择生效的时间段。参数修改立即生效,无需重启实例。

优化效果

在主库执行一个500万行的数据导入事务,可以看到:

  • 优化前:事务先在主库执行,提交后开始在从库上应用,从库上复制延迟的持续时间和事务执行时间相等。

  • 优化后:事务同时在主库和从库执行,从库上没有出现复制延迟。

image.png