MySQL InnoDB意图锁有什么作用?

Xia*_*Jun 5 mysql database innodb

我已经阅读了有关意图锁定的MySQL手册? http://dev.mysql.com/doc/refman/5.5/zh-CN/innodb-locking.html#innodb-intention-locks

它说“使在多个粒度级别上的锁定切实可行”,但是如何呢?它没有告诉我们这件事。

谁能提供详细的解释和样本?

bis*_*hop 5

将 InnoDB 数据空间视为数据库的集合,每个数据库都是表的集合,每个表都是行的集合。这形成了一个层次结构,越来越低的层次提供越来越多的粒度。

现在,当你想在事务中更新这棵树的某些部分时,你怎么做?好吧,InnoDB 采用了多粒度锁定 (MGL)。MGL 中的机制是您指定“意图”以在特定粒度级别锁定为共享或独占,然后 MGL 将所有这些意图组合在一起并沿层次结构向上移动,直到找到给定这些意图必须锁定的最小生成集.

没有意图锁,您将拥有高级共享锁和排他锁,这实际上并没有给您太多灵活性:它们要么全部要么全无,这就是我们在 MyISAM 中看到的。但是 MGL 带来了预期共享预期独占的概念,正如我上面所说,它使用它来提供“刚好”的锁定。

如果您想了解具体的 C 级实现,请参阅 InnoDB 中的事务锁简介

  • 还是有点抽象。你能举一些例子吗?比如给出一个示例表和示例 sql 来展示它是如何工作的。 (2认同)

Nic*_*len 0

这个链接

表级意向锁仍未释放,因此其他事务无法在 S 或 X 模式下锁定整个表。

我认为意向锁的存在是为了让表锁更加有效(Mysql不必遍历entrie树来查看是否存在冲突锁)。