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

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 万的记录,然后我把这两个隐藏列也画出来,该记录的整个示意图如下:

对于使用 InnoDB 存储引擎的数据库表,它的聚簇索引记录中都包含下面两个隐藏列:
- trx_id,当一个事务对某条聚簇索引记录进行改动时,就会把该事务的事务 id 记录在 trx_id 隐藏列里;
- roll_pointer,每次对某条聚簇索引记录进行改动时,都会把旧版本的记录写入到 undo 日志中,然后这个隐藏列是个指针,指向每一个旧版本记录,于是就可以通过它找到修改前的记录。
在创建 Read View 后,我们可以将记录中的 trx_id 划分这三种情况:

一个事务去访问记录的时候,除了自己的更新记录总是可见之外,还有这几种情况:
- 如果记录的 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前端是做什么的工作的相关知识,接下来IT袋网小编就来介绍。 Web前端,顾名思义,是指负责网站或应用的用户界面部分。 它主要包括HTML、
-
Oracle数据库的存储过程写法 oracle编写存储过程
小编为你介绍Oracle数据库的存储过程写法的相关知识,很不错的方法小知识,建议收藏哦! Oracle存储过程是一种封装特定业务逻辑的可重用数据库对象。 它们通常用于执行批量操作、数据验证
-
5GHz无线网络:a+n+ac+ax
小编为大家讲一讲5GHz无线网络的IT知识,接下来IT袋网带大家一起了解。 1. 无线网络标准a 频段 :5GHz 最大速度 :最高可达54Mbps 特点 :802.11a是较早的5GHz标准之一,具有较高的速度和较低的干
-
为什么家里的IP都是192.168开头的?
跟大家分享为什么家里的IP都是192.168开头的的IT知识,具体介绍如下: IP地址是什么 我们知道,网络通讯的本质就是收发数据包。 如果说 收发数据包 就跟 收发快递 一样,那 IP地址 就类似于

