场景描述
主库执行了大事务。
原因分析
大事务是指一个事务中包含大量的数据变更操作,例如一个事务包含上万次(insert,update,delete)等操作、一条SQL语句批量更新了上万行数据等,大事务往往本身的执行时间很长(分钟级)。当主实例执行了大事务后,会产生大量的Binlog日志,备机拉取这些Binlog耗时比一般事务长,且至少需要花费与主库相同的时间来回放这些事务的更新,从而导致备机出现复制延迟。
解决方案
- 为了保证主从数据的一致性,需要等待大事务执行完成,主备复制延迟才能恢复。
- 业务侧避免此类大事务,可以将大事务拆分为小事务,分批执行。例如,通过where条件或limit语句限制每次要更新的数据量。