MYSQl-MVCC概述
1、什么是mvcc
MVCC(Multi-Vesion Concurrency Control),即多版本并发控制,意思就是一条数据有多个版本,查询的时候,通过一系列操作,能够在不加锁的情况下获取到满足事务隔离级别的数据,提高并发。
2、关键概念
readVeiw-读视图 用来描述哪些版本的数据可见
当前读-读取最新版本的数据
快照读-读取历史版本的快照数据
undo log-记录数据的历史版本
3、mvcc
每一条数据有几个字断(当前事物id,指向undolog的指针),在执行快照读语句的时候,先构建一个readVeiw,记录下当前活跃事物id列表【minId,maxId】,查询数据时,
如果一条记录的当前事务id<minId,说明这是开启这个事务之前的已经提交的事务的数据,对当前事务可见,返回结果
如果一条记录的当前事务id>maxid,说明这是开启这个事务以后,又开启的其他事物提交的数据,对当前事务不可见,这时要通过undolog指针遍历历史版本,找到事务id<=当前事务id的版本,返回结果
如果一条记录的当前事务id在minId 和maxId之间且记录的事务id不在当前readVeiw的活跃事物中,说明开启当前事务时,这条记录的事务已经提交,则对当前事务可见,返回结果(似乎只有在极限情况下才出现?例如当前事务id=5,readVeiw中活跃事物id = 【3,4,7】,假设当前记录的事务id=6,按照id自增的原理,那么这个id=6的事务应该在id=5的后面开启,但是又不在活跃事物中,说明id=6的id在id=5的开启时已经提交)
如果一条记录的当前事务id在minId 和maxId之间且记录的事务id在当前readVeiw的活跃事物中,根据事物隔离级别,如果是RC(读提交),则对当前事务可见,返回结果。如果是RR(可重复读),则对当前事务不可见,这时要通过undolog指针遍历历史版本,找到事务id<=当前事务id的版本,返回结果

浙公网安备 33010602011771号