云数据库 RDS-MySQL主备复制延迟场景及解决方案:场景1:主库执行了大事务
场景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语句限制每次要更新的数据量。
- 华为云数据库 RDS for MySQL常见故障排除_华为云
- RDS for MySQL数据库实例是什么_创建mysql实例步骤_如何创建RDS for MySQL数据库实例
- GaussDB内核_GaussDB数据库内核_高斯数据库内核_华为云
- TaurusDB一致性级别_事务拆分_读写分离
- 华为云数据库 RDS for PostgreSQL 实例规格介绍
- 免费的云数据库_云原生数据库_云数据库和本地数据库的区别
- 云数据库RDS
- 免费云数据库MySQL_MySQL数据库免费_MySQL数据库是免费的吗
- GaussDB数据库的使用现状_GaussDB最大的优势_高斯数据库的使用现状
- TaurusDB包周期容量变更_包周期库扩容_变更CPU_存储扩容