正文
最近也收到了很多用户关于只读实例延迟的问题反馈,下面将会分析RDS只读实例出现延迟的几种常见场景,希望能够帮助用户理解和处理只读节点的延迟,更好地使用只读节点:
-
只读节点规格过小(10%)
-
主库的TPS过高(20%)
-
主库的DDL(alter、drop、repair)(40%)
-
主库大事务(insert..select)(20%)
-
其他(无主键)(10%)
场景一:只读实例规格配置过小导致延迟
这类延迟场景的出现往往是主节点购买的一个较大规格的配置,而只读节点却购买了一个最小规格的配置(例如240M内存/150 IOPS)。
分析:只读节点的数据为了和主节点保持同步,采用了MySQL原生的binlog复制技术,由一个IO线程和一个SQL线程来完成,IO线程负责将主库的binlog拉取到只读节点,SQL线程负责消费这些binlog日志,这两个线程会消耗掉只读节点的IO资源,所以当只读节点IOPS配置不够的时候,则会导致只读节点的数据出现延迟:
可以通过只读节点性能监控来判断是否已经达到只读实例的资源配额:
所以当这样的延迟情况的发生的时候,需要用户升级只读实例的规格(可以参考主库此时的IOPS的消耗情况),防止由于只读实例的规格较小导致了数据延迟。
最佳实践:只读实例节点的配置大于或者等于主节点的配置;