不能再简单的意向锁
haoteby 2025-03-13 15:35 12 浏览
InnoDB 存储引擎支持多粒度锁(multiple granularity locking),也就是允许行锁和表锁共存。当允许行锁和表锁共存的时候,可能会存在下面这样一个问题:
例如我执行如下 SQL:
这段 SQL 执行完成后,给 id 为 1 的记录加了排他锁。
此时,在另外一个会话中,我如果想给这张表再来一个表级共享锁,如下:
lock table user read;
此时就会有一个问题,共享锁和排他锁是互斥的,要给表上共享锁,就得去检查一下表中的每一条记录都不存在排他锁,如果表中的数据量比较大,这个操作效率就会比较低。
为了解决这个问题,就引出了我们今天的意向锁。为了使多粒度级别的锁定变得实用,InnoDB 使用了意向锁,注意,意向锁是一种表级锁,它表示事务稍后对表中的行需要哪种类型的锁(共享或独占)。
意向锁也分为两类:
- intention shared lock:意向共享锁 (IS) 表示事务打算在表中的各个行上设置共享锁。
- intention exclusive lock:意向排他锁 (IX) 表示事务打算对表中的各个行设置排他锁。
例如,对于 SELECT ... LOCK IN SHARE MODE; 会自动设置 IS 锁,对于 SELECT ... FOR UPDATE 会自动设置 IX 锁,并且 IS 锁和 IX 锁不需要手动设置,这个是由系统自动设置。
意向锁的加锁规则如下:
- 在事务可以获取表中行的共享锁之前,它必须首先获取表上的 IS 锁或更强的锁。
- 在事务可以获取表中行的排他锁之前,它必须首先获取表上的 IX 锁。
简而言之:IS 和 IX 是表锁,它们存在的意义在于,将来给表上表级的 S 锁或者 X 锁的时候,可以通过 IS 或者 IX 快速判断出当前表中是否已经有加锁记录了,仅此而已。所以 IS 和 IX 之间其实是兼容的,IX 之间也是兼容的,如下表:
兼容性 IS IX IS 兼容 兼容 IX 兼容 兼容
但是意向锁和表级锁则有可能冲突,如下:
兼容性 IS IX X 不兼容 不兼容 S 兼容 不兼容
上面这张表也好理解:
- 如果表上有 IS,说明表中的记录有共享锁,此时就不可以给表加排他锁(X 锁),但是可以给表加共享锁(S 锁)。
- 如果表上有 IX,说明表中的记录有排他锁,此时就不可以给表加排他锁(X 锁),也不可以给表加共享锁(S 锁)。
整体上来说,兼容关系如下表:
兼容性 X IX S IS X 不兼容 不兼容 不兼容 不兼容 IX 不兼容 兼容 不兼容 兼容 S 不兼容 不兼容 兼容 兼容 IS 不兼容 兼容 兼容 兼容
由于意向锁并不需要我们手动添加,那么有没有办法让我们看到意向锁呢?可以的。
首先我们将系统变量
innodb_status_output_locks 设置为 ON,如下:
接下来我们执行如下 SQL,锁定一行数据,此时会自动为表加上 IX 锁:
接下来我们在一个新的会话中执行如下指令来查看 InnoDB 存储引擎的情况:
show engine innodb status\G
输出的信息很多,我们重点关注 TRANSACTIONS,如下:
可以看到:
- TABLE LOCK table test08.user trx id 3564804 lock mode IX:这句就是说事务 id 为 3564804 的事务,为 user 表添加了意向排他锁(IX)。
- RECORD LOCKS space id 851 page no 3 n bits 80 index PRIMARY of table test08.user trx id 3564804 lock_mode X locks rec but not gap:这个就是一个锁结构的记录,这里的索引是 PRIMARY,加的锁也是正儿八经的记录锁(not gap),因为索引是 PRIMARY,所以这里没有间隙锁,关于间隙锁,咱们下篇文章继续。
好啦,希望今天这篇文章能让小伙伴们对意向锁有一个简单的认知。
参考资料:
- https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html#innodb-intention-locks
相关推荐
- BRICS continues to offer powerful alternative global vision
-
Leadersattendingtheplenarysessionof"PeaceandSecurityandReformofGlobalGovernance"ofthe...
- China's role in shaping global growth takes the stage at Summer Davos
-
Guestsattendtheparallelsession"CheckingInontheEnergyTransition"duringthe2025SummerDav...
- Shanghai blockchain park proves WAIC's worth
-
BySHEXiaochenThe2023WorldArtificialIntelligenceConferencekickedoffinShanghaionThursday...
- Shopee新手指南:Shopee卖家中心用户界面介绍
-
1.Shopee各站点前台网页链接:2.Shopee各站点后台网页链接3.ShopeeAPP下载:安卓版下载链接:https://pan.baidu.com/s/1eSp8M1k#list/path...
- 打孩子犯法!日本拟立法禁止父母体罚孩子
-
日本虐童事件频发引发了社会的广泛关注。近日,日本打算对现行的儿童福利法案进行修订,禁止父母体罚子女,但也引发了网友对于体罚、虐待以及法律可行性的讨论。日本将禁止父母体罚子女ViaJapanTod...
- 新NAS到手后,你一定要学会的9个设置,威联通和群晖都是这样的。
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:小曹老师心念已久的NAS,终于到手了,期待着他能给我们数字化生活,带来更多的便捷和安心。...
- 苹果四大系统信息汇总(苹果手机系统分别有哪些)
-
【环球科技综合报道】据国外科技网站报道,苹果在6月13日举行全球开发者大会(WWDC),对iOS、MacOS、WatchOS、TVOS四大系统进行更新。MacOS:OSX系统将更名为“ma...
- 关于苹果iOS 10 系统 你需要了解的5个特点
-
【环球科技综合报道】据外媒5月10日报道,苹果公司将于今年6月举办全球开发者大会(WWDC)。在大会上,公司计划发布iOS10操作系统。该系统在iOS7操作系统的基础上进行了革新,具有里程碑式意义...
- Win10用户:不要尝试安装Media Center
-
IT之家(www.ithome.com):Win10用户:不要尝试安装MediaCenter本月初,微软正式发布了Win10技术预览版。最近有部分用户尝试通过Win8.1的安装密钥,来为Window...
- 半年做到美妆Top主播,“成分测评师李某人”究竟何许人?
-
从毛毛姐到口红一哥李佳琦,男网红主播成为了一个趋势,也有越来越多的男生开始扎堆进入美妆行业,淘宝主播“成分测评师李某人”是其中之一。只是,他做主播的初衷,倒不是为了当网红,而是想给自己的美妆品牌打开一...
- 《经典怀旧手游》新手必看玩法,背景玩法详细介绍!
-
经典重温,武林再现,十年经典,再创江湖!备受玩家期待的《武林外传十年之约手游》即将来袭。本次版本主题为“江湖再现”,全新开放的梦境机关城将带来全新挑战!塑魂系统的全面升级,新增第二期空位和道具将大幅提...
- 关于软考你想知道的都在这(软考有用吗 知乎)
-
软考相信学计算机的大家多多少少有过了解,就是全国计算机技术与软件专业技术资格(水平)考试,适用于大部分计算机同学和想转行IT行业的同学。这两天各省陆续出了报考的入口,大家可以积极报考!软考含金量较高,...
- 微软面向Linux平台放出4.3版本Skype
-
继日前微软针对iPhone平台放出5.0版本Skype,对用户界面进行多处调整之后软再次面向Linux平台放出了4.3.0.37版本Skype应用,带来了部分用户界面改善、全新的功能和系统后台性能优化...
- Linux dd命令有多强大?(linux的dig命令)
-
请关注本头条号,每天坚持更新原创干货技术文章。如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习1.前言本文主要介绍Linuxdd命令的强大功能与日常的使用案例。Linux中的dd命...