mysql 复制延迟诊断_新特性解读 | MySQL 8 复制延迟观测新方式,更全面更精准

转载自公众号:玩转MySQL,作者:洪斌

一直以来 MySQL 复制延迟观测是不完善的,既无法观测到真实的主从延迟,也无法支持复杂的复制拓扑环境,常用的 second_behind_master 指标更多是判断是否存在回放延迟,以及趋势变化。你无法直观的观测到事务精确的延迟情况,因为 slave 无法获知事务在 master 上的提交时间。社区贡献的基于心跳表延迟检测方法,其流程是 master 上创建一张心跳表,心跳进程每秒更新表上的时间戳字段,slave 同步后计算时间差。这应该是在不改动 MySQL 代码的最好方案了,虽然也会有些不足。心跳进程单点风险,心跳进程不可用则延迟检测失效。

并不能反应真实的业务事务同步或回放延迟,体现的是主从复制链路全局的连通性和延迟。

观测粒度只能达到秒级,精度不够。

污染 binlog,大量心跳事件占据 binlog,更多空间占用,干扰排查和日志恢复。

MySQL 8 复制延迟观测的改进

WL#7319 和 WL#7374 共同完善了复制延迟观测,WL#7319 Infrastructure for GTID based delayed replication and replication lag monitoring 在binlog 的 gtid_log_event (启用 GTID)和 anonymous_gtid_log_event(未启用 GTID)新增事务提交时间戳。将事务原始提交时间写在 binlog 中,提交时间在复制链路上传递,使得 slave 可以计算事务延迟。original_commit_timestamp 事务在 master 提交 binlog 的时间戳(微秒),该时间戳每个节点都是一样的。

immediate_commit_timestamp 事务在 slave(包括中继节点)提交 binlog 的时间戳(微秒),该时间戳在 relay log 中与 original_commit_timestamp 一样,在 slave 的 binlog 是完成回放的时间戳。

WL#7374 Performance schema tables to monitor replication lags and queue 为 performance_schema 复制相关表新增观测点。replication_connection_status 记录事件接收线程(IO Thread)工作状态

replication_applier_status_by_coordinator 记录启用并行回放的协调线程工作状态

replication_applier_status_by_worker 记录事件回放线程(SQL Thread)工作状态

replication_connection_status

LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP 已写入 relay log 事务 ORIGINAL_COMMIT_TIMESTAMP 时间戳LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP 已写入 relay log 事务 IMMEDIATE_COMMIT_TIMESTAMP 时间戳LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP 已写入 relay log 的事务开始时间戳LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP 已写入 relay log 的事务结束时间戳QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP 正在写 relay log 的事务 ORIGINAL_COMMIT_TIMESTAMP 时间戳QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP 正在写 relay log 的事务 IMMEDIATE_COMMIT_TIMESTAMP 时间戳QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP 正在写 relay log 的事务首个事件的时间戳

replication_applier_status_by_coordinator

LAST_PROCESSED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP 已调度事务的 ORIGINAL_COMMIT_TIMESTAMP 时间戳LAST_PROCESSED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP 已调度事务的 IMMEDIATE_COMMIT_TIMESTAMP 时间戳LAST_PROCESSED_TRANSACTION_START_BUFFER_TIMESTAMP 已调度事务到 worker 线程 buffer 的开始时间戳LAST_PROCESSED_TRANSACTION_END_BUFFER_TIMESTAMP 已调度事务到 worker 线程 buffer 的结束时间戳PROCESSING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP 正在调度事务的 ORIGINAL_COMMIT_TIMESTAMP 时间戳PROCESSING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP 正在调度事务的 IMMEDIATE_COMMIT_TIMESTAMP 时间戳PROCESSING_TRANSACTION_START_BUFFER_TIMESTAMP 正在调度事务写入 worker 线程 buffer 的开始时间戳

replication_applier_status_by_worker

LAST_APPLIED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP 已回放事务的 ORIGINAL_COMMIT_TIMESTAMP 时间戳LAST_APPLIED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP 已回放事务的 IMMEDIATE_COMMIT_TIMESTAMP 时间戳LAST_APPLIED_TRANSACTION_START_APPLY_TIMESTAMP 已回放事务的开始时间戳LAST_APPLIED_TRANSACTION_END_APPLY_TIMESTAMP 已回放事务的结束时间戳APPLYING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP 正在回放事务的 ORIGINAL_COMMIT_TIMESTAMP 时间戳APPLYING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP 正在回放事务的 IMMEDIATE_COMMIT_TIMESTAMP 时间戳APPLYING_TRANSACTION_START_APPLY_TIMESTAMP 正在回放事务的开始时间戳

如何观测事务复制过程中在不同位置的延迟,A 是 Master 节点,C 是中继 Slave 节点,D 是 Slave 节点。

位置 1:事务从主节点 A 到从节点 D 回放完的延迟,最常用的查看事务完整的同步延迟

SELECT LAST_APPLIED_TRANSACTION_END_APPLY_TIMESTAMP - LAST_APPLIED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP

FROM performance_schema.replication_applier_status_by_worker

事务从中继节点 C到从节点 D 回放完的延迟,与上面类似,若没有中继节点效果和上面一样,也是事务完整的同步延迟

SELECT LAST_APPLIED_TRANSACTION_END_APPLY_TIMESTAMP - LAST_APPLIED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

FROM performance_schema.replication_applier_status_by_worker

位置 2:当前已调度完的事务到开始回放的延迟

SELECT APPLYING_TRANSACTION_START_APPLY_TIMESTAMP - APPLYING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

FROM performance_schema.replication_applier_status_by_worker

位置3:已调度完的事务等待回放的延迟,MTS 开启

SELECT LAST_PROCESSED_TRANSACTION_END_BUFFER_TIMESTAMP - LAST_PROCESSED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

FROM performance_schema.replication_applier_status_by_coordinator

位置 4:当前已同步到中继日志的事务,等待开始调度的延迟,MTS 开启

SELECT PROCESSING_TRANSACTION_START_BUFFER_TIMESTAMP - PROCESSING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

FROM performance_schema.replication_applier_status_by_coordinator

位置 5:事务同步到从机中继日志的延迟

SELECT LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP - LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

FROM performance_schema.replication_connection_status

位置 6:当前同步事务的网络传输延迟

SELECT QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP - QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP

FROM performance_schema.replication_connection_status

MySQL 8 从根源上解决了过往版本缺少事务提交时间且无法传递的问题,PS 视图暴露更多观测点简化了观测方式,帮助工程师更精准的诊断复制延迟问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 程序员必读的五本书籍

如果你是一名程序员,想知道如何提高你对Java的了解或者成为更好的Java开发人员。在本文中,我将分享一些最好的Java书籍。这些书经受住了时间的考验,随着岁月的流逝变得越来越重要。不管你是学生还是职业者,你总有很多东西要学&…

使用sqlserver连接mysql服务_Sqlserver创建连接MySql的链接服务器

第一步:在MySql服务器上安装与系统对应的 MySql-Connector-ODBC安装过程中可能会报 缺失 msvcr100.dll的错误,这需要你根据系统到网上下载对应的这个dll文件。(当初遇到这个问题的时候,在网上试了很多的这种文件 最后才找到一个合适自己的)第…

什么人适合学习Java编程?编程好学吗?

什么人适合学习Java编程?编程好学吗?首先自己做个自我评估,包括能力、兴趣、逻辑思维、性格特点等等,结合这些特质判断自己是否适合学习Java。评估自己时,要尽量客观,追随内心,切勿轻易抬高或者…

not support mysql_MYSQL(解决方法):Client does not support authentication

mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法shell> mysqlClient does not support authentication protocol requestedby server; consider upgrading MySQL client官方的说法是MySQL 4.1 and up uses an authentication proto…

mysql分布式如何实现原理_分布式通讯协议实现原理

分为两个阶段:投票表决阶段和提交阶段。事务参与者完成系统相关业务成功后,通知协调者状态,当所有的事务参与者业务状态都成功后,协调者才发出提交指令,参与者提交或者取消事务一协调者 二事务的参与者(一般有多个事务…

大神程序员都懂英文翻译,而你却因英语不行遭拒?

程序员中很多人都是在外企里面工作的。这样的话就会涉及到,跟外籍同事的沟通和协作。上下级之间的汇报工作。虽然我们的主要工作是开发软件。是技术类工作。跟计算机打交道比较多,但是沟通对技术来说,还是非常重要的。跟外籍同事沟通&#xf…

android找不到符号_快速搭建Android开发环境——Android Studio(附ADB找不到设备)...

由于毕设大概率最终要使用Android来实现,所以现在要开始学习一些Android开发基础了。学习一门技术,最先要解决的问题就是开发环境的问题。就如同两年前学java那样,在windows下配置环境总是一件不那么令人开心的事。Android也是一样&#xff0…

Java环境的正确配置你会了吗?

在很多新手入门学习Java的小伙伴都会面临到Java环境的配置,今天小编带大家来配置Java的环境配置,首先到官网下载Jdk:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装的话傻瓜式安装只需要下一步就可以&…

让初学者不迷茫的Java学习方法有很多?

相信各位小伙伴在学习过程中多少会遇到一些迷茫,学习是一个循序渐进的过程,最初的最基本的知识没有掌握,直接学习在这之上的更高层次的知识,最大的问题就是只能做到知其然,而不能做到知其所以然了。在之前小编也只是一…

mysql execute指令_MYSQL简单命令

常用 mysql 操作指令:连接:mysql -u用户名 -p密码退出:mysql>exit;建数据库:mysql>create database ???;显示数据库:mysql>show databases;//(-s)删除数据库:mysql>drop database ???;连…

mysql日期纬度表_mysql中生成时间维度表

mysql中生成时间维度表利用mysql常用日期函数生成时间维度表,效率最高,最简单,无需其他的一些工具支持。生成结果示例如下图:# time spanSET d0 "2012-01-01";SET d1 "2012-12-31";SET date date_sub(d0, …

Java程序员高效开发必备工具,其中有你的最爱吗?

对于Java编程开发,有两种不同的观点:一种认为Java是最简单功能最强大的编程语言之一,另一种则表示这种编程语言既难用又复杂。,每个工具都有其优点,学习这些具有可以帮助开发者改善代码质量,从而成为一个更…

mysql怎么实现生日字段前一个小时提醒_MySql学习笔记(二) 索引的设计和使用...

作为开发人员,数据库的索引是我们再熟悉不过的了。那么实话真的会了吗,在项目开发中随便定义一个int、varchar后边跟个primary key或者加个index就好了么?考虑到这些咋还真的需要看看专业的人都是怎么做的。在mysql中索引是提升性能的常用工具…

Java程序员需要掌握哪些技能才能通过大公司的面试

首先我们来谈一下程序员的阶段,在学校里的三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人。这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本上的内容迈向真正的企业级…

python中计算整商的运算符_Python 运算符中用来计算整商的是( ). (2.0分)_学小易找答案...

【判断题】函数的名称可以随意命名。( ) (2.0分)【判断题】python中的代码块使用缩进来表示。 (2.0分)【单选题】下列选择中,符合python命名规范的标识符是( )。 (2.0分)【单选题】下列表达式中,返回值是True的是( )。 (2.0分)【判断题】函数定义完成后,系统会自动执行其内部的…

java编程有什么独特之处?

Java编程已经成为了一个坚实的平台,可以赶上甚至超过本地代码的水准。它能使开发者花最小的代价完成工作,同时还能使得开发者在一段时间之后,还能继续完成别人的代码并且明白其中的意思。当然,你也可以编写可读性差的代码&#xf…

初学Java学员,千万不要踩这几个坑

2019即将到来,我们的编程界的大佬不由得发表一波感慨,新的一年将会有哪些语言上榜,不过小编还是相信Java不会落榜的。今天我们来谈一下那写年学习Java踩的坑。 一、敲代码追求速度,没有正确率 相信看过很多大神打代码速度非常快…

peewee mysql自动断开_flask+mako+peewee(下)(解决了Error 2006: MySQL server has gone away)

这篇主要介绍在这次项目中使用的peewee首先我们要初始化一个数据库连接对象。这里我使用了peewee提供的链接池。当然你也可以直接指定连接例如:db SqliteDatabase(base.db)我这里使用了peewee扩展pool,并初始化db对象参数。from playhouse importpooldb…

JAVA程序员已成为最疯狂的加班行业,没有之一?

程序员界加班经常成为业界讨论的话题,夜幕降临,大楼里依然灯火通明时,那一刻,仿佛让我渐渐的忘记了时间,我知道我不是一个在加班,我不是一个人!连续加班已成为常事,一点不夸张。 “…

layui table reload post请求_如何实现在Layui框架中完成父窗口刷新(更新)

最近有个项目使用Layui框架进行后端系统的界面搭建,其中Layui框架中的Layer组件在项目中会用得非常多。且有些功能会遇到子窗口完成数据的提交后,进行关闭同时会刷新父窗口的数据,所以此文章分享一下《如何实现在Layui框架中完成父窗的刷新功…