MySQL InnoDB 意图锁用于啥?
Posted
技术标签:
【中文标题】MySQL InnoDB 意图锁用于啥?【英文标题】:What are MySQL InnoDB intention locks used for?MySQL InnoDB 意图锁用于什么? 【发布时间】:2016-08-25 14:40:53 【问题描述】:我已经阅读了关于意图锁的mysql手册: http://dev.mysql.com/doc/refman/5.5/en/innodb-locking.html#innodb-intention-locks
它说“使多粒度级别的锁定变得实用”,但是如何实现呢?它没有告诉我们。
谁能给个详细的解释和示例?
【问题讨论】:
【参考方案1】:将 InnoDB 数据空间视为数据库的集合,每个数据库都是表的集合,每个表都是行的集合。这形成了一个层次结构,其中越来越低的级别提供越来越多的粒度。
现在,当你想在事务中更新这棵树的某些部分时,你是怎么做的?好吧,InnoDB 雇佣了multiple granularity locking (MGL)。 MGL 中的机制是您指定“意图”以在特定粒度级别锁定为共享或独占,然后 MGL 将所有这些意图组合在一起并沿层次结构向上移动,直到找到在给定这些意图时必须锁定的最小跨度集.
如果没有意向锁,您将拥有高级别的共享和独占锁,它们实际上并没有给您太大的灵活性:它们全有或全无,这就是我们见 MyISAM。但是 MGL 带来了 intended shared 和 intended exclusive 的概念,正如我上面所说的那样,它使用它们来提供“刚好够用”的锁定。
如果您想了解具体的 C 级实现,请参考Introduction to Transaction Locks in InnoDB。
【讨论】:
还是有点抽象。你能举一些例子吗。比如给出一个示例表和示例 sql 来展示它是如何工作的。以上是关于MySQL InnoDB 意图锁用于啥?的主要内容,如果未能解决你的问题,请参考以下文章