MVCC与锁
InnoDB存储引擎默认的事务隔离级别是REPEATABLE_READ, 在该隔离级别下,其采用Next-Key Locking的方式来加锁。
Innod存储引擎的普通SELECT操作使用一致性非锁定读,也即快照读。
当一个事务想对这条记录做改动时,首先会看看内存中有没有与这条记录关联的锁结构
,当没有的时候就会在内存中生成一个锁结构
与之关联。UPDATE,INSERT,DELETE等操作就会在内存中生成锁结构。
要理解MVCC,我们首先要明白MVCC解决的是什么问题?
既想保持事务的隔离性
,又想让服务器在处理访问同一数据的多个事务时性能尽量高些,读和写都加锁的效率太低了,鱼和熊掌不可得兼,舍一部分隔离性
而取性能者也。
所谓的
MVCC
(Multi-Version Concurrency Control ,多版本并发控制)指的就是在使用READ COMMITTD
、REPEATABLE READ
这两种隔离级别的事务在执行普通的SEELCT
操作时访问记录的版本链的过程,这样子可以使不同事务的读-写
、写-读
操作并发执行,从而提升系统性能。READ COMMITTD
、REPEATABLE READ
这两个隔离级别的一个很大不同就是:生成ReadView的时机不同,READ COMMITTD在每一次进行普通SELECT操作前都会生成一个ReadView,而REPEATABLE READ只在第一次进行普通SELECT操作前生成一个ReadView&#