【问题标题】: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

它说“使多粒度级别的锁定变得实用”,但是如何实现呢?它没有告诉我们。

谁能给个详细的解释和示例?

【问题讨论】:

    标签: mysql database innodb


    【解决方案1】:

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

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

    如果没有意向锁,您将拥有高级别的共享独占锁,它们实际上并没有给您太大的灵活性:它们全有或全无,这就是我们见 MyISAM。但是 MGL 带来了 intended sharedintended exclusive 的概念,正如我上面所说的那样,它使用它们来提供“刚好够用”的锁定。

    如果您想了解具体的 C 级实现,请参考Introduction to Transaction Locks in InnoDB

    【讨论】:

    • 还是有点抽象。你能举一些例子吗。比如给出一个示例表和示例 sql 来展示它是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多