开发者社区> 问答> 正文

技术运维问题 - MYSQL使用 -RDS for MySQL 只读实例同步延迟原因与处理


1. 只读实例产生延迟的原因
1.1 只读实例规格过小
1.2 主实例的 TPS(Transaction Per Second)过高
1.3 主实例的大事务
1.4 主实例的 DDL 语句
1.5 只读实例 MyISAM 引擎表
1.6 其他
2. 综述



RDS for MySQL只读实例通常用于分担主实例的查询(Select)压力,或者用于运行 OLAP 类型的分析应用,避免复杂统计查询对主实例的性能影响。
RDS for MySQL 只读实例架构图:
[/url]
建议:
如果使用只读实例,建议业务低峰期将主实例上的 MyISAM 引擎表转换为 InnoDB 引擎表(只读实例上会相应进行转换)。


1.6 其他


其他只读实例出现延迟的情况:
比如只读实例的主机 IO 压力出现异常,或者对无主键的表进行删除(RDS目前已经支持对表添加隐式主键,但是对于以前历史创建的表需要进行重建才能支持隐式主键)。


2. 综述


综上所述,把目前RDS只读实例出现延迟的场景都进行了分析,可以简单归纳一下:
当只读实例出现延迟后,
一看只读节点 IOPS 定位是否存在资源瓶颈;
二看只读节点的 binlog 增长量定位是否存在大事务;
三看只读节点的 ComDML 性能指标,对比主节点的 ComDML 定位是否是主库写入压力过高导致;
四看只读节点执行 show slave status \G,判断是否有 Waiting for table metadata lock;同时在主实例控制台 =》SQL明细 中排查下是否有 alter,repair,create等 DDL 操作;
五看只读节点执行 show slave status \G,判断是否有 Waiting for table level lock; 同时通过 show full processlist; 或者 DMS =》 实例信息 =》 实例会话 检查下是否有长时间对 MyISAM 引擎表的查询。

如果上述五看都还没有发现问题,那么在最后再检查一下只读节点是否存在无主键表的删除或者更新操作,可以通过在只读节点执行:show engine innodb status\G 或者 show open tables 状态为 in_use 为1的表:

  1. mysql> show open tables;+———————————————————+——————————————————————-+—————————————+————————————————-+| Database          | Table                 | In_use      | Name locked     |+———————————————————+——————————————————————-+—————————————+————————————————-+| aixuedai_web      | sd_repay              |         4   |              0  || mysql             | slow_log              |         0   |              0  || dw                | dw_acc_sd_expectpay   |         1   |              0  |


如问题还未解决,请联系[url=https://selfservice.console.aliyun.com/ticket/createIndex.htm?spm=5176.775974787.2.7.O718D0]售后技术支持

展开
收起
梨好橙 2018-09-24 22:08:07 2017 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像