MVCC机制

慈云数据 2024-05-29 技术支持 26 0

个人理解篇,不一定对,应付面试的时候看的

MVCC(Multi-Version Concurrency Control)全称多版本并发控制,主要用在隔离模式下的提交读、可重复读模式下,依赖于readview和undolog链

一、readview

1、结构

字段

备注

m_ids

活跃事务id集合

min_trx_id

活跃事务id集合中最小事务id

max_trx_id

当前分配给新事务的最大事务id+1

creator_trx_id

生成readview时,当前事务id

2、举例

现在系统中开启了事务A、B、C,对应的trx_id分别是1、2、3

此时有个新事务的读操作时,会产生如下readview

m_ids

1,2,3

min_trx_id

1

max_trx_id

5

creator_trx_id

4

二、undolog链

1、结构

字段

备注

trx_id

事务id

roll_point

上一事务指针,指向上一个undolog节点

key

操作行记录的主键id

type

执行类型(update、insert、delete)

commonvalue

具体的值,没搞清楚具体是什么,但是新值、旧值、更新逻辑应该都有

2、举例

现在系统中开启了事务A、B、C,对应的trx_id分别是1、2、3

此时有个新事务的读操作时,会读取一下undolog链如下

三、操作

1、新事物发起读操作时产生readview,然后从undolog链开始查找并进行如下判断逻辑

if(trx_id == creator_trx_id)访问的是自己的事务,允许访问

if(trx_id

if(trx_id >= max_trx_id)访问的是在生成readview之后的事务,不允许访问

if(min_trx_id

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon