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

相关推荐
Java水解16 小时前
Mysql查看执行计划、explain关键字详解(超详细)
后端·mysql
知其然亦知其所以然20 小时前
MySQL 社招必考题:如何优化查询过程中的数据访问?
后端·mysql·面试
DemonAvenger21 小时前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化
程序新视界1 天前
如何在MySQL中创建聚集索引?
mysql
AAA修煤气灶刘哥1 天前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
程序新视界1 天前
学习MySQL绕不开的两个基础概念:聚集索引与非聚集索引
mysql
RestCloud2 天前
跨境数据传输:ETL如何处理时区与日期格式差异
mysql·api
RestCloud2 天前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
得物技术2 天前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
xiaok2 天前
mysql中怎么创建一个可控权限数据库账号密码给到开发者
mysql