当前位置: 首页 > backend >正文

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(多版本并发控制)

http://www.xdnf.cn/news/10820.html

相关文章:

  • 【Pandas】pandas DataFrame rename
  • Spring中@Controller和@RestControlle注解的区别
  • leetcode hot100刷题日记——37.三数之和
  • 光伏功率预测新突破:TCN-ECANet-GRU混合模型详解与复现
  • 网络安全运维实训室建设方案
  • Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用--简单的工作进度管理
  • 攻防世界RE-1000Click
  • 深入理解 JSX:React 的核心语法
  • Java中并发修改异常如何处理
  • (四)动手实现多层感知机:深度学习中的非线性建模实战
  • 操作系统:生态思政
  • 系统设计面试利器:The System Design Primer开源项目介绍
  • 嵌入式系统:从技术原理到未来趋势(驱动程序篇)
  • SQL Indexes(索引)
  • 基于 NXP + FPGA+Debian 高可靠性工业控制器解决方案
  • Agent智能体应用教程系列(四):仅需几步,拥有自己专属的多agent智能体!
  • win11中使用grep
  • 小牛电动2025新品矩阵,引领技术普惠新风潮
  • 生产环境中安装和配置 Nginx 以部署 Flask 应用的详细指南
  • Windows Server部署Vue3+Spring Boot项目
  • Linux运维笔记:1010实验室电脑资源规范使用指南
  • Day38 训练
  • 服务端定时器的学习(一)
  • C#面试问题61-80
  • AgenticSeek:您的本地AI智能大脑,免费且私密
  • 线程相关面试题
  • 【leetcode】20. 有效的括号
  • ​链表题解——回文链表【LeetCode】
  • Go 为何天生适合云原生?
  • 前端下载文件,文件打不开的问题记录