mysql8查看大事务

news2024/11/18 11:39:13

文章目录

    • 1、查看大事务的原因
    • 2、构建测试数据
    • 3、模拟大事务场景
    • 4、查询mysql的事务
    • 5、查询大事务的详情

1、查看大事务的原因

大事务的特点是执行时间长,长期占有锁不释放,导致其他想操作同一行数据的线程阻塞,如果客户端设置了超时时间,超时后,客户端进行重试,又会申请一个mysql线程,然后再阻塞,最终会造成整个mysql库的线程枯竭,整个mysql库不可用,危害极大。
所以,对于开发人员来说,非常有必要知道如何查看长事务,如何终止掉大事务。

2、构建测试数据

很简单,就搞一张表,一个主键,一个业务字段。DDL语句如下

CREATE TABLE `user_read`  (
  `userId` int NOT NULL,
  `userName` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  PRIMARY KEY (`userId`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

再搞两条测试数据

INSERT INTO `user`.`user_read` (`userId`, `userName`) VALUES (1, 'test1');
INSERT INTO `user`.`user_read` (`userId`, `userName`) VALUES (2, 'test2');

3、模拟大事务场景

1)、修改事务超时时间
默认的事务超时时间是50秒,不便于我们拍查问题,所以我们可以根据以下sql修改事务的默认超时时间。注意:修改后,需要关闭当前的mysql连接,重新登录mysql才能生效。

#单位是秒,默认值是50秒
set global innodb_lock_wait_timeout=5000;

2)、开一个会话A,执行以下sql,模拟大事务
我们手动构建一个加了排他锁的查询语句,只开启事务,不提交语句

BEGIN;
select * from user_read where userId=1 for update;

因为加了排他锁,执行完语句后,不提交事务,所以这就模拟了一个大事务的请求。
3)、再开一个会话B,执行以下sql,模拟并发的请求

UPDATE user_read SET userName = 'test3' WHERE userId = 1;

此时,因为行锁未释放,所以这条语句会阻塞住。这条语句就是模拟:在大事务存在的情况下,其他请求是不能操作同一行数据的。这样做,明显会影响数据库的并发性能。

4、查询mysql的事务

1)、首先查看一下目前数据库中存在哪些事务

SELECT * FROM information_schema.INNODB_TRX

结果如下图:
查看mysql中有哪些正在执行的事务
2)、解读一下这两条记录
可以看到目前库中有2个事务,事务id分别是:4220、4219。
4219事务的执行状态是RUNNING、4220事务的执行状态是LOCK_WAIT。
RUNNING的意思是:当前事务正在执行。也就是我们在会话A中手动构建的那个大事务。虽然sql已经执行完,但是我们没有提交事务,所以INNODB_TRX表中就还能查到这个事务。但是因为sql语句已经执行完了,所以trx_query字段就没有信息了。
LOCK_WAIT的意思是:当前事务在等待锁,也就是我们在会话B中手动构建的update语句。因为这个事务还在等待锁,所以update语句并没有执行,所以trx_query字段能查询到当前待执行的sql语句。

3)、阶段性的排查结论
通过以上排查,我们已经知道了目前数据库中存在正在执行的大事务,并且还知道已经出现了锁等待的情况。此刻,我们迫切想要知道的是这个大事务的sql是啥,能不能kill掉。但是因为大事务已经执行了sql语句,所以trx_query中没有了sql信息。所以我们要通过mysql的其他表查询这个大事务的详情,尤其是大事务的sql语句,进而知道是在做什么业务。

5、查询大事务的详情

1)、查看哪些事务被阻塞了,被谁阻塞了

select * from sys.innodb_lock_waits;

结果
查看大事务的pid
可以看到有一条UPDATE语句被阻塞了,阻塞者的id是22,这个id是22的事务就是我们排查的目标。接下来就是根据这个22继续查找详细信息。

2)、查询执行大事务的mysql线程id

select thread_id,processlist_id from performance_schema.threads where processlist_id=22;

结果:
查询执行大事务的线程id
得到了执行大事务的线程id,接下来用这个线程id查询大事务对应的sql。
3)、查询大事务的sql信息

select thread_id,sql_text from performance_schema.events_statements_history where thread_id=62;

结果:
在这里插入图片描述
至此,我们就得到了大事务的sql语句,接下来,可以根据sql语句对应一下业务模块,进而得出这个大事务能不能kill。如果确定可以kill,我们可以使用以下语句kill掉这个大事务

kill 22

注意:这个语句要在mysql的sql窗口执行,不是在linux服务器中执行。

参考:
https://www.51cto.com/article/743732.html

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

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

相关文章

单正态总体和双正态总体的假设检验

1.单正态总体和双正态总体的假设检验 笔者之前的相关笔记: 1.正态总体下常见的抽样分布 2.假设检验(Hypothesis Testing) 个人理解假设检验:先对总体参数提出一个假设值,利用样本信息判断这一假设是采取拒绝该假设还是…

opencv人与摄像头距离检测

参考: https://chtseng.wordpress.com/2018/09/18/%E5%A6%82%E4%BD%95%E4%BC%B0%E7%AE%97%E5%89%8D%E6%96%B9%E4%BA%BA%E7%89%A9%E7%9A%84%E8%B7%9D%E9%9B%A2/ WeChat_20230611160620 1、cv2加载摄像头慢解决方法,单独重新cv2.VideoCapture() https://b…

使用vue进行Lodop打印的一些方法

文章目录 使用Lodop进行打印的一般步骤vue中使用lodopkr-print-designer简介打印模板设计器打印预览模板设计页面安装引入 Lodop是一个JavaScript控件,用于在Web应用程序中进行打印操作。 使用Lodop进行打印的一般步骤 下载Lodop控件:首先,你…

对比学习做了什么?

什么是对比学习? 对比学习貌似处于“无明确定义、有指导原则”的状态 什么是对比学习呢?(这个是微信链接)全文比较长,但是逻辑框架还是不错的。 如果想要更快速的了解什么是对比学习或者说对比学习是怎么做的,可以看SimCLR这个模…

全网最详细,软件测试-性能测试岗面试题总结(大全)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 描述一下你们公司…

论文阅读:Denoising Diffusion Probabilistic Models

论文阅读:Denoising Diffusion Probabilistic Models 最近一两年,在图像生成领域,扩散模型受到了越来越多的关注,特别是随着 DALL-E2 以及 Midjourney 的持续火爆,扩散模型也变得越来越流行,之前很多基于 …

C++ 参数的三种传递方式和应用场景

C 参数的三种传递方式分别是值传递、指针传递和引用传递。 值传递 值传递的实质 将实参的值(a、b)复制到形参(m、n)相应的存储单元中,即形参和实参分别占用不同的存储单元。 值传递的特点 值传递的特点是单向传递,即主调函数…

Java Web开发实战经典学习过程笔记

Java Web开发实战经典学习简单笔记 第一章 Java Web 开发简介 1.胖客户端程序指的是,当一个程序运行时需要一个单独的客户端程序支持(如:QQ)。瘦客户端程序在操作时不需要任何其他程序的安装(如:登录网上论坛,只需浏览器即可)。 2…

I.MX6ull UART

一 简介 UART 全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数据一个一个的顺序传输,通信线路简单。使用两条线即可实现双向通信,一条用于发送,一条用于接收。串口通信距离远,但是速度相对会低&…

Self-Attention 自注意力机制

输出形式 李宏毅讲到: 模型的输入是只有一种形式——词向量但是输出的形式却是不唯一的,主要有以下三种: 每一个向量对应一个输出(多对多,且一一对应) 每个序列只有一个输出(多对一) 一个序列对应一个序列(多对多,长…

MySQL 索引的10 个核心要点

文章目录 🍉1. 索引底层采用什么数据结构?为什么不用hash🍉2. B树与B树区别?为何用B树?🍉3. 自增主键理解?🍉4. 为什么自增主键不连续🍉5. Innodb为什么推荐用自增ID&…

代码随想录第59天

1.下一个更大元素II 有两种方法&#xff1a; 1.把两个一样的数组拼起来&#xff1a; // 版本一 class Solution { public:vector<int> nextGreaterElements(vector<int>& nums) {// 拼接一个新的numsvector<int> nums1(nums.begin(), nums.end());nu…

Chapter7: SpringBoot与数据访问

尚硅谷SpringBoot顶尖教程 1. JDBC 1.1 依赖及配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency><groupId>mysql</groupId…

《Reinforcement Learning: An Introduction》第4章笔记

Chapter 4 Dynamic Programming 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是一类在给定完备环境模型的MDP后用来计算最优策略的算法。动态规划算法在强化学习中因为&#xff1a;1. 假设有一个完美的环境模型&#xff1b;2. 极大的计算代价 实际用处…

树莓派4B连接不了产品开的热点

目的 关于树莓派连接不了产品开的5G热点&#xff0c; 当时还是一头雾水。 参考这篇博客 把思路方向转向了频率&#xff0c; 信道&#xff0c; 通过给的产品A相关规格说明wifi 5.18GHz, 信道36。 于是乎我两款产品A、产品B为例。 树莓派是能连接产品B开的热点&#xff08;5.74…

【Unity SRP】实现基础的Temporal AA(未完)

写在前面 【技术美术图形部分】简述主流及新的抗锯齿技术&#xff0c;花了点时间盘点了一些主流AA技术&#xff0c;再在SRP下的URP管线中实现一下目前游戏用得比较多的TAA。参考Unity的TAA&#xff08;比较容易懂&#xff09;以及sienaiwun的实现思路&#xff0c;也参考了很多…

OpenCV转换HDR图像与源码分析

我们常见的图像位深一般是8bit&#xff0c;颜色范围[0, 255]&#xff0c;称为标准动态范围SDR(Standard Dynamic Range)。SDR的颜色值有限&#xff0c;如果要图像色彩更鲜艳&#xff0c;那么就需要10bit&#xff0c;甚至12bit&#xff0c;称为高动态范围HDR(High Dynamic Range…

Docker部署ES集群、kibana、RabbitMq和chrome安装elasticsearch-head插件

文章目录 [toc] 1.安装ES集群和kibana1.1安装ES集群1.1.1 准备挂载目录1.1.2 准备配置文件1.1.3 启动命令1.1.3.0 启动前设置系统环境变量1.1.3.1 Windows10环境启动命令1.1.3.2 Linux环境启动命令 1.2安装kibana1.2.1 准备挂载目录1.2.2 准备配置文件1.2.3 启动命令1.2.3.1 Wi…

Spring IOC基于XML和注解管理Bean(一)

Spring IOC基于XML和注解管理Bean&#xff08;二&#xff09; 文章目录 1、IoC容器1.1、控制反转&#xff08;IoC&#xff09;1.2、依赖注入1.3、IoC容器在Spring的实现 2、基于XML管理Bean2.1、搭建模块spring-first2.2、实验一&#xff1a;获取bean①方式一&#xff1a;根据i…

过滤器和拦截器实现

说明&#xff1a;当用户未经登录&#xff0c;直接访问后台网址时&#xff0c;为了避免可以直接访问后台内容&#xff0c;就需要使用过滤器或拦截器将此类请求在服务器响应数据之前做核对&#xff0c;如果未登录&#xff0c;则驳回请求&#xff0c;返回登录页面&#xff0c;如果…