开发者社区> 问答> 正文

为什么RDS MySQL只读实例同步延迟?

为什么RDS MySQL只读实例同步延迟?

展开
收起
又出bug了-- 2022-01-07 21:08:55 1579 0
2 条回答
写回答
取消 提交回答
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    只读实例规格过小 这类延迟场景经常出现在只读实例规格和主实例规格相差较大,而且只读实例负载较重的情况下,例如只读实例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执行。

    2022-11-25 09:58:02
    赞同 展开评论 打赏
  • 常见的几种导致延迟时间变长的问题原因如下:

    只读实例规格过小 这类延迟场景经常出现在只读实例规格和主实例规格相差较大,而且只读实例负载较重的情况下,例如只读实例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执行。

    2022-01-07 21:23:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
TcpRT:阿里云RDS智能诊断系统云上大规模部署自动化服务的客户实践经验 立即下载
TcpRT:面向大规模海量云数据库的服务质量实时采集与诊断系 立即下载
袋鼠云基于阿里云RDS的数据库架构实践 立即下载

相关镜像