MVCC 是什么
MVCC(Multi-Version Concurrency Control):
- 多版本并发控制,主要是为了提高数据库的并发性能
- 在很多情况下为了避免加锁,大都实现了非阻塞的读操作,写操作也只需要锁定必要的行
- innodb的mvcc通过在每行记录后面保存2个隐藏的列来实现
- 这2个列一个保存了行的创建时间,一个保存行的过期时间
- 但是存储的不是实际的时间值,而是系统的版本号,每开始一个新的事务,系统版本号都会自动递增,事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较
- mvcc只能在READ COMMITTED和REPEATABLE READ两个隔离级别下工作,因为READ UNCOMMITTED总是读取最新的数据行,而不是符合当前事务版本的数据行,而SERIALIZABLE则是对所有读取的行都加锁