MySQL死锁与死锁检测

一、什么是MySQL死锁

MySQL中死锁是指两个或多个事务在互相等待对方释放资源,导致无法继续执行的情况

MySQL系统中当两个或多个事务在并发执行时,就可能会遇到每项事务都持有某些资源同时又请求其他事务持有的资源,从而形成事务之间循环等待的情况。出现这种情况时每个事务都无法获得它需要的全部资源,事务都无法继续执行下去,这种状态被称为死锁。

举个栗子

图片

事务A更新了id为1的数据,此时事务A拥有id为1数据行的行锁,在事务A尚未提交且事务A想更新id为2的数据行前,事务B启动并更新了id为2的数据此时事务B拥有id为2数据行的行锁,此时事务B阻塞了事务A,当事务B继续想更新id为1的数据行时又被事务A阻塞,此时如果事务A和事务B都不主动回滚或释放锁,就进入了死锁状态

二、死锁检测

InnoDB中的innodb_deadlock_detect参数用于控制MySQL是否检测死锁。当该参数设置为ON时,MySQL会检测到死锁并自动回滚其中一个事务,以避免死锁的发生。如果设置为OFF,MySQL不会检测死锁,可能会导致死锁的发生。

默认情况下,innodb_deadlock_detect参数设置为ON。但是,开启死锁检测会降低MySQL性能。因此,需要根据具体情况进行设置。

#查看MySQL使用InnoDB搜索引擎是否开启了死锁检测
mysql> SHOW VARIABLES LIKE 'innodb_deadlock_detect';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| innodb_deadlock_detect | ON    |
+------------------------+-------+
1 row in set (0.01 sec)


#开启死锁检测
SET GLOBAL innodb_deadlock_detect = ON;

三、如何避免出现死锁

MySQL中避免出现死锁的方法有:

  1. 优化事务设计:尽量减少事务的持续时间,避免长时间的事务占用资源,从而减少死锁的可能性。开发过程中尽量避免在事务中执行耗时的查询或者非必要的写操作。

  2. 合理使用锁:尽量使用记录级别的锁(行锁),而不是表锁,这样可以减少锁的竞争,降低死锁的风险。同时,避免在同一事务中对多个表进行交叉更新,这样会增加死锁的可能性。

  3. 设置合理的等待超时时间:通过设置合理的innodb_lock_wait_timeout参数来控制事务等待锁的最长时间,当超过这个时间后,事务会被自动回滚,从而避免死锁。

  4. 使用合适的隔离级别:选择合适的事务隔离级别,较低的隔离级别(如READ COMMITTED)可以减少锁的竞争,但可能会增加数据不一致的风险。需要根据实际业务需求权衡选择。

  5. 手动处理死锁:当检测到死锁时,可以通过查看错误日志、使用SHOW ENGINE INNODB STATUS命令来获取死锁相关的详细信息,然后根据情况手动解决死锁问题。

  6. 监控和分析:使用性能监控工具实时监控数据库的性能指标,包括死锁的发生频率和持续时间等,及时发现并解决死锁问题。

  7. 避免循环等待:确保应用程序在请求锁的顺序上保持一致性,避免出现循环等待的情况,即事务A等待事务B释放锁,而事务B又等待事务A释放锁,这种情况会导致死锁。

  8. 使用乐观锁:在某些场景下,可以考虑使用乐观锁机制,乐观锁通常不会在事务开始时就加锁,而是在事务提交时检查数据是否被其他事务修改过,如果没有则提交,否则重试或回滚。

  9. 限制并发访问:对于高并发的应用场景,可以考虑使用队列、限流等手段来控制并发访问的数量,减少并发事务之间的竞争,从而降低死锁的风险

三、总结

有效地减少MySQL中死锁的发生,可以提高数据库的稳定性和性能。在实际应用中,通常需要结合具体的业务场景和数据库配置来进行调优。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

npm命令卡在reify:eslint: timing reifyNode:node_modules/webpack Completed in 475ms不动

1.现象 执行npm install命令时,没有报错,卡在reify:eslint: timing reifyNode:node_modules/webpack Completed in 475ms不动 2.解决办法 (1)更换淘宝镜像源 原淘宝 npm 域名http://npm.taobao.org 和 http://registry.npm.ta…

springboot 人大金仓 kingbase-备份还原,命令中带密码,支持window和linux

命令带密码参考 Java代码实现国产人大金仓数据库备份还原需求-CSDN博客文章浏览阅读818次,点赞16次,收藏12次。本人在一次项目中,遇到了需要在系统管理中提供给用户备份还原系统数据的功能,由于项目特殊性,项目底层数…

Day:007(3) | Python爬虫:高效数据抓取的编程技术(scrapy框架使用)

Scrapy 保存数据案例-小说保存 spider import scrapyclass XiaoshuoSpiderSpider(scrapy.Spider):name xiaoshuo_spiderallowed_domains [zy200.com]url http://www.zy200.com/5/5943/start_urls [url 11667352.html]def parse(self, response):info response.xpath(&qu…

react v18 项目初始化

按照以下命令进行傻瓜式操作即可: 全局安装脚手架工具: npm install -g create-react-app创建项目my-react-app: create-react-app my-react-app安装 antd: yarn add antd安装 react-router-dom: yarn add react-router-dom启动项…

幻兽帕鲁老板公开发声:腾讯正在制作幻兽帕鲁克隆版

昨天,Pocketpair的老板出来指责中国游戏公司抄袭了他们的游戏Palworld,说这简直是太不可思议了。 Pocketpair的CEO Takuro Mizobe发布了一个叫Auroria的游戏的截图,然后说:“腾讯正在制作Palworld的克隆游戏!在中国&a…

10个你可能没听过但很好用的建筑设计AI工具

在之前的文章中我给大家介绍了很多Midjourney、Stable Diffusion的使用方法和对应的功能: Midjourney vs Stable Diffusion:提示相同,出图差距竟这么大!哪个更适配你的工作?https://news.vsochina.com/cn/industry/64…

Java 基于微信小程序的医院预约挂号小程序(V3)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

基于SpringBoot的“商务安全邮箱”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“商务安全邮箱”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构 收件箱效果图 草稿箱效果图 已发送…

计算机网络实验实验之VLAN的配置与分析

实验目的 了解什么是带内管理;熟练掌握如何使用telnet方式管理交换机;熟练掌握如何为交换机设置web方式管理;熟练掌握如何进入交换机web管理方式;了解交换机web配置界面,并能进行部分操作。 (6)了解VLAN原理&#xf…

OpenHarmony南向开发案例:【智能门锁】

一. 简介 本demo是基于Openharmony 3.1 Beta本版开发,不仅可以接收数字管家应用下发的指令来控制门锁开启,而且还可以通过数字管家设置不同的开锁密码以及一次性密码,实现给临时用户一个临时密码,保证门户安全。当然除了开锁的功…

Shopee虾皮批量上传全球产品指南

当shopee虾皮需要大量上架新产品时,批量工具可以更好的提升效率。通过本指南,你将了解如何批量上传全球商品,本指南适用于所有站点。 一、什么是批量上传? 您可以通过【中国卖家中心>>全球商品>>批量上传】功能&…

部署ssm项目时遇到的一些错误

问题一:项目使用maven,打包完之后在idea启动不了 打包完之后在idea里面运行报错,提示找不到springmvc.xml配置文件。 再次clean后又可以运行了。 这是因为maven打包只会打包java文件,配置文件不进行打包,导致target-…

P1157 组合的输出 (dfs深搜)

题目连接&#xff1a;P1157 组合的输出 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a; AC代码&#xff1a; #include<iostream> #include<cstring>using namespace std;const int N 30; int st[N];//用来存这个数用没用过&#xff08;1~n个…

redmibook 14 2020 安装 ubuntu

1. 参考博客 # Ubuntu20.10系统安装 -- 小米redmibook pro14 https://zhuanlan.zhihu.com/p/616543561# ubuntu18.04 wifi 问题 https://blog.csdn.net/u012748494/article/details/105421656/# 笔记本电脑安装了Ubuntu系统设置关盖/合盖不挂起/不睡眠 https://blog.csdn.net/…

智慧公厕:打造城市品质生活的必备设施

公共厕所一直是城市管理中不可忽视的一环&#xff0c;而随着智慧科技的发展&#xff0c;智慧公厕逐渐成为改善城市品质生活的利器。智慧公厕作为一种创新的公共卫生设施&#xff0c;其带来的好处不仅体现在对公共厕所的全面监测和高效智慧化管理&#xff0c;更是为市民提供了更…

蓝桥杯第十五届javab组个人总结

javab组 额今天早上打完了得对自己此次比赛做总结&#xff0c;无论是明年还参赛还是研究生蓝桥杯&#xff0c;体验感有点差&#xff0c;第一题其实一开始想手算但怕进位导致不准确还是让代码跑了&#xff0c;但跑第202420242024个数&#xff08;被20和24整除&#xff09;一直把…

算法练习第18天|111.二叉树的最小深度

111.二叉树的最小深度 111. 二叉树的最小深度 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/ 题目描述&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最…

bootstrap-select 搜索过滤输入中文问题,前2个字母输入转成空格

bootstrap是v3.3.7的 v1.6.3版本的bootstrap-select,注释以下2行 //that.$menu.find(li).filter(:visible:not(.divider)).eq(0).addClass(active).find(a).focus(); // $(this).focus();

Dryad Girl Fawnia

一个可爱的Dryad Girl Fawnia的三维模型。她有ARKit混合形状,人形装备,多种颜色可供选择。她将是一个完美的角色,幻想或装扮游戏。 🔥 Dryad Girl | Fawnia 一个可爱的Dryad Girl Fawnia的三维模型。她有ARKit混合形状,人形装备,多种颜色可供选择。她将是一个完美的角色…

工业控制(ICS)---COTP协议

COTP 可以理解为基于TCP的工控TCP&#xff0c;主要有五种类型&#xff1a; CR Connect Request (0x0e)——握手&#xff0c;发送方发送 CC Connect Confirm (0x0d)——握手&#xff0c;接收方发送 DT Data (0x0f)——传正常数据 UD User Data (0x04)——少见&#xff0c;传…