MySQL主从延迟的原因
发布网友
发布时间:2024-09-29 04:37
我来回答
共1个回答
热心网友
时间:2024-10-03 19:32
一、主从延迟的计算方式
通常,通过执行“show slave status\G”命令来查看MySQL主从延迟情况。
当seconds_behind_master的值大于0,则表示存在主从复制延迟。
seconds_behind_master的计算方法涉及以下变量:
1、time(0):从节点服务器的系统时间。
2、last_master_timestamp:SQL线程当前重放的事务在主库开始执行的时间戳。
3、clock_diff_with_master:IO线程启动时,从节点的系统时间和主节点服务器系统时间的差值。
如果IO线程启动后调整过系统时间,需重启复制,否则会影响seconds_behind_master的计算结果。
seconds_behind_master的计算公式为:当前从节点服务器的系统时间 - SQL线程当前重放的事务在主库的开始时间戳 - 从节点的系统时间和主节点服务器系统时间的差值。
注意:seconds_behind_master只能衡量SQL线程的延迟情况,不能衡量IO线程的延迟情况。
二、主从延迟的原因
1、IO线程延迟原因
网络延迟:可能因为网络带宽限制,可开启slave_compressed_protocol参数,启用binlog的压缩传输。
磁盘IO存在瓶颈:可调整从库双1设置或关闭binlog。
网卡存在问题:可通过scp远程拷贝文件测试主机网卡是否存在问题,如有问题则通知主机组修复。
一般情况下,IO线程很少存在延迟。
2、SQL线程延迟原因
SQL线程单线程回放:可开启并行复制。
STATEMENT格式下存在慢SQL:查看慢日志优化慢SQL。
ROW格式下存在慢SQL:考虑加索引、分批执行或改用pt-osc或gh-ost执行。
从库有查询操作:占用了大量系统资源的查询操作或慢查询阻塞了主库的DDL。
从库上存在备份:全局读锁阻塞了SQL线程的回放。
磁盘IO存在瓶颈:调整从库双1设置或关闭binlog。
3、其他原因
备库机器性能差;一台服务器上存在多个从实例(资源竞争激烈,特别是IO);设置的是延迟备库;备库空间不足;主库和从库的参数配置不一样;分区表分区过多。