MySQL数据库之MVCC
前言
什么是MVCC,它的全程就是Multi Version Concurrency Control(多版本并发控制)。在原始的数据库当中,只有读读可以并发, 其余像读写、写读、写写都需要阻塞;而再引入多版本并发控制以后,就只有写写是阻塞了。这就在很大的程度上提高了数据库的并发性能
书上说的
1、MVCC是被MySQL数据库中事务性存储引擎InnoDB所支持的;
2、应对高并发事务,MVCC要比加锁高效。
3、MVCC只在READ_COMMITED 和 REAPATABLE READ事务隔离级别下生效
4、MVCC可以使用乐观锁和悲观锁来解决
5、MVCC通过每行记录后面加三个隐藏列来实现的。
相关概念
如果对快照读和当前读还不明白的可以去去看看我的这篇笔记
传送门
快照读
快照读就是在执行一个select语句的时候,读取的是当前活跃事务能够看到的数据,具体的话有一个比较算法,后面会将。现在还需要区分的就是快照读对于读已提交和可重复读的事务隔离级别下的场景。
在innodb中(默认repeatable read级别), 事务在begin/start transaction之后的第一条select读操作后, 会创建一个快照(read view), 将当前系统中活跃的其他事务记录记录起来;
在innodb中(默认repeatable committed级别),