MVCC机制(重要知识点)


前言

前两天关于事务的文章。
1.MySQL事务(基础入门)(高频考点)
2.MySQL事务的隔离级别(高频面试题)

今天来讲一讲 MVCC 的机制,MVCC 是什么?


MVCC

MVCC

英文名:Multi-Version Concurrency Control
中文名:多版本并发控制

MySQL 默认的存储引擎 InnoDB,InnoDB 是支持事务的,事务的实现就是靠 MVCC 来实现的。

MVCC 的实现相关的技术是

  1. read View
  2. 聚簇索引记录中的两个跟事务有关的隐藏列
  3. undo 日志

read View

Read View 是什么?一种实现 MVCC 的技术。

Read View 四个字段是什么?如下图

在这里插入图片描述

  1. Creator_trx_id:创建该 Read View 的事务的事务Id。
  2. m_ids:创建该 Read View 的事务时,数据库内的“活跃且未提交”的事务。
  3. min_trx_id:创建该 Read View 的事务时数据库内的“活跃且未提交”的事务中的最小的事务id。
  4. max_trx_id:创建该 Read View 的事务时数据库给下一个事务的id值。当创建新的事务时就会使用这个事务id。

聚簇索引记录中的两个跟事务有关的隐藏列、undo 日志

当我们没有设定自增的主键id且没有一个唯一不为空的字段时,数据库会默认创建一个隐藏的字段值作为主键。
而数据库还有两个与事务有关的隐藏列。
分别未:trx_id,roll_pointer,如图

在这里插入图片描述

trx_id:该数据当前的事务id
roll_pointer:回滚点,指向undo日志,为了就是能回滚到之前的数据。
undo日志:undo日志,用于记录当前事务数据的前一个事务的数据。

比如,上图的undo日志就是
在这里插入图片描述
这种roll_pointer 练成一条又一条链的,我们就叫做版本链。

而这三种技术 Read View、两个隐藏列,undo 日志的运行机制就是MVCC。


总结

MVCC,Multi-Version Concurrency Control ,多版本并发控制。

MVCC 的实现相关的技术是

  1. read View
  2. 聚簇索引记录中的两个跟事务有关的隐藏列
  3. undo 日志

Read View 由四个字段组成

  1. Creator_trx_id:创建该 Read View 的事务的事务Id。
  2. m_ids:创建该 Read View 的事务时,数据库内的“活跃且未提交”的事务。
  3. min_trx_id:创建该 Read View 的事务时数据库内的“活跃且未提交”的事务中的最小的事务id。
  4. max_trx_id:创建该 Read View 的事务时数据库给下一个事务的id值。当创建新的事务时就会使用这个事务id。

聚簇索引记录中的两个跟事务有关的隐藏列

  1. trx_id:该数据当前的事务id
  2. roll_pointer:回滚点,指向undo日志,为了就是能回滚到之前的数据。

每一个 roll_pointer 都会连接 undo 日志上一条事务的数据。形成版本链。

这也就是MVCC。


有启发点个赞 🌹

好文章不要错过,最近給大家分享的文章

MySQL的基础知识

1.MySQL的基础架构
2.SQL语句的执行流程
3.MySQL 的存储引擎

MySQL 索引

1.MySQL索引入门(一文搞定)
2.MySQL索引面试题(高频)

MySQL 事务
1.MySQL事务(基础入门)(高频考点)
2.MySQL事务的隔离级别(高频面试题)

预计下篇分享:事务相关面试题(查漏补缺)或MySQL的锁

本篇参考:小林coding

我是小辉,正在进行 Java 实习的 24 届应届毕业生。欢迎关注,持续分享,包括但不限于技术文章。全网同名…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java编程小辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值