MVCC详解(小白也看得懂)

阅读: 评论:0

MVCC详解(小白也看得懂)

MVCC详解(小白也看得懂)

MVCC:多版本并发控制。

隐藏字段

主要字段就是:

<_id:当前事务id。

undo log

undo log就是用于存储回滚日志的文件,就是存储我们每个版本的信息,通过roll_pointer生成一个版本链表。

ReadView

在ReadView中的重要字段:

m_ids:当前活跃的事务id的集合。

min_trx_id:当前最小的活跃事务的id。

max_trx_id:当前最大的活跃事务的id。

creator_id:当前创建ReadView的事务的id。

例子:

 此时我们就可以计算出对应的字段的值。通过版本链计及对应的选取规则来算出对应的版本。

 版本链数据访问规则:

trx_id:当前版本的事务id。

<_id == creator_id。(判断当前的事务ids是否为创建ReadView的事务id)
2.trx_id < min_trx_id。 (判断当前的事务id是否小于最小的活跃的事务id,如果成立就是说明此版本的是=事务已经提交)

<_id > max_tra_id。(判断当前的事务id是否在创建ReadView之后创建的,如果是的话则不复合条件)

4.min_trx_id <= trx_id <= max_trx_id 并且不包含在活跃的事务id集合中。(表示该事务已经提交)

按照当前的事务id和版本链数据的访问规则就可以确定对应的版本。

不同的隔离级别对应的版本的结果是不一样的。

读已提交:在每次读取查询数据的时候就会创建一个新的ReadView。(所以在每次读取数据的时候结果是不一样的)

可重复读:只在第一次查询数据的时候才会创建ReadView,后续的查询都是使用该ReadView的复制。(所以在每次读取数据的时候结果是一样的)

回答话术

在MVCC中主要分三个部分:隐藏字段,undo log, ReadView。

隐藏字段中主要是:trx_id(当前的事务id),roll_pointer(指向上一版本的地址,配合undo log生成版本链)

undo log :回滚日志,用于存储每个版本的信息。通过roll_pointer生成版本链。

ReadView:通过事务id和对应的版本链数据访问规则确定对应的版本信息。

不同的隔离级别的版本结果是不一样的,因为在读已提交时每次查询数据的时候都会创建新的ReadView,在可重复读时只有第一次才会创建ReadView,获取的查询操作都是使用该ReadView的复制。

本文发布于:2024-01-28 09:56:08,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17064069746597.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:详解   看得懂   MVCC   小白也
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23