MySQL InnoDB存储引擎中的锁(二)
2017-09-17 18:04
218 查看
1. 锁的算法
InnoDB存储引擎中有三种行锁算法:Record Lock:单个行记录上的锁
Gap Lock: 间隙锁,锁定一个范围,但不包含记录本身
Next-key Lock: Gap Lock + Record Lock, 锁定一个范围, 并且锁定记录本身
1.1 Next-Key Lock
Next_Key Lock 是结合了Gap Lock 和 Record Lock的一种锁定算法,例如有一个索引有10, 11, 13, 20 四个值, 则Next-Key Lock的锁定区间为(-∞, 10), [10, 11), [11, 13), [13, 20), [20, +∞)。当查询的索引含有唯一属性时, Next-Key Lock会降级为Record Lock,仅锁住索引本身,而不是范围。
对于辅助索引, 则会使Next-Key Lock,并且InnoDB引擎还会对辅助索引的下一个键值加上Gap Lock。
InnoDB使用Next-Key Locking机制来避免幻读问题。
幻读是指在同一事务下, 连续执行两次同样的SQL语句可能导致不同结果, 第二次的SQL语句可能会返回之前不存在的行。
2. 死锁
2.1 概念
死锁是指两个或者两个以上的事务在执行过程中,因争夺锁资源造成的一种互相等待的现象。
解决死锁的方式:
超时回滚:当一个事务等待时间超过设定的时间时进行回滚, 另一个事务就可以继续进行, InnoDB中通过参数innodb_lock_wait_timeout来设置超时时间。
wait-for graph(等待图):保存锁的信息链表, 事务的等待链表,通过两个链表构建一张图,若图存在环,则说明存在死锁。
相关文章推荐
- MySQL innodb存储引擎做成表分区
- MySQL InnoDB存储引擎锁机制实验
- Mysql技术内幕——InnoDB存储引擎
- MySQL(基于InnoDB存储引擎)
- MySQL InnoDB存储引擎中的锁
- mysql innodb存储引擎介绍
- 浅析Mysql InnoDB存储引擎事务原理
- 《mysql技术内幕 InnoDB存储引擎(第二版)》阅读笔记
- 读——MySQL技术内幕:InnoDB存储引擎
- MySQL InnoDB存储引擎undo redo解析
- MySQL 原理研究:mysql(innodb存储引擎)事务日志
- mysql-innodb存储引擎概述
- MySQL InnoDB存储引擎之表(二)
- MySQL 原理研究:mysql(innodb存储引擎)事务日志
- MySql中innodb存储引擎事务日志详解
- 读书笔记 —— 《MySQL技术内幕 InnoDB存储引擎》
- MySQL技术内幕:InnoDB存储引擎
- Mysql技术内幕——InnoDB存储引擎
- mysql5.7——innodb存储引擎总结
- MySQL InnoDB存储引擎undo redo解析