MySQL的MVCC原理,可见性算法流程图

以下针对InnoDB 存储引擎

几个重要组件和属性

行隐藏列

DB_TRX_ID:mysql会为每个事务分配一个事务id,该字段记录最后一次插入或更新该行的事务 id。

DB_ROLL_PTR:回滚指针,指向该行的 undo log。

DB_ROW_ID:当表没有主键且没有唯一非空索引时生成的隐藏主键。

在这里插入图片描述

Read View读视图

三个主要属性为

1.m_up_limit_id 最小活跃事务id

2.m_low_limit_id 当前出现过的最大的事务 id+1

3.m_ids 活跃事务id列表

undo log

undo log是链表结构,头部记录最新值,每次修改都会把当前行记录作为最新值插入链表
在这里插入图片描述

可见性算法

1,如果数据行的事务id小于Read View最小事务id,则该行数据对当前事务可见。

2,如果数据行的事务id>=Read View中记录的当前出现的最大事务id+1,则跳转步骤5执行。

3,事务id列表为空,则该行数据可见。

4,如果数据行的事务id大于等于Read View最小事务id,并且
小于Read View中记录的当前出现的最大事务id+1。

判断若存在于活跃事务id列表,则不可见。
判断若不存在于活跃事务id列表,则可见。

5,根据回滚指针在undo log中取出一条记录,从1步骤重复判断,直到找到满足条件的记录,否则返回空。

可见性算法流程图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43073775/article/details/121384273