MTS性能监控你知道多少

news2024/9/19 10:53:19

前言

说到MySQL的MTS,相信很多同学都不陌生,从5.6开始基于schema的并行回放,到5.7的LOGICAL_CLOCK支持基于事务的并行回放,这些内容都有文章讲解,在本篇文章不再赘述。今天要讲的是,你知道如何查看并行回放是否存在性能瓶颈吗,是由于主库事务行为导致无法并行回放,还是由于worker线程不足,限制了并行回放的天花板?这都得从一个Note信息说起。

MY-010559

在开启了多线程回放的从库error log,我们经常能看到Note级别的日志信息MY-010559

file 让我们来看看这些日志的含义

Seconds elapsed:当前时间与上次输出日志时间的间隔秒数

Events assigned:自slave协调线程启动后,累计处理分发给worker线程的event数量。简单理解为slave启动后处理的event数量。

Worker queues filled over overrun level:worker线程处理的event队列长度超过最大队列数(目前代码硬编码16384)的90%的次数,如果0则说明未发生该情况。

Waited due to worker queue full:worker线程处理的event队列长度达到最大(目前代码硬编码16384)的次数,如果为0则说明未发生该情况,是前面Worker queues filled over overrun level的情况升级。

Waited due to the total size:协调线程分发event大小达到replica_pending_jobs_size_max或者slave_pending_jobs_size_max限制而产生等待的次数。前面两个参数是限制worker线程处理event队列能够申请的最大内存(即大事务)。如果遇到此种大事务,在回放该大事务之前,会等待其他worker线程处理完已分配event,然后再进行该大事务的回放,回放过程中,后续的event回放,也会进入等待状态。总之,大事务回放特别影响并行回放的性能,只能串行回放。

Waited at clock conflicts:由于不能并行回放的累计等待时间,单位纳秒。如果并行回放策略设置的是DATABASE而不是LOGICAL_CLOCK,该值一直为0。

Waited (count) when workers occupied:协调线程休眠次数。有两种情况会累加此状态值:1、worker线程达到最大队列数(目前代码硬编码16384)的90%,此种情况协调线程最多休眠1毫秒;2、并行回放策略设置为LOGICAL_CLOCK时,由于没有空闲的worker线程导致无法分配事务的第一个event而产生的等待,此种情况协调线程会一直处于等待状态直到有空闲的worker线程能够处理回放。

Waited when workers occupied:等待空闲的worker线程累计时间,单位纳秒,对应Waited (count) when workers occupied的第二种等待情况。

代码分析

在8.0.26版本的代码中,我们通过错误信息关键字waited at clock conflicts查找,发现信息记录在变量ER_RPL_MTS_STATISTICS中,

file 继续按变量查找,发现其使用在rpl_replica.cc文件的apply_event_and_update_pos函数中,主要逻辑代码如下

file 可以看到,满足如下几个条件,日志信息就会输出

  1. 并行回放为开启状态
  2. 并行回放的累计event数量对1024取模余1
  3. 当前时间减去上次日志时间间隔大于mts_online_stat_period(硬编码120)秒
  4. error log日志级别为info(log_error_verbosity=3)

上述几个条件,和并行回放的事务繁忙程度并没有太大的关系,满足条件即会记录日志。假如一个事务有4个event,参数设置正常,每两分钟执行256个事务,就会输出一条日志信息,一秒钟3个事务不到。

日志解析观察

在我的日志文件中,取了如下两条连续的信息

2023-07-09T08:58:01.001019+08:00 909 [Note] [MY-010559] [Repl] Multi-threaded slave statistics for channel 'group_replication_applier': seconds elapsed = 180; events assigned = 11515905; worker queues filled over overrun level = 8314; waited due a Worker queue full = 0; waited due the total size = 0; waited at clock conflicts = 136628031500 waited (count) when Workers occupied = 242457 waited when Workers occupied = 2223254351900
2023-07-09T09:00:01.648124+08:00 909 [Note] [MY-010559] [Repl] Multi-threaded slave statistics for channel 'group_replication_applier': seconds elapsed = 120; events assigned = 11518977; worker queues filled over overrun level = 8314; waited due a Worker queue full = 0; waited due the total size = 0; waited at clock conflicts = 136644607700 waited (count) when Workers occupied = 242491 waited when Workers occupied = 2223755727800

第一条解析信息如下:

. 本次日志输出时间点为2023-07-09T08:58:01.001019
. 与上次日志输出间隔时间为180秒
. 累计处理event数量为11515905
. worker线程处理的event队列长度超过最大队列数(目前代码硬编码16384)的90%的累计次数8314次
. worker线程处理的event队列长度达到最大队列数(目前代码硬编码16384)的累计次数为0次
. 回放event大小达到replica_pending_jobs_size_max或者slave_pending_jobs_size_max的次数为0
. 由于不能并行回放而产生的累计等待时间为136628031500纳秒(约136.62秒)
. 协调线程累计休眠242457次
. 累计等待空闲worker线程的时间为2223254351900纳秒(约2223.33秒)

第二条解析信息如下:

. 本次日志输出时间点为2023-07-09T09:00:01.648124
. 与上次日志输出间隔时间为120秒
. 累计处理event数量为11518977,新增处理event数量3072(为1024的3倍)
. worker线程处理的event队列长度超过最大队列数(目前代码硬编码16384)的90%的累计次数8314次,新增0次
. worker线程处理的event队列长度达到最大队列数(目前代码硬编码16384)的累计次数为0次
. 回放event大小达到replica_pending_jobs_size_max或者slave_pending_jobs_size_max的次数为0
. 由于不能并行回放而产生的累计等待时间为136644607700纳秒(约136.64秒,新增等待约0.02秒)
. 协调线程累计休眠242457次,新增34次
. 累计等待空闲worker线程的时间为2223755727800纳秒(约2223.38,新增等待约0.05秒)

通过上述信息,可以看出,在日志阶段,系统处于空闲状态,处理事务数不多。 对比各个参数,在系统繁忙时,因为不能并行回放产生的等待时间为136.64秒,等待空闲的worker线程累计时间为2223.38,因此增大slave_parallel_workers的参数值,可以提升并行回放性能。

总结

[Note] [MY-010559]在我刚开始接触时,以为是系统出现了异常产生的日志,待真正了解其内容后,才发现通过该日志可以帮助我们了解MTS运行情况,针对性的做优化调整。

参考链接https://dev.mysql.com/doc/refman/8.0/en/replication-threads-monitor-worker.html

Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL是适用于金融级应用的国内自主开源数据库,具备高性能、高可靠、高易用性、高安全等多个核心特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

image

社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html

社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html

(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)

技术交流群:

微信&QQ群:

QQ群:533341697

微信群:添加GreatSQL社区助手(微信号:wanlidbc )好友,待社区助手拉您进群。

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

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

相关文章

最新AI系统ChatGPT网站源码/支持GPT4.0/GPT联网功能/支持ai绘画/mj以图生图/支持思维导图生成

使用Nestjs和Vue3框架技术,持续集成AI能力到系统! 同步mj图片重新生成指令 同步 Vary 指令 单张图片对比加强 Vary(Strong) | Vary(Subtle) 同步 Zoom 指令 单张图片无限缩放 Zoom out 2x | Zoom out 1.5x 新增GPT联网提问功能、签到功能 一、功能演示 …

基于springboot生鲜物流系统-计算机毕设 附源码13339

springboot生鲜物流系统 摘要 生鲜产品易于腐烂、难贮存、不易长时间运输,生产者所面临的市场风险很大,很多生鲜产品无法实现“货畅其流”和“物尽其值”,适宜的生鲜产品物流体系就显得尤为重要。本文将广东省生鲜产品物流体系的构建作为一个…

删除链表中等于给定值 val 的所有节点

203. 移除链表元素 - 力扣(LeetCode) 给出链表 1->2->3->3->4->5->3, 和 val 3, 你需要返回删除3之后的链表:1->2->4->5。 分析思路:这道题的思路,与之前删除链表中重复的结点相似。 因…

腾讯云从业者认证考试考点——云网络产品

文章目录 腾讯云网络产品功能网络产品概述负载均衡(Cloud Load Balancer)私有网络(Virtual Private Cloud,VPC)专线接入弹性网卡(多网卡热插拔服务)NAT网关(NAT Gateway)…

了解 spring MVC + 使用spring MVC - springboot

前言 本篇介绍什么是spring MVC ,如何使用spring MVC,了解如何连接客户端与后端,如何从前端获取各种参数;如有错误,请在评论区指正,让我们一起交流,共同进步! 文章目录 前言1. 什么…

RD算法(四)登堂入室 —— 成像完成

SAR成像专栏目录_lightninghenry的博客-CSDN博客https://lightning.blog.csdn.net/article/details/122393577?spm=1001.2014.3001.5502先放RD算法最终的成像结果: 经简单的地距投影后为(地距投影的内容在后面的几何校正章节中讲解): 温哥华这地形还真像是一张怪兽的巨嘴呀…

商城-学习整理-基础-商品服务API-三级分类(五)

目录 一、启动之前创建的环境1、启动虚拟机2、启动mysql3、启动redis4、启动nacos5、导入三级分类测试数据 二、开发商品服务三级分类列表1、后台模块1)书写商品三级分类表后台业务逻辑 2、前端模块1)启动renren-fast前后端项目2)在系统管理-…

js逆向 - X-Zse-96分析(JsRPC实战)

本文仅供学习交流,只提供关键思路不会给出完整代码,严禁用于非法用途,若有侵权请联系我删除! 目标网站:aHR0cHM6Ly93d3cuemhpaHUuY29tLw 目标接口:aHR0cHM6Ly93d3cuemhpaHUuY29tL2FwaS92NC9zZWFyY2hfdjM …

卸载 Postman!一款 IDEA 神级插件,更便捷、高效...

Restful Fast Request 是 IDEA 版 Postman,它是一个强大的 restful api 工具包插件,可以根据已有的方法帮助您快速生成 url 和 params。 Restful Fast Request API 调试工具 API 管理工具 API 搜索工具。 它有一个漂亮的界面来完成请求、检查服务器…

Django智能养殖场管理系统

目 录 摘要 1 绪论 1.1研究背景与意义 1.2研究内容 1.3论文结构与章节安排 2 智能养殖场管理系统分析 2.1 可行性分析 2.2 系统业务流程分析 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 智能养殖场管理系统总体设计 …

数据分析 VS 数据可视化:决战时刻

数据分析和数据可视化是数据科学领域中两个重要的组成部分,很多人不明白两者之间的关系,会误认为是一个东西,其实不然。本文就带大家简单了解一下它们的区别与联系吧! 数据分析是指通过收集、处理和解释数据来获取有关特定问题或…

深度学习入门 ---- 张量(Tensor)

文章目录 张量张量在深度学习领域的定义张量的基本属性使用PyTorch安装PyTorch查看安装版本 创建张量常用函数四种创建张量的方式和区别 四则运算 张量 张量在深度学习领域的定义 张量(tensor)是多维数组,目的是把向量、矩阵推向更高的维度。…

Docker中CMD和ENTRYPOINT的区别

目录 一.CMD二.ENTRYPOINT三.总结 一.CMD CMD指令为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。类似于 RUN 指令,用于运行程序,但二者…

Java:JDK8之后新的时间(推荐使用) LocalDate、LocalTime、LocalDataTime 的相关API

更新后的时间分类 LocalDate 的相关API //0、获取本地日期对象 LocalDate ld LocalDate.now();//年月日 system.out.println(ld) ;//1、获取日期对象中的信息 int year ld.getYear();//年 int month ld.getMonthValue(); //月(1-12) int day ld.getDayOfMonth();//日 int d…

不用下软件,三维模型就可以实现在线浏览了!

对三维有一些了解的朋友都知道,目前很多三维模型网站基本都是以2D形式展示的,用户只能通过截取不同角度的视图来查看模型。如果用户想要实现模型动态预览,只能下载其模型文件,并在对应的三维软件中打开。现在,不需要下…

springBoot多数据源使用tdengine(3.0.7.1)+MySQL+mybatisPlus+druid连接池

一、安装部署 1、我这里使用的 3.0.7.1版本,因为我看3.x版本已经发布了一年了,增加了很多新的功能,而且3.x官方推荐,对于2.x的版本,官网都已经推荐进行升级到3.x,所以考虑到项目以后的发展,决定…

EMC VxRail E560 vusb0端口不断down和up问题

客户的一台VxRail E560报vusb0网卡故障,如下所示: 该端口是VxRail ESXi与iDRAC内部通信的网口,并没有连接外部网络。 在vobd.log日志中,可以看到vusb0不断在down和up的信息: 由于节点在2023年4月份进行了重装&am…

每日一题8.2 2536

2536. 子矩阵元素加 1 给你一个正整数 n ,表示最初有一个 n x n 、下标从 0 开始的整数矩阵 mat ,矩阵中填满了 0 。 另给你一个二维整数数组 query 。针对每个查询 query[i] [row1i, col1i, row2i, col2i] ,请你执行下述操作:…

超出背包限制--潜水员

本题和之前的二维背包差不多&#xff0c;但是它可以做到超出体积的限制&#xff0c;本质上我们的状态转移方程其实和之前的差不多&#xff0c;f[i][j]min(f[i-1][j],f[i-1][j-v]w),超出的体积应该如何去计算&#xff0c;我们可以利用负数去计算&#xff0c;也就是i-v1<0||j-…

如何在烟草行业运用IPD?

从当前的世界烟草行业来看&#xff0c;烟草经济的发展十分迅速&#xff0c;中国是烟草生产与消费第一大国&#xff0c;每年由我国生产与出售的烟草远销世界各地。与此同时&#xff0c;中国烟草行业的集中度越来越高&#xff0c;企业的数量与规模稳步上升&#xff0c;行业迈向规…