只读实例规格过小 这类延迟场景经常出现在只读实例规格和主实例规格相差较大,而且只读实例负载较重的情况下,例如只读实例IOPS过高。只读实例为了和主实例保持同步,采用了MySQL原生的Binlog复制技术,由一个IO线程和一个SQL线程来完成。IO线程负责将主实例的Binlog拉取到只读实例,SQL线程负责将这些Binlog日志应用到只读实例。这两个线程会消耗只读实例的IO资源,所以当只读实例的IOPS配置不高时,会导致只读实例数据延迟。您可以登录RDS控制台,通过监控信息确认IOPS较高。 主实例的TPS(Transaction Per Second)过高 由于只读实例与主实例之前的同步采用的是单线程同步,若主实例并发多线程写入数据,在主实例TPS过高的情况下容易出现只读实例的数据延迟,您可以通过观察只读实例的TPS与主实例的TPS性能数据来判断。 主实例的大事务 主实例执行一个涉及数据量非常大的update、delete、insert…select、replace…select等事务操作时,会生成大量的Binlog数据并同步到只读实例。只读实例需要花费与主实例相同的时间来完成该事务,因此会导致只读实例同步延迟。例如在主实例上执行一个持续80秒的删除操作,只读实例进行相同操作时也需要花费很长时间,于是会出现延迟情况。
主实例的DDL语句执行时间较长 只读实例和主实例数据同步是串行进行的,如果DDL操作在主实例操作的表过大,执行时间很长,或者执行大量慢查询,则会产生大量的临时表,将导致磁盘容量不足和磁盘IO增加,从而导致同步延迟。常见操作例如create index、repair table、alter table add column等。 只读实例上执行的查询或未完成的事务阻塞了来自主实例的DDL执行。
常见的几种导致延迟时间变长的问题原因如下:
只读实例规格过小 这类延迟场景经常出现在只读实例规格和主实例规格相差较大,而且只读实例负载较重的情况下,例如只读实例IOPS过高。只读实例为了和主实例保持同步,采用了MySQL原生的Binlog复制技术,由一个IO线程和一个SQL线程来完成。IO线程负责将主实例的Binlog拉取到只读实例,SQL线程负责将这些Binlog日志应用到只读实例。这两个线程会消耗只读实例的IO资源,所以当只读实例的IOPS配置不高时,会导致只读实例数据延迟。您可以登录RDS控制台,通过监控信息确认IOPS较高。 主实例的TPS(Transaction Per Second)过高 由于只读实例与主实例之前的同步采用的是单线程同步,若主实例并发多线程写入数据,在主实例TPS过高的情况下容易出现只读实例的数据延迟,您可以通过观察只读实例的TPS与主实例的TPS性能数据来判断。 主实例的大事务 主实例执行一个涉及数据量非常大的update、delete、insert…select、replace…select等事务操作时,会生成大量的Binlog数据并同步到只读实例。只读实例需要花费与主实例相同的时间来完成该事务,因此会导致只读实例同步延迟。例如在主实例上执行一个持续80秒的删除操作,只读实例进行相同操作时也需要花费很长时间,于是会出现延迟情况。
主实例的DDL语句执行时间较长 只读实例和主实例数据同步是串行进行的,如果DDL操作在主实例执行时间很长,那么同样在只读实例也会消耗同样的时间导致延迟。常见操作例如create index、repair table、alter table add column等。 只读实例上执行的查询或未完成的事务阻塞了来自主实例的DDL执行。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。