开发者社区> 问答> 正文

RDS MySQL只读实例同步延迟如何解决?

RDS MySQL只读实例同步延迟如何解决?

展开
收起
又出bug了-- 2022-01-07 21:09:10 1718 0
1 条回答
写回答
取消 提交回答
  • 排查方法 当只读实例出现延迟时,可以根据以下排查方法定位问题:

    在RDS控制台中查看监控信息,检查只读实例的IOPS,确认只读实例是否存在资源瓶颈。 在RDS控制台查看监控信息,检查只读实例的TPS,确认主实例TPS是否过高。 检查只读实例的Binlog增长量,确定是否存在大事务。 查看慢日志信息,确认是否存在alter,repair和create等DDL操作,详情请参见分析慢日志。 只读实例执行show slave status \G命令,确定是否存在元数据锁。 检查只读实例是否存在无主键表的删除或者更新操作,可以通过在只读实例上执行show engine innodb status\G语句查看,或者执行show open tables语句后,查看输出结果的in_use列的值为1的表。 解决方法 本节列出以下四种常见的解决方法,您可以根据排查方法定位的问题原因选择对应的解决方法:

    只读实例规格过小 建议您升级只读实例规格,使只读实例的配置大于或者等于主实例的配置,避免由于只读实例规格较小导致延迟,详情请参见变更配置。

    主实例的TPS(Transaction Per Second)过高 确认主实例的TPS是否正常,如果TPS过高,则需要对业务进行优化或者拆分,保证主实例的TPS不会导致只读实例出现延迟。TPS相关数据可以通过自治服务的性能趋势页面查看,详情请参见性能趋势。

    主实例的大事务 在只读实例出现大事务导致延迟时,登录数据库,执行以下SQL语句,确认Seconds_Behind_Master不断变化,而Exec_Master_Log_Pos却保持不变,说明只读实例的SQL线程在执行一个大事务或者DDL操作。然后通过show processlist语句定位具体的线程。 系统显示类似如下。 主实例执行大事务 建议您将大事务拆分为小事务分别执行。例如在delete语句中增加where条件子句,限制每次删除的数据量,将一次删除操作拆分为多次数据量较小的删除操作进行。这样只读实例可以迅速的完成事务的执行,不会造成数据的延迟。 主实例的DDL语句执行时间长 对于DDL直接引起的只读实例延迟,建议在业务低峰期执行这些DDL。 对于来自主实例的DDL语句在只读实例上被阻塞的情况 需要在只读实例上执行show processlist语句,确认SQL线程的状态为“waiting for table metadata lock”。 然后使用kill命令终止只读实例上引起阻塞的会话,恢复只读实例和主实例的数据同步,详情请参见解决MDL锁导致无法操作数据库的问题。 更多信息 RDS MySQL只读实例通常用于分担主实例的查询压力,或者用于运行OLAP类型的分析应用,避免复杂的统计查询对主实例的性能影响。
    只读实例架构图 适用于 云数据库RDS MySQL版

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

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像