问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MySQL 死锁怎么发生的?怎么解决?

发布网友 发布时间:2024-09-05 05:55

我来回答

1个回答

热心网友 时间:2024-10-01 17:57

MySQL 死锁可能很多人都不会去了解,只了解操作系统的死锁和 Java 中的死锁,本文将会讲述面试中依然会遇到的重点部分,MySQL 死锁产生的原因和解决方案。

MySQL 死锁怎么发生的?怎么解决?

可重复读隔离级别,会有当前读的幻读问题。

所以 InnoDB 是采用了 MVCC + NextKey 锁,解决当前读的幻读问题。

NextKey(临键锁) = RecordLock(记录锁)+GapLock(间隙锁)。

记录锁:锁行记录本身,一条。

间隙锁:除锁记录本身,锁定一个范围,多条。

普通 Select 语句是属于当前读,不加行锁。

加行锁方式: share mode 共享锁(多个读可以,修改不行),或者 for update 直接加排他锁(独占)。

行锁的释放时机是在事务提交之后,也就是写入 binlog 日志,并且 redolog 是 Commit 状态,不是语句执行结束就释放行锁了,关键是事务什么时候提交。

锁是针对索引进行加锁,如果没有使用到索引,会进行全表扫描,就会产生业务宕机情况。

两个事务,都采用加行锁,并且由于加锁范围产生了交集,因此就会产生等待,要注意 X 和 X,X 和 S,S 和 S,三个只有 S 和 S 可以共享,其他都会冲突阻塞。

死锁解决方案

1)设置事务等待锁的超时时间,超时后进行事务回滚,锁被释放,跟 Spring 的 @Transactional 的 timeOut 可以类比。

2)开启主动死锁检测,参数 InnoDB_deadlock_detect 设置为 on 开启,开启死锁检测。

最好在业务场景,直接杜绝死锁,比如接口幂等性,直接用分布式 id、唯一性索引、双重 token 等。

Insert 插入

在 MySQL 中,INSERT 语句并不会直接加行级锁。行级锁是在对数据进行读取或更新时加上的,以保护数据的一致性和完整性。然而,INSERT 语句可以触发行级锁的加锁行为,具体取决于数据库的隔离级别以及并发访问情况。

当执行 INSERT 语句时,如果插入的数据涉及到已经被其他事务锁定的行,则可能会发生行级锁定。这种情况下,MySQL 会根据当前事务的隔离级别和已经存在的锁情况来决定是否对相关行加锁,以确保数据的一致性和完整性。

在默认的隔离级别(REPEATABLE READ)下,当执行 INSERT 语句时,MySQL 会根据已有的锁情况来判断是否需要对相关行加锁。如果其他事务已经对插入的数据所在的行加了锁,MySQL 可能会等待该锁被释放后再执行插入操作,或者根据需要自动加锁。

其他补充MySQL InnoDB 引擎下死锁产生的原因和解决方案

死锁产生的原因:

在 MySQL 的 InnoDB 引擎下,死锁(Deadlock)通常是由于多个事务相互竞争资源(例如行级锁)而产生的。当多个事务同时持有某些资源的锁,并且每个事务都在等待其他事务释放它所需的锁时,就会出现死锁。

死锁的解决方案:

数据库锁的种类和作用

在数据库中,锁是用来管理对共享资源的访问的机制。不同的锁具有不同的粒度和作用,常见的数据库锁包括:

这些锁的作用是保护数据的一致性和完整性,确保在并发访问时数据不会被破坏或丢失。不同的锁适用于不同的场景,需要根据实际情况进行选择和使用。

欢迎交流

在阅读完本文后,你应该对死锁产生原因和解决方案有了一定的了解,首先需要知道 MySQL 锁的种类,以及各个所的作用,然后再根据不同的场景,去进行实践和分析,在文末还有三个问题,欢迎小伙伴在评论区发表见解!

1)死锁检测工具如何帮助解决 MySQL InnoDB 引擎下的死锁问题?它们是如何工作的?

2)在数据库设计中,如何优化事务和锁定资源的顺序以减少死锁的发生?能否给出一些实际案例或最佳实践?

3)行级锁、表级锁和页级锁各有什么优缺点?在什么情况下应该选择使用哪种锁?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
和平精英 和平精英玛莎拉蒂保底多少出? 和平精英 吃鸡辆玛莎拉蒂要多少钱? 和平精英 和平精英玛莎拉蒂保底多少钱? 和平精英 吃鸡的玛莎皮肤大概要多少钱? 醉驾致人死亡交强险能赔付到肇事者吗 地铁跑酷 地铁跑酷2022狐狸皮肤怎么获得? 2023年河南省信阳市有三胎补助吗 【那位大师帮我看看这个紫水晶是不是天然的??】 iphone为什么接收到的短信不显示内容呢? 天龙八部帮会,创建帮会没有城市,都被站另了怎么办?除了建帮那50J还有... 9个月前囟门闭合正常吗 卤门十个月闭合正常吗 日本工具品牌有哪些 什么是化妆品纯露 使用纯露化妆需注意啥 ...比较厚的,是什么纸?还有制作压痕的东西叫啥?满意追加悬赏 勇者斗恶龙11能力种子怎么得介绍_勇者斗恶龙11能力种子怎么得是什么... 勇者斗恶龙11种子在哪掉落介绍_勇者斗恶龙11种子在哪掉落是什么_百度知 ... 小区城管可以强拆违建吗 2024年农历五月廿七塑绘吉日 2024年7月2日塑绘黄道吉日 铜版纸主要用途 2024年农历五月廿七喝喜酒吉日 2024年7月2日是喝喜酒的黄道吉日吗... 2024年7月2日换门黄道吉日 2024年农历五月廿七换门吉日 动机理论 本田哪款车是七座的? ...宜举行成年礼吗 2024年7月2日是举行成年礼的黄道吉日吗 2024年7月2日祭拜灶神吉日一览表 2024年7月2日祭拜灶神好不好_百度知... 黄历上面写明天是绝烟火,对一般人有没有影响呢?就是明天出去工作可以吗... 七座本田十万以内有哪几款车 本田七座商务车自动门报价 本田什么车型是七人座的? 我家孩子9个多月了我最近发现脑卤门闭合了该怎么办据说... MySQL持续重启如何解决mysql一直重启不了 mysql死锁产生原因 日本修枝剪十大品牌 深入解析MySQL中的排他锁机制阻碍读取的不让读锁详解mysql不让读... 苹果12发热怎么解决 面试必问:MySQL死锁是什么,如何解决?(史上最全) 玉米打叶面肥最佳时机 为什么刚买的苹果12发烫 mysql 死锁分析 玉米什么时候喷叶面肥最好 夏天可以不用面霜吗 夏天应该选用哪种面霜 混凝土构件的尺寸偏差有哪些要求呢? 夏天要用面霜吗 夏季需要用面霜吗 构件标准化是什么意思 温氏养猪加盟需要什么条件? 梦见老公养个怪鸟 华为手机G520-t10和华为C8813Q电池都是一样的吗 梦见老公耳朵里有只刚出生的小鸟 华为手机自带电池比较小,2000毫安时,现在电池也不撑用了,想换个电池...