引言
数据库主从延迟过高会严重影响业务读取一致性和可用性。在IDC运维中,延迟通常源于网络链路或数据库配置。本文从这两个维度提供系统化排查方法。
网络排查要点
网络问题常表现为带宽瓶颈、延迟波动或丢包。建议按以下步骤检查:
- 带宽与流量:监控主从之间的带宽利用率,若接近上限需扩容或限制其他流量。
- 网络延迟:使用
ping及mtr工具测试往返时间(RTT),异常高延迟可能由路由问题或物理链路故障导致。 - 丢包率:检查TCP重传率,丢包超过0.1%会显著影响复制效率。
- TCP参数:调整
tcp_rmem、tcp_wmem及net.core.rmem_max等内核参数,提升大流量场景下的吞吐能力。
配置排查要点
MySQL复制相关参数
- sync_binlog:设为1保证每次事务提交都刷盘,但会降低性能。若延迟主要由写入压力大引起,可临时设为0(仅限可容忍极少丢数据的场景)。
- innodb_flush_log_at_trx_commit:默认1,改为2可减少磁盘I/O,但可能丢失1秒数据。需根据安全要求权衡。
- slave_parallel_workers:多线程复制从库可并行应用日志,适当增大该值(如4~8)能缓解延迟。
- rpl_semi_sync_master_timeout:半同步复制超时时间,过短会导致降级为异步,需根据网络稳定性调整。
系统配置
- 磁盘I/O:从库写入压力大时,检查磁盘使用率(
iostat),更换为SSD或调优RAID策略。 - CPU与内存:从库CPU满载或内存不足会拖慢SQL线程,需升级硬件或优化查询。
- 复制过滤:避免在主库上设置
replicate_ignore_db等过滤规则不当导致从库跳过重要事务。
综合建议
排查时应先关注网络延迟和丢包(最简单且影响大),再逐步调整复制参数。对于延迟持续过高的情况,可启用并行复制并启用GTID模式以简化故障切换。定期监控SHOW SLAVE STATUS中的Seconds_Behind_Master,结合Performance_schema分析瓶颈。