-
当前读和快照读
-
MVCC如何帮助锁实现RC和RR
-
MVCC是一种多版本并发控制机制。
-
大家都应该知道,使用锁和锁协议来实现相应的隔离级别来进行并发控制,味道虽好但因为锁会造成事务阻塞,导致并发性能会受到一定的影响。而多版本并发控制使得对同一行记录做读写的事务之间不用相互阻塞等待(写写还是要阻塞等待,因为事务对数据进行更新时会加上排他锁),提高了事务的并发能力,可以认为MVCC是一种 解决读写阻塞等待的行级锁 。
-
也就是说在InnoDB中MVCC技术是和行锁机制一起使用的
-
所谓多版本就是数据库表中每一行数据都可能存在多个版本,对数据库的任何修改的提交都不会直接覆盖之前的数据,而是产生一个新的版本与老版本共存,通过读写数据时读不同的版本来避免加锁阻塞。不同的存储引擎实现的MVCC多少有些差异,这里主要讨论下Mysql的默认存储引擎InnoDB对MVCC的实现原理。MVCC的实现主要依赖于数据库在每个表中添加的三个隐藏字段以及事务在查询时创建的快照(read view)和数据库的撤销日志(Undo log)。
-
MVCC的重要特性:
(1)MVCC只支持RC(读取已提交)和RR(可重复读)隔离级别。
(2)MVCC能帮助锁机制解决脏读、不可重复读问题,不能解决丢失更新问题和幻读问题。
(3)MVCC是用来解决读写操作之间的阻塞问题。使得在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数