前言
前两天关于事务的文章。
1.MySQL事务(基础入门)(高频考点)
2.MySQL事务的隔离级别(高频面试题)
今天来讲一讲 MVCC 的机制,MVCC 是什么?
MVCC
MVCC
英文名:Multi-Version Concurrency Control
中文名:多版本并发控制
MySQL 默认的存储引擎 InnoDB,InnoDB 是支持事务的,事务的实现就是靠 MVCC 来实现的。
MVCC 的实现相关的技术是
- read View
- 聚簇索引记录中的两个跟事务有关的隐藏列
- undo 日志
read View
Read View 是什么?一种实现 MVCC 的技术。
Read View 四个字段是什么?如下图
- Creator_trx_id:创建该 Read View 的事务的事务Id。
- m_ids:创建该 Read View 的事务时,数据库内的“活跃且未提交”的事务。
- min_trx_id:创建该 Read View 的事务时数据库内的“活跃且未提交”的事务中的最小的事务id。
- 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 的实现相关的技术是
- read View
- 聚簇索引记录中的两个跟事务有关的隐藏列
- undo 日志
Read View 由四个字段组成
- Creator_trx_id:创建该 Read View 的事务的事务Id。
- m_ids:创建该 Read View 的事务时,数据库内的“活跃且未提交”的事务。
- min_trx_id:创建该 Read View 的事务时数据库内的“活跃且未提交”的事务中的最小的事务id。
- max_trx_id:创建该 Read View 的事务时数据库给下一个事务的id值。当创建新的事务时就会使用这个事务id。
聚簇索引记录中的两个跟事务有关的隐藏列
- trx_id:该数据当前的事务id
- 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 届应届毕业生。欢迎关注,持续分享,包括但不限于技术文章。全网同名…