- read view
readView是MVCC多版本并发控制的一个实现手段,其实就是在事务开启的时候一个事务列表集合,配合事务隔离级别及UNDO使用InnoDB 的内部快照。在不同的隔离级别下,事务启动时(有些情况下,可能是SQL语句开始时)看到的数据快照版本可能也不同。在RR、RC、RU(READ UNCOMMITTED)等几个隔离级别下会用到 read view。 - 一致性读
读请求基于某个时间点得到一份那时的数据快照。而不管同时其他事务对数据的修改。查询过程中,如果其他事务对数据做了修改,那么就从undo log获得旧版本的数据。这样做就有效的避免了需要加锁(阻止其他事务对数据进行修改)导致事务并行度下降的问题。
在可重复读(REPEATABLE READ)隔离级别下,数据快照版本是在第一个读请求发起的时候创建。在读已提交(READ COMMITTED)隔离级别下,则是在每次读请求时都会重新创建一份快照。
一致性读是InnoDB在RR和RC下处理SELECT请求的默认模式。由于一致性读不会在它请求的表上加锁,其他事务可以同时修改数据不受影响。
总结:
RR级别下,事务中的第一个SELECT请求才开始创建read view;
RC级别下,事务中每次SELECT请求都会重新创建read view;