复制延迟

从库落后主库的时间差;业务表现包括读到旧数据、统计口径偏差与故障切换数据丢失;需要监控延迟指标并设计读写路由策略。

复制延迟是什么

复制延迟是从库落后主库的时间差或位点差。业务表现包括读到旧数据、统计口径出现偏差,以及故障切换时丢失更多数据。它通常不是持续故障,而是由批量写入、大事务或网络抖动引起,因此治理重点是找到并限制突发的写入峰值。

怎么缓解

关键读取走主库、会话内保证读己之写、给缓存加版本号,都是常见的应用侧缓解手段;根本手段是控制写入峰值并把大事务拆小。延迟持续升高时,先看主从的传输线程与重放线程状态,再决定限速、错峰还是把关键读流量切回主库。

基本信息

监控指标复制延迟秒数、位点差(日志位置)
业务缓解关键读取走主库、会话一致性、缓存版本号
切换阈值延迟超过阈值时不应自动切换,避免丢更多数据
根因批量任务、大事务、网络抖动、单线程重放

延迟处置参考

延迟水平处置
秒级波动观察,确认是否受批量任务影响
持续升高检查主从传输与重放线程,必要时限速写入
超过切换阈值关键读流量切主库,暂停计划内切换
接近容量上限扩容副本或拆分写入热点

典型使用场景

  • 大促或秒杀:批量写入造成延迟飙升,需要错峰与限流
  • 报表与实时查询并存:同一副本上互相影响,需要按用途拆分
  • 数据迁移与回填:大表更新必须限速,避免压满复制通道
  • 故障切换决策:延迟超阈值时禁止自动切换
  • 会话一致性:用户刚提交的数据必须立即可读
复制延迟指标在不同系统里的含义不同,可能是时间差也可能是字节差,跨系统比较或设置告警前先确认口径。

易错点

  • 把延迟告警阈值设得过大,用户侧已出现大量旧数据投诉才触发告警
  • 批量任务高峰期复制通道被打满,未做限速与错峰安排
  • 只监控延迟数值不监控位点差,延迟统计失真时无法察觉
  • 写后立即读从库,用户看到自己刚提交的数据消失,体验严重受损

数据来源与参考

  • MySQL 8.0 Reference Manual:Replication 延迟监控
  • PostgreSQL 文档:WAL 与流复制
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌