IT袋

当前位置:主页 > 经验教程 > 建站编程 >

MVCC 多版本并发控制是什么

MVCC 多版本并发控制是什么

时间:2024-03-18 15:01:09 来源:IT袋 作者:马勇
导读:MVCC 多版本并发控制是什么,关于这方面的知识你知道吗?的话题,接下来IT袋网小编就来介绍。 我们需要了解两个知识: Read View 中四个字段作用; 聚簇索引记录中两个跟事务有关的隐藏列; 那

MVCC 多版本并发控制是什么

关于这方面的知识你知道吗?的话题,接下来IT袋网小编就来介绍。

我们需要了解两个知识:

  • Read View 中四个字段作用;
  • 聚簇索引记录中两个跟事务有关的隐藏列;

那 Read View 到底是个什么东西?

MVCC 多版本并发控制是什么

Read View 有四个重要的字段:

  • m_ids :指的是在创建 Read View 时,当前数据库中「活跃事务」的事务 id 列表,注意是一个列表,“活跃事务”指的就是,启动了但还没提交的事务
  • min_trx_id :指的是在创建 Read View 时,当前数据库中「活跃事务」中事务id 最小的事务,也就是 m_ids 的最小值。
  • max_trx_id :这个并不是 m_ids 的最大值,而是创建 Read View 时当前数据库中应该给下一个事务的 id 值,也就是全局事务中最大的事务 id 值 + 1;
  • creator_trx_id :指的是创建该 Read View 的事务的事务 id

知道了 Read View 的字段,我们还需要了解聚簇索引记录中的两个隐藏列。

假设在账户余额表插入一条小林余额为 100 万的记录,然后我把这两个隐藏列也画出来,该记录的整个示意图如下:

MVCC 多版本并发控制是什么

对于使用 InnoDB 存储引擎的数据库表,它的聚簇索引记录中都包含下面两个隐藏列:

  • trx_id,当一个事务对某条聚簇索引记录进行改动时,就会把该事务的事务 id 记录在 trx_id 隐藏列里
  • roll_pointer,每次对某条聚簇索引记录进行改动时,都会把旧版本的记录写入到 undo 日志中,然后这个隐藏列是个指针,指向每一个旧版本记录,于是就可以通过它找到修改前的记录。

在创建 Read View 后,我们可以将记录中的 trx_id 划分这三种情况:

MVCC 多版本并发控制是什么

一个事务去访问记录的时候,除了自己的更新记录总是可见之外,还有这几种情况:

  • 如果记录的 trx_id 值小于 Read View 中的 min_trx_id 值,表示这个版本的记录是在创建 Read View已经提交的事务生成的,所以该版本的记录对当前事务可见
  • 如果记录的 trx_id 值大于等于 Read View 中的 max_trx_id 值,表示这个版本的记录是在创建 Read View才启动的事务生成的,所以该版本的记录对当前事务不可见
  • 如果记录的 trx_id 值在 Read View 的min_trx_id和max_trx_id之间,需要判断 trx_id 是否在 m_ids 列表中:

相关阅读

  • web前端是做什么的工作 程序员前端的薪资待遇情况

    web前端是做什么的工作 程序员前端的薪资待遇情况

    对于许多女生来说程序员前端的薪资待遇情况和web前端是做什么的工作的相关知识,接下来IT袋网小编就来介绍。 Web前端,顾名思义,是指负责网站或应用的用户界面部分。 它主要包括HTML、

  • Oracle数据库的存储过程写法 oracle编写存储过程

    Oracle数据库的存储过程写法 oracle编写存储过程

    小编为你介绍Oracle数据库的存储过程写法的相关知识,很不错的方法小知识,建议收藏哦! Oracle存储过程是一种封装特定业务逻辑的可重用数据库对象。 它们通常用于执行批量操作、数据验证

  • 5GHz无线网络:a+n+ac+ax

    5GHz无线网络:a+n+ac+ax

    小编为大家讲一讲5GHz无线网络的IT知识,接下来IT袋网带大家一起了解。 1. 无线网络标准a 频段 :5GHz 最大速度 :最高可达54Mbps 特点 :802.11a是较早的5GHz标准之一,具有较高的速度和较低的干

  • 为什么家里的IP都是192.168开头的?

    为什么家里的IP都是192.168开头的?

    跟大家分享为什么家里的IP都是192.168开头的的IT知识,具体介绍如下: IP地址是什么 我们知道,网络通讯的本质就是收发数据包。 如果说 收发数据包 就跟 收发快递 一样,那 IP地址 就类似于