专栏首页mysql-dbamysql复制系列7-复制延迟计算
原创

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

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

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

我们经常使用的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来监控主从延迟

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL 8 复制(三)——延迟复制与部分复制

    版权声明:本文为博主原创文章,未经博主允许不得转载。 ...

    用户1148526
  • MySQL FAQ 系列 — MySQL 复制中 slave 延迟监控

    在MySQL复制环境中,我们通常只根据 Seconds_Behind_Master 的值来判断SLAVE的延迟。这么做大部分情况下尚可接受,但并不够准确,而应该...

    叶金荣
  • MySQL“延迟”主从复制

    老七Linux
  • MySQL延迟主从复制

    世界上没有卖后悔药的,一旦做错了,后悔莫及。我们作为运维,尤其是不小心误删除数据库里的数据时,那更是损失巨大。对于MySQL来说,这里有一种方法,可以避免这种悲...

    用户1215343
  • Mysql 复制的延迟优化

    Mysql 复制过程中,数据延迟是很重要的问题,无法避免,只能尽量优化,使延时尽可能的小 要想优化复制过程,我们先看下复制的整个过程,看其中哪些步骤可以优化 ?...

    dys
  • 由MySQL复制延迟说起

    相信 slave 延迟是MySQL dba 遇到的一个老生长谈的问题了。我们先来分析一下slave延迟带来的风险

    用户1278550
  • 由MySQL复制延迟说起

    杨奇龙,网名“北在南方”,7年DBA老兵,目前任职于杭州有赞科技DBA,主要负责数据库架构设计和运维平台开发工作,擅长数据库性能调优、故障诊断。

    田帅萌
  • MySQL至TiDB复制延迟监控

    因生产环境mysql中有较多复杂sql且运行效率低,因此采用tidb作为生产环境的从库进行部分慢sql及报表的读写分离。其中MySQL至TIDB采用Syncer...

    July
  • 如何监控MySQL的复制延迟?

    pt-heartbeat 数据库做主从复制时,复制状态、数据延迟是否正常是非常关键的指标,那么如何对其进行监控呢? pt-heartbeat 是 PERCONA...

    dys
  • mysql主从复制延迟问题记录

    DML(data manipulation language):数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句有select、...

    dogfei
  • mysql复制系列3-传统复制和GTID复制

    在mysql5.6之前的版本支持传统的复制,即基于二进制文件和位置的复制。mysql5.6及其以后的版本支持基于GTID的复制,有了GTID复制不需要指定文件和...

    wangwei-dba
  • 谈谈 MySQL 延迟复制的几个好处

    MySQL 的主从复制( Replication )关系,不太严谨的叫法是 “同步” 或者 “主从同步”。实际上在早期,MySQL 的主从并不能实现真正的 “...

    iMike
  • mysql复制系列5-多线程复制

    mysql复制中最常见的问题就是主从复制延迟问题,mysql从一开始不支持并行复制,到一步一步的优化改进多线程复制,下面介绍一下mysql复制单线程到多线程复制...

    wangwei-dba
  • mysql复制系列4-半同步复制

    异步复制:主库将事件写入二进制日志,但不知道从库是否接收成功,也不知道从库什么时候重放二进制日志,如果主库崩溃,则在主库提交的事务可能还没有传输到从库,这种情况...

    wangwei-dba
  • mysql复制系列2-复制的格式

    mysql 复制是基于binlog日志的,binlog日志中根据事件类型,事件以不同的格式被记录到二进制日志中,复制的格式由系统变量binlog_format控...

    wangwei-dba
  • mysql复制系列1-复制的基本原理

    主库上的所有数据的变更(DDL,DML等)都会被记录到自己的binlog日志中,从库利用从主库传输来的binlog进行回放来模拟主库的数据变更

    wangwei-dba
  • mysql复制系列6-复制信息相关的表

    复制状态信息查看可以通过一些语句如(show slave status)和相关的系统表来进行查看,它们之前有对应的关系

    wangwei-dba
  • MySQL并发复制系列一

    MySQL binlog导致二阶段提交 ? ? 二阶段详解 ? 二阶段导致事务无法并发执行 ? ? ? 使用Binlog Group Commit重新开启...

    沃趣科技
  • MySQL并发复制系列二

    MySQL replication原理 ? 复制延迟问题 ? ? Schema并发复制 ? Enhanced Muti-threaded slaves ? ? ...

    沃趣科技

扫码关注云+社区

领取腾讯云代金券