云数据库 RDS-MySQL主备复制延迟场景及解决方案:场景1:主库执行了大事务

时间:2024-05-31 11:47:03

场景1:主库执行了大事务

大事务一般指一个事务中包含大量的数据更新操作,例如一个事务包含几万次DML(insert,update,delete)操作、一条SQL语句批量更新了上万行数据等,大事务往往本身的执行时间很长(分钟级)。当主实例执行了大事务后,会产生大量的Binlog日志,备机或只读节点拉取这些Binlog耗时比一般事务长,且至少需要花费与主实例相同的时间来回放这些事务的更新,从而导致备机或只读节点出现复制延迟。

排查方法:

  • 对于包含大量DML语句的大事务,使用如下命令,找到长时间执行的事务。

    select t.*,to_seconds(now())-to_seconds(t.trx_started) idle_time from INFORMATION_SCHEMA.INNODB_TRX t \G;

  • 对于一条SQL语句执行大量数据的大事务,执行show full processlist,查找是否存在长时间执行的delete或update语句。
  • 分析全量日志或慢日志,检查是否有大事务。

解决方法:

  • 为了保证主从数据的一致性,需要等待大事务执行完成,主备复制延迟才能恢复。
  • 业务侧避免此类大事务,可以将大事务拆分为小事务,分批执行。例如,通过where条件或limit语句限制每次要更新的数据量。
support.huaweicloud.com/trouble-rds/rds_12_0038.html