MySQL(二十三)-加锁分析实战
参考文献
解决死锁之路 - 常见 SQL 语句的加锁分析
何登成–管中窥豹——MySQL(InnoDB)死锁分析之道
MySQL · 引擎特性 · InnoDB隐式锁功能解析
Locks Set by Different SQL Statements in InnoDB
MySQL技术内幕 InnoDB存储引擎
27.12.13.1 The data_locks Table
MySQL InnoDB锁介绍及不同SQL语句分别加什么样的锁
一张图彻底搞懂 MySQL 的锁机制
mysql事务和锁 SELECT FOR UPDATE
MySQL锁总结
MySQL DELETE 删除语句加锁分析
加锁实战分析
对于唯一键值的锁定,Next-Key Lock降级为Record Lock仅存在于查询所有的唯一索引列.若唯一索引由多个列组成,而查询仅是查找多个唯一索引列中的其中一个,那么查询其实是range类型,而不是point类型,因此InnoDB存储引擎依然会使用Next-Key Lock进行锁定.
操作序号
SessionA
SessionB
1
begin;
2 ...
MySQL(二十四)-解读死锁日志
参考文献
手把手教你解数据库死锁
死锁日志
前置知识
supremum记录
supremum这条记录是啥?
我们可以简单理解为是数据页中的一条“伪记录”.mysql的数据页中,不管有多少自己的记录,始终会存在两条虚拟的记录,也就是伪记录,分别是“Infimum”(最小记录)和“Supremum”(最大记录).要知道,一个数据页中多条记录存储类似于链表,Infimum->1->2->3->…->Supremum,这种.
通过SHOW ENGINE INNODB STATUS查看
日志解析
日志来自于MySQL(二十二)-死锁分析的唯一键死锁 (Delete + Insert)案例
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950------------------------LATEST DETECTED DEADLOCK------------------------2022-04-05 16:11: ...
MySQL(二十三)-加锁分析
参考文献
解决死锁之路 - 常见 SQL 语句的加锁分析
何登成–管中窥豹——MySQL(InnoDB)死锁分析之道
MySQL · 引擎特性 · InnoDB隐式锁功能解析
Locks Set by Different SQL Statements in InnoDB
MySQL技术内幕 InnoDB存储引擎
27.12.13.1 The data_locks Table
MySQL InnoDB锁介绍及不同SQL语句分别加什么样的锁
一张图彻底搞懂 MySQL 的锁机制
mysql事务和锁 SELECT FOR UPDATE
MySQL 45 讲
MySQL 加锁规则!
加锁的目的
数据库中的锁: 确保并发更新场景下的数据正确性.
ACID中的I(Isolation)
锁要作的就是达到事务隔离的目的,即: 两个并发执行的事务T1和T2,如果T1正在修改某些行,那么,T2要并发 读取/修改/插入 满足T1查询条件的行时,T2就必须被阻塞,这是锁存在的根本原因.
加什么样的锁的判断因素
当前事务的隔离级别
SQL是一致性非锁定读(consistent nonlocking r ...
MySQL(二十二)-死锁分析
参考文献
何登成–管中窥豹——MySQL(InnoDB)死锁分析之道
手把手教你解数据库死锁
Mysql并发时经典常见的死锁原因,Mysql死锁问题分析及解决方法
并发insert死锁验证
死锁和死锁检测
当并发系统在不同现场出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待状态,称为死锁.
死锁出现的条件
多个并发事务(两个或者两个以上的事务);
每个事务都持有锁(或者是已经在等待锁);
每个事务都需要再继续持有锁(为了完成事务逻辑,还必须更新更多的行);
事务之间产生加锁的循环等待,形成死锁.
若A事务需要B的资源,B事务需要A的资源,这就是典型的AB-BA死锁.
死锁的危害
死锁,即表明有多个事务之间需要互相争夺资源而互相等待。
如果没有死锁检测,那么就会互相卡死,一直耗死
如果有死锁检测机制,那么数据库会自动根据代价来评估出哪些事务可以被回滚掉,用来打破这个僵局
所以说:死锁并没有啥坏处,反而可以保护数据库和应用
那么出现死锁,而且非常频繁,我们应该调整业务逻辑,让其避免产生死锁方为上策
MySQL出现死 ...
MySQL(二十一)-锁分类
参考文献
MySQL锁系列(一)之锁的种类和概念
15.7.1 InnoDB Locking
MySQL · 引擎特性 · InnoDB隐式锁功能解析
MySQL 中锁的各种模式与类型
MySQL技术内幕 InnoDB存储引擎
15.6.1.6 AUTO_INCREMENT Handling in InnoDB
锁的种类
在数据库中,通常使用锁机制来协调多个线程并发访问某一资源.MySQL的锁类型分为表锁和行锁,表示对整张表加锁,主要用在DDL场景中,也可以由用户指定,主要由server层负责管理;
而行锁指的是锁定某一行或几行,或者是行与行之间的间隙,行锁由存储引擎管理,例如最常使用的InnoDB.
表锁占用系统资源小,实现简单,但锁定粒度大,发生锁冲突概率高,并发度比较低.行锁占用系统资源大,锁定粒度小,发生锁冲突概率低,并发度比较高.
InnoDB将锁分为**锁模式(lock_mode)和锁类型(lock_type)**两类.锁模式通常和锁类型结合使用.
锁类型描述了锁的粒度,也就是把锁具体加到什么地方.
锁类型包括表锁和行锁,而行锁还细分为记录锁、间隙锁、插 ...