MVCC机制(重要知识点)

文章目录

  • 前言
  • MVCC
    • [read View](#read View)
    • [聚簇索引记录中的两个跟事务有关的隐藏列、undo 日志](#聚簇索引记录中的两个跟事务有关的隐藏列、undo 日志)
  • 总结

前言

前两天关于事务的文章。
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 届应届毕业生。欢迎关注,持续分享,包括但不限于技术文章。全网同名...

相关推荐
为什么不问问神奇的海螺呢丶13 小时前
Oracle database SYSAUX 表空间占用率过高处理方案
数据库·oracle
fengxin_rou13 小时前
【MySQL SQL 执行全链路剖析】:执行计划、慢查询与经典场景优化指南
数据库·sql·mysql
betazhou13 小时前
LOG_ARCHIVE_DEST_2 ORA-01033: ORACLE initialization or shut
数据库·oracle·oracle19c adg
思诺学长13 小时前
MySQL——数据库并发控制策略: 乐观锁与悲观锁
数据库
fengxin_rou13 小时前
【Spring AI 集成 DeepSeek 实现 AI 摘要与 RAG 问答】:从原理到落地实践
数据库·mysql·rag·deepseek
No8g攻城狮13 小时前
【异常解决】SpringBoot3 + 人大金仓 V8+MyBatis-Plus 获取新增自增 ID
数据库·mybatis·人大金仓·国产信创
鱼听禅13 小时前
CentOS搭建SVN服务器
数据库·postgresql·sqlserver
ylscode13 小时前
微软Edge浏览器启动时停止将已保存的密码加载到内存中
网络·数据库·安全·安全威胁分析
电魂泡哥20 小时前
SQL出现filesort 一定慢吗
数据库·sql
muddjsv21 小时前
大中小型企业数据层配置规模分析与选型指南
数据库