意向锁的作用

37 篇文章 0 订阅
3 篇文章 0 订阅

背景

在了解innodb事务并发控制的时候,里面提到了意向锁(intention lock),这里简单做下总结

应用场景

在innodb的使用场景中,里面有实现了行锁,具体有对行的读锁,写锁。另外,如果对一个表作一些统一的操作,表的层面,有表层级的读锁,写锁。那这个意向锁是干嘛用的?

我们假设一个场景,一个事务A正在写某个表T的第r行加了写锁,另一个事务B尝试去对整个表做操作(例如修改表结构的时候),B尝试去对整个表加一个写锁。则此时,需要执行两个步骤:
1)检查表T是否被上了读锁或者写锁。
2)遍历所有行,查看每一行是否被上了读锁或写锁。
步骤1可以很快执行,但是步骤2,则需要非常耗时,效率低下。此时,意向锁出场了

使用逻辑

意向锁的作用,相当于就是在低层次资源是否使用,加了一个tag来标识而已。对于步骤2的执行可以大大加速,仅此而已。
有了意向锁之后,事务A的操作步骤如下:
1)事务A上行锁时,先对表上一个写意向锁。
2)事务A对r行上一个写锁。

事务B想对表上写锁,操作步骤如下:
1)检查表T是否被上了读锁或写锁。
2)检查表是否被上了意向锁(因为所有行的读写之前,会先上意向锁),即可判断表中是否有任何一行被上了读锁或写锁。
步骤2在检查逻辑的时间复杂度,由于增加了意向锁之后,时间复杂度由O(n),提升到了O(1),效率大幅提升。另外,从这个逻辑来看,读和写的意向锁,两者是彼此兼容,当时读到这他们之间的兼容关系的时候,一直不太理解,没理解到点上。

总结

意向锁的设计目的,只是为了方便上层资源检查下层资源是否有被占用的加速设计,本身并不能增加并发度。
从意向锁的设计思路来看,我们在系统对层次资源的并发使用的时候,也是可以参数意向锁的设计思路,做到触类旁通,真正提升技术方案的理解水平!

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值