Read View在MVCC里如何工作

Read View的结构

Read View中有四个重要的字段:

  • m_ids:创建 Read View 时,数据库中启动但未提交的「活跃事务」的事务 id 列表 。
  • min_trx_id:创建 Read View 时,「活跃事务」中事务 id 最小的值,即 m_ids 中的最小值 。
  • max_trx_id:创建 Read View 时,数据库中应分配给下一个事务的 id 值,为全局事务最大事务 id 值 + 1 。
  • creator_trx_id:创建该 Read View 的事务的事务 id 。

聚簇索引记录的两个隐藏列

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

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

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

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

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

判断规则

  • trx_id 小于 min_trx_id:此记录版本由在创建 Read View 前已提交的事务生成,对当前事务可见。
  • trx_id 大于等于 max_trx_id :该记录版本由在创建 Read View 后启动的事务生成,对当前事务不可见。
  • trx_id 在 min_trx_id 和 max_trx_id 之间
    • trx_id 在 m_ids 列表中:生成该版本记录的事务仍活跃(未提交) ,对当前事务不可见。
    • trx_id 不在 m_ids 列表中:生成该版本记录的事务已提交 ,对当前事务可见

这种通过版本链来控制并发事务访问同一个记录时的行为就叫MVCC(多版本并发控制)

相关推荐
Boop_wu1 小时前
[Java EE] 多线程编程进阶
java·数据库·java-ee
深瞳智检1 小时前
学习应用 第001期-Windows 10 用 CMD 安装 MySQL 全流程解析(免安装版)
数据库·windows·mysql·压缩包·环境安装
正在走向自律1 小时前
金仓数据库在发电行业的创新应用与实战案例
数据库·国产数据库·电力·kingbasees·电科金仓
华纳云IDC服务商2 小时前
MySQL数据库如何防止SQL注入攻击
数据库·sql·mysql
合作小小程序员小小店2 小时前
桌面开发,在线%物品代送,代接管理%系统,基于vs2022,c#,winform,sql server数据。
开发语言·数据库·sql·microsoft·c#
疏狂难除2 小时前
尝试rust与python的混合编程(二)
数据库·python·rust
小光学长2 小时前
基于微信小程序的家具商城系统g80l9675(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·微信小程序·小程序
j***82703 小时前
Mybatis控制台打印SQL执行信息(执行方法、执行SQL、执行时间)
数据库·sql·mybatis
g***26793 小时前
5、使用 pgAdmin4 图形化创建和管理 PostgreSQL 数据库
数据库·postgresql