关于同步延迟原因与处理的RDS MySQL 只读实例
RDS MySQL只读实例一般来说用于分担主实例的查询(Select)压力,或者用于运行OLAP类型的分析应用,避免复杂统计查询对主实例的性能影响。
RDS MySQL只读实例架构图如下所示:
因为RDS只读实例采用MySQL原生的基于Binlog的复制技术(半异步复制或异步复制),所以延迟必然会成为成立之初就存在的问题。
由于延迟会导致只读实例与主实例的数据出现不一致的情况,进而可能造成业务上逻辑的混乱或者数据不正确。另外延迟也有可能引起Binlog数据堆积,导致只读实例空间被迅速消耗(如果主实例当前正产生大量的binlog数据),这种情况下有可能会使只读实例被锁定。
只读实例产生延迟的原因
1.主实例的TPS(Transaction Per Second)过高
主实例的 TPS (Insert、Update、Delete)过高导致只读节点延迟。如下图所示:
分析:
由于只读节点与主实例同步采用的是单线程同步,而主实例的压力是并发多线程写入,这样在主实例高并发DML TPS 情况下非常容易出现只读实例的数据延迟,可以通过观察只读实例节点的TPS与 主实例的TPS性能数据来完成判断。
主实例的 TPS如下图 :
只读实例的TPS如下图图:
只读实例的延迟如下图:
建议:
排查主实例的写入压力是否正常;如果正常则需要对业务进行优化或者拆分,