mysql主备延迟测试,高性能MySQL:测量备库延迟

一个比较普遍的问题是如何监控备库落后主库的延迟有多大。虽然SHOW SLAVE STATUS输出的Seconds_ behind master 列理论上显示了备库的延时,但由于各种各样的原因,并不总是准确的:

83038cbc32f948eed2641dfc85fd867f.png

(1)备库Seconds_behind_master 值是通过将服务器当前的时间戳与二进制日志中的事件的时间戳相对比得到的,所以只有在执行事件时才能报告延迟。

(2)如果备库复制线程没有运行,就会报延迟为NULL。

(3)一些错误 (例如主备的max allowed packet 不匹配,或者网络不稳定)可能中断复制并且/或者停止复制线程,但Seconds_ behind master 将显示为0而不是显示错误。

(4)即使备库线程正在运行,备库有时候可能无法计算延时。如果发生这种情况,备库会报0或者NULL。

(5)一个大事务可能会导致延迟波动,例如,有一个事务更新数据长达-一个小时,最后提交。这条更新将比它实际发生时间要晚一个小时才 记录到二进制日志中。当备库执行这条语句时,会临时地报告备库延迟为一个小时,然后又很快变成0。

(6)如果分发主库落后了,并且其本身也有已经追赶上它的备库,备库的延迟将显示为0,而事实上和源主库之间是有延迟的。

解决这些问题的办法是忽略Seconds_ behind_master 的值,并使用一些可以直接观察和衡量的方式来监控备库延迟。最好的解决办法是使用hearbeat_record,这是一个在主库上会每秒更新一次的时间戳。为了计算延时,可以直接用备库当前的时间戳减去心跳记录的值。这个方法能够解决刚刚我们提到的所有问题,另外个额外的好处是我们还可以通过时间戳知道备库当前的复制状况。包含在Percona_Toolkit 里的pl-heartbeat脚本是“复制心跳"最流行的一种实现。

心跳还有其他好处,记录在二进制日志中的心跳记录拥有许多用途,例如在一些很难解决的场景下可以用于灾难恢复。

我们刚刚所描述的几种延迟指标都不能表明备库需要多长时间才能赶上主库。这依赖于许多因素,例如备库的写人能力以及主库持续写人的次数。关于这个话题,详细参阅前面介绍的“何时备库开始延迟”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值