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步骤重复判断,直到找到满足条件的记录,否则返回空。

可见性算法流程图

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MVCC(Multi-Version Concurrency Control,多版本并发控制)是MySQL数据库中实现事务隔离级别的一种机制。MVCC基于数据库中数据的版本来实现并发控制。每个事务在读取数据时,都会读取该数据的一个版本,而不是读取最新的数据。 MVCC的实现原理是:在每个记录(行)的后面,保存了该记录的创建时间和过期时间(或删除时间)。在读取数据时,MySQL会根据事务的隔离级别以及事务启动时的时间戳来选择合适的版本。具体来说,MySQL会根据以下规则选择版本: - 读未提交(Read Uncommitted):读取最新版本的数据,不考虑其他事务的并发操作。 - 读已提交(Read Committed):读取已经提交的数据的最新版本,不读取未提交的数据。 - 可重复读(Repeatable Read):在同一个事务中,读取的数据版本是该事务启动时的版本。在这个事务中,其他事务对该数据的更新不会影响该事务读取的数据版本。 - 串行化(Serializable):在同一个事务中,读取的数据版本是该事务启动时的版本。在这个事务中,其他事务对该数据的更新不会影响该事务读取的数据版本。同时,该事务对数据的更新也不会影响其他事务的并发操作。 当一个事务需要更新数据时,MySQL会创建该数据的一个新版本,并将新版本的创建时间设置为当前时间。同时,MySQL会将旧版本的过期时间设置为当前时间。 MVCC机制可以提高数据库的并发能,但也会增加数据库的存储空间和I/O负载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值