主从延迟的常见原因是什么
延迟排查可以按五层推进:从库硬件(IO 与 CPU)、大事务、单线程回放与并行度不足、锁竞争(元数据锁与行锁)、网络与 relay 日志写入。ROW 格式下从库要按行重放,如果主库表缺少主键或合适的索引,每条语句都要全表定位,这是最常被忽略的隐性延迟源。
基本信息
| 五个层次 | 硬件、大事务、并行度、锁竞争、网络与 relay |
|---|---|
| 并行复制 | 关注 replica_parallel_workers 与写集合依赖 |
| 关键证据 | 延迟曲线形状:阶梯、平台还是尖峰 |
| 监控项 | 两侧 offset 差、worker 状态与 relay 日志增长速度 |
| 处置方向 | 业务拆批、补齐主键与索引、调整并行度 |
典型使用场景
- 延迟告警:按曲线形状先分类再定位层次
- 大事务治理:把批量写入拆成可控批次
- 无主键表治理:补齐主键减少从库全表定位
- 并行复制配置:评估是否启用写集合依赖
- 硬件评估:确认真实瓶颈在磁盘还是 CPU
- 复盘归档:把每次延迟的原因与处置沉淀成清单
快速分层判断
快速分层判断
SHOW REPLICA STATUS\G -- 1) 看延迟与 relay 日志增长
-- 2) 从库系统层看瓶颈:top 与 iostat -x 1
SELECT * FROM performance_schema.replication_applier_status_by_worker\G -- 哪个 worker 忙
SELECT * FROM information_schema.innodb_trx ORDER BY trx_started LIMIT 5; -- 长事务
SELECT trx_id, trx_rows_modified FROM information_schema.innodb_trx ORDER BY trx_rows_modified DESC LIMIT 5;
SHOW VARIABLES LIKE 'replica_parallel_workers';
SHOW VARIABLES LIKE 'replica_parallel_type';原因分层对照
| 层次 | 典型症状 | 处置方向 |
|---|---|---|
| 硬件 | 从库 IO 使用率饱和 | 升级磁盘或分摊读写压力 |
| 大事务 | 延迟阶梯式跳变后缓慢回落 | 业务拆批、限制单次写入量 |
| 并行不足 | 回放线程单核繁忙 | 评估并行复制与写集合依赖 |
| 锁竞争 | 回放线程在等行锁或元数据锁 | 从库上避免长查询与长事务 |
| 网络与 relay | 位点不动或 relay 快速堆积 | 检查链路与 relay 落盘盘性能 |
ROW 重放需要按主键定位行:主库表无主键或缺少合适索引时,从库执行代价极高,是隐性延迟源。
延迟曲线的形状比单点数值更有信息量:阶梯式跳变通常来自大事务,持续平台说明回放能力不足,周期性尖峰多半与备份、重写等后台任务重合。