最近更新时间:2026-01-13 13:16:15
在主从架构的 MySQL 数据库中,只读实例通常通过复制主实例的数据来提供查询能力。受 SQL 执行耗时、事务并发、网络抖动等因素影响,只读实例在某些场景下可能出现数据同步延迟。
在启用读写分离的情况下,如果仍将读请求转发至延迟较大的只读实例,可能导致:
查询结果不符合业务对数据实时性的要求
读到旧数据,影响业务逻辑正确性
数据一致性问题难以排查
为在性能与一致性之间取得平衡,数据库代理提供了延迟剔除功能,用于控制读请求是否可以路由至只读实例。
延迟剔除功能通过配置只读实例允许的最大同步延迟时间,来决定是否将读请求转发至只读实例。
取值范围:1 秒 ~ 10000 秒
推荐值:≥ 30 秒
考虑到复杂 SQL 执行、事务冲突等因素,只读实例在实际运行中存在出现延迟的可能,建议将延迟阈值设置为不小于 30 秒,以避免因短暂抖动频繁剔除只读实例。
推荐开启延迟剔除功能的场景:
对数据实时性有一定要求的业务读请求(能够容忍一定延迟)
使用读写分离,且存在多个只读实例
主库写入压力较大、复制延迟波动明显的场景
延迟剔除机制的工作原理如下:
1)用户通过代理管理界面启用延迟剔除功能,并配置业务可容忍的最大主从复制延迟阈值。
2)数据库代理在后台启动定时检测任务,周期性采集各 MySQL 实例的主从复制延迟:
延迟剔除:当某只读实例的复制延迟超过设定阈值时,代理将其从可用只读实例列表中自动剔除,不再承担读请求。
节点恢复:当被剔除实例的复制延迟恢复至阈值以内时,代理会自动将其重新加入只读实例列表,继续承担读请求。
3)代理在处理业务请求时:
写请求始终路由至主库;
只读请求仅在复制延迟满足阈值要求的只读实例中进行选择并路由。
已开通数据库代理
登录云数据库MySQL控制台,在实例列表页单击目标实例ID,进入实例管理页面。
单击左侧导航栏数据库代理,进入数据库代理页面。
在代理详情页的右上角,单击配置代理策略。
在弹出的对话框中,根据业务需要开启/关闭延迟剔除,并设置延迟阈值,点击确定,完成代理策略配置。
延迟剔除功能涉及如下配置项:
配置项 | 说明 |
延迟剔除状态 | 设置是否开启延迟剔除功能。若开启延迟剔除,当只读实例与主实例之间的复制延迟超过设定阈值时,该只读实例将被暂时屏蔽,不再承担读请求。被屏蔽的只读实例会在延迟恢复到阈值以下后,自动重新参与读流量分发。 |
延迟阈值 | 设置只读实例同步主实例数据时允许的最长延迟时间,取值范围:0~10000秒。 推荐值:考虑到 SQL 执行差异,只读实例可能存在一定延迟,建议设置不小于 30 秒。 配置说明:
该设置适用于可以在 牺牲部分读一致性 的前提下,提升读写分离性能的业务场景。 |
纯净模式
