mysql mvcc 的理解

Mvcc的设计初衷

mysql官网解释是

A consistent read means that InnoDB uses multi-versioning to present to a query a snapshot of the database at a point in time. The query
sees the changes made by transactions that committed before that point of time

翻译:快照读意味着InnoDB提供数据库在某个时间点的快照。查询将查看在此时间点之前提交的事务所做的更改
mysql mvcc设计初衷:
1.实现mysql事务各种隔离级别
2.实现读与写的无锁化

mvcc具体实现

要搞清楚mvcc,首先要理解两个undo日志和readview两个概念。

undo日志

Undo日志分为更新undo日志和插入undo日志 ,
插入undo日志会在插入成功之后被删除,更新undo日志是旧数据的拷贝版本

readview

Readview是指在一个事务中进行一次快照读的时候,会扫描当前活跃中的事务id作为一个字段,最小的活跃的事务的Id作为一个字段,最大的活跃事务id 加上1作为一个字段。

快照读流程

1 先拿当前最新数据的事务id和readview中的最小事务id比较,如果最新数据的事务id小,则当前数据可见
2 拿当前数据的事务id和readView中最大事务ID加上1的字段比较,如果如果当前数据事务iD大或者相等,则表示数据不可见
3如果以上条件不满足可见,那所说明当前数据的事务Id 在readview区间内,而Readview中包含活跃的事务Id,而事务id是自增的,所以该区间内其他的事物id也是快照读之前提交的事物,那判断如果readview中包含当前数据的事务id 如果包含则说明不可见,不包含则可见
4以上如果哪个条件判断当前数据不可见,则从undo日志中从首往尾直到找到可见的数据

你可能感兴趣的:(mysql,mysq,mvcc)