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的版本,返回结果

 

posted @ 2022-03-01 11:42  hugeQAQ  阅读(134)  评论(0)    收藏  举报