前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql复制系列7-复制延迟计算

mysql复制系列7-复制延迟计算

原创
作者头像
wangwei-dba
修改2021-05-19 11:44:24
9530
修改2021-05-19 11:44:24
举报
文章被收录于专栏:mysql-dbamysql-dbamysql-dba

我们在主从复制中最常遇到我的问题就是复制延迟的问题,那究竟复制延迟是怎么计算的呢?

复制延迟的准确定义应该是:同一个事务从主节点提交事务到从节点提交事务的时间间隔通常称之为复制延迟包括 包括事务被传输到从库的时间以及在从库应用的时间

我们经常使用的show slave status 中的Seconds_Behind_Master 是如何计算的

Seconds_Behind_Master计算公式:

clock_of_slave - last_timestamp_executed_by_SQL_thread - clock_diff_with_master

该公式含义为 "从库的当前系统(主机)时间 - 从库 SQL 线程正在执行的event的时间戳 - 主从库的系统(主机)之间的时间差"主从服务之间时间差只在io_thread启动时计算一次,以后复用这个值,所以io_thread线程启动后主从服务时间逐渐不一致,会导致看到主从时间延迟不准确的情况

Seconds_Behind_Master 计算复制延迟需要注意的地方:

1.当复制线程启动后,修改操作系统时间会导致计算出得复制延迟时间不准(重启io_thread可以修正)

2.如果io线程和sql线程同时为YES,且sql线程没有做任何事,此时直接判定复制延迟为0

3.如果sql线程为YES 而io线程为NO 且sql线程未应用完中继日志则会根据公式计算延迟,如果sql线程回放完中继日志,则直接判定延迟结果null

4.任何时候sql线程不为YES,则直接判定复制延迟为null

5.当sql线程回放大事务时,日志中事务的时间戳是一样的,因为事务是需要很长时间回放完,所以计算出来的延迟非常大,当应用完后延迟可能会突然变为0

从Mysql8.0 开始提供如下两个event可以用计算主从复制延迟

original_commit_timestamp: 主库节点事务成功commit(写入binlog)的毫秒数 unix时间

immediate_commit_timestamp,从库应用事务并成功commit的毫秒数(基于unix epoch time:1970-01-01T00:00:00Z算起)

同一事务在主从binlog日志中的original_commit_timestamp 是一样的,immediate_commit_timestamp是事务在slave上成功提交的时间所以在操作系统时间一致的情况下,主从延迟就是 immediate_commit_timestamp 减去original_commit_timestamp

Mysql8.0计算复制延迟更准确,特别是在级联复制的环境下计算复制延迟

可以通过相关的表字段计算出复制延迟如replication_applier_status_by_coordinator,replication_applier_status_by_work

另外还可以使用 percona的pt-heartbeat来监控主从延迟

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档