iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >新特性解读 | MySQL 8 复制延迟观测新方式,更全面更精准
  • 676
分享到

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

摘要

一直以来 Mysql 复制延迟观测是不完善的,既无法观测到真实的主从延迟,也无法支持复杂的复制拓扑环境,常用的 second_behind_master 指标更多是判断是否存在回放延迟,以及趋势变化。你无法直观的观测到事务精确的延迟情况,

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

一直以来 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 视图暴露更多观测点简化了观测方式,帮助工程师更精准的诊断复制延迟问题。

您可能感兴趣的文档:

--结束END--

本文标题: 新特性解读 | MySQL 8 复制延迟观测新方式,更全面更精准

本文链接: https://www.lsjlt.com/news/4789.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql拒绝访问怎么办
    mysql 出现拒绝访问的原因和解决方法:权限问题:授予用户适当的数据库或表访问权限。防火墙或安全组:允许对 mysql 端口(3306)的入站连接。密码错误:重置 mysql 密码或使...
    99+
    2024-05-16
    mysql
  • mysql怎么比较日期大小
    mysql 中比较日期大小的方法包括:直接比较两个日期,使用 、= 运算符。使用 date_format() 函数将日期转换为字符串,然后比较字符串大小。使用 str_to_date()...
    99+
    2024-05-16
    mysql
  • mysql怎么加锁
    mysql中加锁是一种确保数据并发访问一致性的机制。加锁方式有:表级锁(对整个表加锁)和行级锁(对特定行加锁)。加锁类型有共享锁(允许读取但禁止修改)、排他锁(禁止读取和修改)和意向锁(...
    99+
    2024-05-16
    mysql 并发访问
  • mysql误删数据怎么恢复
    mysql误删数据可通过以下步骤恢复:停止数据库服务,防止数据覆盖。若开启binlog日志,可从中提取删除语句,再重新执行后将数据恢复。使用恢复工具修复表文件或恢复事务。从备份中恢复数据...
    99+
    2024-05-16
    mysql
  • 怎么判断mysql安装成功
    成功安装 mysql 的方法:检查命令行界面版本号;连接到 mysql 服务器,输入 "mysql -u root -p";创建数据库,输入 "create database test;...
    99+
    2024-05-16
    mysql linux macos 防火墙配置
  • mysql怎么修改表名
    如何修改 mysql 表名:检查当前表名:show tables;运行 rename table 语句:rename table 旧表名 to 新表名;验证更改:show tables;...
    99+
    2024-05-16
    mysql
  • mysql删除的表怎么恢复
    mysql 中已删除表的恢复方法主要涉及以下步骤:检查 binlog 日志以获取删除事务信息;使用数据恢复工具扫描数据库文件;从备份还原表数据;或联系 mysql 支持寻求帮助。 My...
    99+
    2024-05-16
    mysql 数据丢失
  • mysql复合主键怎么写
    在 mysql 中编写复合主键:在 create table 语句中使用 primary key 约束并列出字段名称。复合主键的好处包括提高查询效率、保证数据完整性和强制数据顺序。注意选...
    99+
    2024-05-16
    mysql
  • 怎么查看mysql数据库版本
    如何查看 mysql 数据库版本?连接到数据库并执行查询:select version();检查命令行或 mysql workbench 中的服务器属性。 如何查看 MySQL 数据库...
    99+
    2024-05-16
    mysql linux
  • 怎么检测mysql安装成功
    要验证 mysql 安装是否成功,请执行以下步骤:检查系统服务是否正在运行。使用 mysql 命令行工具连接到服务器。创建一个测试数据库并使用它。在数据库中创建一个测试表。插入测试数据并...
    99+
    2024-05-16
    mysql linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作