MVCC底层原理实现

MVCC的实现原理

了解实现原理之前,先理解下面几个组件的内容

1、 当前读和快照读

先普及一下什么是当前读和快照读。

当前读:读取数据的最新版本,并对数据进行加锁。

例如:insert、update、delete、select for update、 select lock in share mode。

快照读:读取数据的历史版本,不对数据加锁。

例如:select

最重要概念: MVCC原理是基于Undo Log、隐藏字段、Read View(读视图)实现的。

2、隐藏字段

MySQL的隐藏字段,当我们创建一张表时,InnoDB引擎会增加3个隐藏字段。

  • DB_TRX_ID(最近一次提交事务的ID):修改表数据时,都会提交事务,每个事务都有一个唯一的ID,这个字段就记录了最近一次提交事务的ID。
  • DB_ROLL_PTR(上个版本的地址):修改表数据时,旧版本的数据都会被记录到Undo Log日志中,每个版本的数据都有一个版本地址。这个字段记录的就是上个版本的地址。
  • DB_ROW_ID(隐藏主键):如果表中没有主键会默认生成该隐藏主键。
3、Undo log版本链

Undo log日志详解 :主要被用到了快照读这一个阶段


undo log版本链示意图:

过程:

  1. 第一次事务进行更新数据时候,首先会在 undo log版本链 记录原来数据的旧版本,以及该版本的指针,然后进行更新操作,此时会修改DB_TRX_ID为最近一次修改数据的事务ID,DB_ROLL_PTR指向上一次版本数据的指针,这样不断有事务更新该数据时候,表记录和 undo log 历史数据就组成了一个版本链。
4、Read View(读视图)

在事务中,执行SQL查询,就会生成一个读视图,它是快照读 SQL执行时MVCC提取数据的依据,记录并维护系统当前活跃的事务 id

快照读一般是读取的历史版本的读视图, 当前图 会生成一个最新版本的读视图。

读视图是基于下面几个字段实现的:

  • m_ids:当前系统中活跃的事务ID集合,即未提交的事务ID集合。

  • min_trx_id:m_ids中最小的ID

  • max_trx_id:下一个要分配的事务ID

  • creator_trx_id: 当前事务ID

读视图决定当前事务能读到哪个版本的数据,从表记录到 Undo Log 历史数据的版本链,依次匹配,满足哪个版本的匹配规则,就能读到哪个版本的数据,一旦匹配成功就不再往下匹配。

数据可见性规则:

当一个匹配可以访问该数据的时候就可以进行数据提取了,也就是直接返回查询数据

5、不同隔离级别下可见性分析

在不同的事务隔离级别下,生成读视图的规则不同:

READ COMMITTED(读已提交) :在事务中每一次执行快照读都生成一个读视图,每个读视图中四个字段的值都是不同的。

REPEATABLE READ(可重复读) :仅在事务中第一次执行快照读时生成读视图,后续复用这个读视图

相关推荐
java_logo1 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
咩咩啃树皮7 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚8 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
广州灵眸科技有限公司8 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
大模型码小白9 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司10 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地11 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
憧憬成为web高手11 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
wuqingshun31415911 小时前
TCP超时重传机制是为了解决什么问题?
java
段一凡-华北理工大学11 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化