mysql死锁问题分析

news2024/10/1 9:33:17

死锁问题分析

起因

起因是线上报了一个死锁问题,然后我就去查看下死锁的原因。

思路

死锁问题的排查,

**日常工作中,应对各类线上异常都要有我们自己的 SOP (标准作业流程) ** ,这样不仅能够提高自己的处理问题效率,也有助于将好的处理流程推广到团队,提高团队的整体处理异常能力。
所以,面对线上偶发的 MySQL 死锁问题,我的排查处理过程如下:


线上错误日志报警发现死锁异常


查看错误日志的堆栈信息


查看 MySQL 死锁相关的日志


根据 binlog 查看死锁相关事务的执行内容


根据上述信息找出两个相互死锁的事务执行的 SQL 操作,根据本系列介绍的锁相关理论知识,进行分析推断死锁原因


修改业务代码


根据1,2步骤可以找到死锁异常时进行回滚事务的具体业务,也就能够找到该事务执行的 SQL 语句。然后我们需要通过 3,4步骤找到死锁异常时另外一个事务,也就是最终获得锁的事务所执行的 SQL 语句,然后再进行锁冲突相关的分析。
第一二步的线上错误日志和堆栈信息一般比较容易获得,第五步的分析 SQL 锁冲突原因中涉及的锁相关的理论在系列文章中都有介绍,没有了解的同学可以自行去阅读以下。
下面我们就来重点说一下其中的第三四步骤,也就是如何查看死锁日志和 binlog 日志来找到死锁相关的 SQL 操作。


链接:https://juejin.cn/post/6885315880444657678

这个思路是对的,针对比较常见场景的问题,我们要积累自己的标准作业流程,一套下来直接找到问题。

现场

那我就直接去数据查看下死锁信息。

登入mysql,并使用:

show engine innodb status*;*

大概查看到数据就是这样

16877594159841687759415941.png

我们查看死锁日志,其实关键信息主要就是,那个dao的方法,然后事务1拿着什么要什么锁,事务2拿着什么要什么锁。

可以看到事务1和事务2都要同一个锁。

这个

死锁产生的必要条件:

互斥。
请求与保持条件。
不剥夺条件。
循环等待。

从日志上来看事务1和事务2都是取争夺同一行的行锁,和前面概念部分提到的三种案例互相循环争夺锁有点不同,怎么看都无法满足循环等待条件。
因为发生死锁的这段逻辑添加了事务管理,因此去看此段业务代码:

作者:JellyfishMIX
链接:https://juejin.cn/post/6844904138921394190
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

跟这个有点像,既然都争夺一个锁造成了死锁,肯定这个业务代码之前有持有另一个事务要的锁。

然后就去业务代码查看下跟这个表有关的update语句。

然后就查看了这么一段有意思的语句。

其实有两个表,一个parent表,一个son表。

大概业务逻辑就是,更新son表,更新parent表。

16877597341441687759734127.png

16877598040031687759803993.png

但是这里有意思的是,更新子表的时候,也关联主表,然后更新。

我第一个思路就是,update的话,如果有join,是不是把另一个也锁了,即使没更新另一个表。

模拟

那我直接就本地测试了下,用parent表和son表来模拟。

son表

16877599250711687759925046.png

parent表

16877599615781687759961561.png

然后就很简单了,事务1执行1,事务2执行1.然后事务1执行2的时候,直接就死锁了。

很明显,update的话,如果有join,是不是把另一个也锁了,即使没更新另一个表。估计是一个s锁,如果是x锁,估计事务2执行1就直接阻塞了。

所以我们update的时候,别join,直接

用update son set son_name=2 where son.parent_id in (select id from parent where id=1 )这种。

总结

所以死锁的标准流程也整理出来了。

1.线上报错,有死锁。

2.直接去数据库拿死锁信息。主要看是哪个表哪个索引死锁了。

3.查看业务代码。主要查看这个业务流程中那个dao执行操作被锁表的。

4.分析一下死锁原因并改正。

分享

分享一下几个死锁案例。

16877503981041687750397536.png

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

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

相关文章

智能本质上是人性的拓扑

智能技术的发展是基于人类智慧和思维方式的延伸和拓展,人类的智慧和思维方式是智能的基础,人类是智能技术的创造者和主导者。然而,人工智能技术却与人性并不一致,根本上,人工智能技术并不具备人类的情感、道德、意识等…

适配器模式(Adapter)

定义 适配器是一种结构型设计模式,它能使接口不兼容的对象能够相互合作。 别名 封装器模式(Wrapper)。 前言 1. 问题 假如你正在开发一款股票市场监测程序,它会从不同来源下载 XML 格式的股票数据,然后向用户呈现…

通过skia导出pdf 生成超链接 skia pdfdocument annotation pdflink

如题 最近导出pdf ,想实现文本支持超链接跳转, 看了下skia的官网文档, 翻墙找各种资料 就是找不到关于怎么实现,毫无头绪咋办呢 我想了一下 1.粗略翻阅了下pdf的格式 了解了下基本的构成 啥root page text 啥的 2.通过pdf格式了解到 链接是通过LinkAn…

npm发布自己的公网包步骤详解

初始化项目 比如我,创建了code-transfor-text_vue项目 根目录初始化git git init .建立开源协议 给项目根目录手动创建LICENSE文件文件,没有后缀名 MIT LicenseCopyright (c) 2023 quanyiPermission is hereby granted, free of charge, to any pers…

Verdaccio搭建本地npm仓库

背景 Verdaccio 是一个 Node.js创建的轻量的私有npm proxy registry 我们在开发npm包的时候,经常需要验证发包流程,或者开发的npm包仅局限于公司内部使用时,就可以借助Verdaccio搭建一个npm仓库,搭建完之后,只要更改np…

DataLeap的全链路智能监控报警实践(二):概念介绍

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 概念介绍 基线监控 根据监控规则和任务运行情况,DataLeap的基线监控能够决策是否报警、何时报警、如何报警以及给谁报警。它保障的是任务整体产出链路&a…

MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作

文章目录 MySQL 知识点1.1 数据库创建和选择1.2 数据表创建和修改1.3 插入数据1.4 查询数据1.5 更新和删除数据 1.6 索引的创建和使用1.7 外键的使用 Python 中使用 MySQL2.1 连接数据库2.2 创建数据库和数据表2.3 插入数据2.4 查询数据2.5 更新和删除数据2.6 关闭连接 2.7 数据…

【算法系列之贪心算法I】leetcode376. 摆动序列

455.分发饼干 力扣题目链接 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j&…

详细讲解!接口性能测试方案

目录 前言: 性能测试术语解释 性能测试方法及目标 性能需求分析 性能测试范围 性能测试用例与场景 性能测试工具选择 性能测试结果分析 性能测试通过标准 前言: 接口性能测试是指测试系统中各个接口的性能,包括响应时间、吞吐量、并…

现在企业都在强调的客户体验,如何从官网帮助文档入手?

在当前激烈的市场竞争中,企业已经逐渐意识到客户体验的重要性。客户体验是指通过产品和服务所提供的一系列互动和接触,客户对企业的全面感受和评价。而在客户体验中,官网帮助文档作为企业与客户之间互动的重要环节,也扮演着重要的…

性能测试之测试指标

目录 前言 系统性能指标 资源指标 中间件指标 数据库指标 前端指标 稳定性指标 批量处理指标 可扩展性指标 可靠性指标 前言 性能测试是测试一个系统在特定条件下的响应时间、并发用户数、吞吐量、内存使用率、CPU利用率、网络延迟等各项指标的过程。测试指标是根据…

Alibaba Cloud Linux 3.2104 LTS 64位 安装lnmp环境php8、mysql8

Alibaba Cloud Linux 3.2104 LTS 64位服务器安装lnmp环境全过程 以下都为阿里云购买的服务器为例 前言 购买了阿里云的服务器之后切记切记切记! 第一步设置:更多> 网络和安全组> 安全组配置>入方向 第二步 设置root账户的密码(如…

如何在矩池云复现开源对话语言模型 ChatGLM

ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 Chat…

ART-Pi BT_WiFi 模块固件下载

源文件《UM5003-RT-Thread ART-Pi BT_WIFI 模块固件下载手册.md》 ART-Pi BT_WiFi 模块固件下载 ART-Pi 板卡在出厂时已经烧录过 BT_WiFi 固件,存储在外部 Flash。如果固件被不慎擦除,会导致 BT_WiFi 模组的功能无法正常使用,出现异常情况&…

【图像处理OpenCV(C++版)】——5.2 图像平滑之高斯平滑

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…

RabbitMQ常见的应用问题

文章目录 1.消息可靠性保障2.消息的幂等性保障 1.消息可靠性保障 在实际生产环境中,可能会由于网络问题导致消息接收异常产生某种影响,基于这种情况我们需要保障消息的可靠性。 RabbitMQ中的消息可靠性也称为消息补偿,如下图所示&#xff0…

浅析 Jetty 中的线程优化思路

作者:vivo 互联网服务器团队- Wang Ke 本文介绍了 Jetty 中 ManagedSelector 和 ExecutionStrategy 的设计实现,通过与原生 select 调用的对比揭示了 Jetty 的线程优化思路。Jetty 设计了一个自适应的线程执行策略(EatWhatYouKill&#xff09…

Origin如何绘制带拟合曲线的频数分布图?

文章目录 0.引言1.准备数据2.频数分布参数设置并绘图3.拟合曲线参数设置并绘图 0.引言 笔者研究的方向关于点云数据采集和建模算法,在对一个平面进行数据采集并建模后,需要实验结果进行精度分析,为了知道建模结果的点云集中于平面的程度&…

专场来袭,深度解读阿里云视频云的全智能进化

云智深度融合,视频云将幻化出怎样的新光景? 01 「云智新生」_ 视频云的全智能进化 新数智时代,云和AI在走向深度融合,以云计算为基石、以AI为引擎的云智深度融合,俨然成为行业共识。以“云智”为支撑,视频云…

基于JavaWeb的土特产销售购物商城的设计与实现

1.引言 随着互联网技术的不断发展,电子商务已成为一种重要的经济活动形式。土特产作为传统文化的代表之一,在旅游业中具有非常重要的地位。因此,将土特产销售与电子商务相结合,建立一个基于JavaWeb的土特产销售购物商城&#xff…