mysql锁

218 阅读2分钟

官方文档

  1. intention锁:The main purpose of IX and IS locks is to show that someone is locking a row, or going to lock a row in the table.
    意图锁的主要目的是阻止锁表的动作

  2. Next-key Locks 其实是行锁和间隙锁的组合,用于锁最前面或者最后面的间隙(跟一般的间隙不一样因为只有相当于一边是一个开区间)

  3. insert intention locks 是一种类型的间隙锁主要是为了防止与间隙发生冲突。

  4. auto-inc locks 用于有自增列是锁表。在高并发的情况下会出现有锁争用的问题,所以MySQL5.1.22后做了优化,引入了参数innodb_autoinc_lock_mode用来优化该问题。首先把insert分为几个类型

INSERT-LIKE:指所有的插入语句,比如 INSERT、REPLACE、INSERT…SELECT、REPLACE…SELECT,LOAD DATA等
Simple inserts:指在插入前就能确定插入行数的语句,包括INSERT、REPLACE,不包含INSERT…ON DUPLICATE KEY UPDATE这类语句。
Bulk inserts:指在插入前不能确定得到插入行的语句。如INSERT…SELECT,REPLACE…SELECT,LOAD DATA.
Mixed-mode inserts:指其中一部分是自增长的,有一部分是确定的。

innodb_autoinc_lock_mode 设置为0通过表锁的方式进行,也就是所有类型的insert都用AUTO-inc locking
设置为1默认值,对于simple insert 自增长值的产生使用互斥量对内存中的计数器进行累加操作,对于bulk insert 则还是使用表锁的方式进行。
设置为2对所有的insert-like 自增长值的产生使用互斥量机制完成,性能最高,并发插入可能导致自增值不连续,可能会导致Statement 的 Replication 出现不一致,使用该模式,需要用 Row Replication的模式。
详见 本地保存一份/Users/lww/教程/mysql/INNODB自增主键的一些问题 - jyzhou - 博客园.pdf