innodb的记录锁、gap锁、next-key锁
2010-06-06 18:49
423 查看
相关文章见:
http://dev.mysql.com/doc/refman/5.0/en/innodb-record-level-locks.html
http://hi.baidu.com/fishhust/blog/item/c4900b8bff4a2e1bc8fc7a81.html
http://dev.mysql.com/doc/refman/5.0/en/innodb-next-key-locking.html
对文章的总结如下:
(1)记录锁:在行相应的索引记录上的锁
(2)gap锁:是在索引记录间歇上的锁
(3)next-key锁:是记录锁和在此索引记录之前的gap上的锁的结合
(4)innodb行锁的加锁方式: 当根据innodb表的索引搜索时, 设置共享锁和排它锁在索引记录上
(5)行锁实际上是索引锁
(6)innodb_locks_unsafe_for_binlog:
当为0时 (disabled), 这个开启了gap锁;设置为1,关闭gap锁(这会导致幻读,引起主从同步不一致)。例子见http://book.51cto.com/art/200803/68129.htm
(7)开启这个选项innodb_locks_unsafe_for_binlog并不关闭gap锁在外键检查方面的作用
(8)在UPDATE和DELETE时,innodb首先对遇到的每一行加行锁;如果innodb_locks_unsafe_for_binlog开启,那么不匹配的行上的锁将被释放;如果未开启,不匹配的行上的锁也不释放,直到事务结束
(9)即使innodb表上没有索引,也会使用内部的clustered index来进行锁定;
(10)innodb除主键的索引之外的其他索引和clustered index在内部是建立一张索引对应表;当利用其他索引扫描记录时,对其他索引加的锁最后都转换为对clustered index加的锁
(11)在UPDATE模式下,对检索中遇到的记录加排它锁;在INSERT...SELECT模式下,对检索中遇到的记录加共享锁;在INSERT模式下,对检索中遇到的记录加排它锁;在DELETE模式下,对检索中遇到的记录加排它锁
(12)在使用unique index进行搜索,并且只返回一行时,不使用gap锁
(13)next-key锁举例:假设索引包括10,11,13,20,则next-key锁为:(negative infinity, 10],
(10, 11],
(11, 13],
(13, 20],
(20, positive infinity)
(14)使用next-key锁可以预防幻读
(15)gap锁在read_committed下或当
innodb_locks_unsafe_for_binlog=on时被关闭;当在这种情况下时,不匹配的行上的锁将被释放
http://dev.mysql.com/doc/refman/5.0/en/innodb-record-level-locks.html
http://hi.baidu.com/fishhust/blog/item/c4900b8bff4a2e1bc8fc7a81.html
http://dev.mysql.com/doc/refman/5.0/en/innodb-next-key-locking.html
对文章的总结如下:
(1)记录锁:在行相应的索引记录上的锁
(2)gap锁:是在索引记录间歇上的锁
(3)next-key锁:是记录锁和在此索引记录之前的gap上的锁的结合
(4)innodb行锁的加锁方式: 当根据innodb表的索引搜索时, 设置共享锁和排它锁在索引记录上
(5)行锁实际上是索引锁
(6)innodb_locks_unsafe_for_binlog:
当为0时 (disabled), 这个开启了gap锁;设置为1,关闭gap锁(这会导致幻读,引起主从同步不一致)。例子见http://book.51cto.com/art/200803/68129.htm
(7)开启这个选项innodb_locks_unsafe_for_binlog并不关闭gap锁在外键检查方面的作用
(8)在UPDATE和DELETE时,innodb首先对遇到的每一行加行锁;如果innodb_locks_unsafe_for_binlog开启,那么不匹配的行上的锁将被释放;如果未开启,不匹配的行上的锁也不释放,直到事务结束
(9)即使innodb表上没有索引,也会使用内部的clustered index来进行锁定;
(10)innodb除主键的索引之外的其他索引和clustered index在内部是建立一张索引对应表;当利用其他索引扫描记录时,对其他索引加的锁最后都转换为对clustered index加的锁
(11)在UPDATE模式下,对检索中遇到的记录加排它锁;在INSERT...SELECT模式下,对检索中遇到的记录加共享锁;在INSERT模式下,对检索中遇到的记录加排它锁;在DELETE模式下,对检索中遇到的记录加排它锁
(12)在使用unique index进行搜索,并且只返回一行时,不使用gap锁
(13)next-key锁举例:假设索引包括10,11,13,20,则next-key锁为:(negative infinity, 10],
(10, 11],
(11, 13],
(13, 20],
(20, positive infinity)
(14)使用next-key锁可以预防幻读
(15)gap锁在read_committed下或当
innodb_locks_unsafe_for_binlog=on时被关闭;当在这种情况下时,不匹配的行上的锁将被释放
相关文章推荐
- innodb的记录锁、gap锁、next-key锁
- 推荐:mysql锁 innodb下的记录锁,间隙锁,next-key锁
- Mysql加锁过程详解(9)-innodb下的记录锁,间隙锁,next-key锁
- MySQL InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析
- MYSQL锁之InnoDB record,gap and next-key locks
- MySQL InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析
- 理解innodb的锁(record,gap,Next-Key lock)
- innodb下的记录锁,间隙锁,next-key锁
- Mysql加锁过程详解(8)-理解innodb的锁(record,gap,Next-Key lock)
- 理解innodb的锁(record,gap,Next-Key lock)
- Mysql加锁过程详解(8)-理解innodb的锁(record,gap,Next-Key lock)
- 详谈innodb的锁(record,gap,Next-Key lock)
- innodb 物理行格式 compressed (怎么16进制中找不到最大最小伪记录)
- 反驳"MySQL InnoDB (不行)的性能问题",千万级别记录来测试说明
- Innodb锁机制:Next-Key Lock 浅谈
- MySQL源码:深度解析Innodb记录格式源码
- MySQL-InnoDB Compact 行记录格式
- innodb next-key lock引发的死锁
- Innodb锁机制:Next-Key Lock 浅谈
- innodb 通过undo构造出老版本记录流程