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

相关推荐
月光水岸New2 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6752 小时前
数据库基础1
数据库
我爱松子鱼2 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo3 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser4 小时前
【SQL】多表查询案例
数据库·sql
Galeoto4 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)4 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231114 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白4 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码4 小时前
【SQL实验】触发器
数据库·笔记·sql