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

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.lryc.cn/news/2398484.html

相关文章:

  • HDFS 写入和读取流程
  • 建筑工程施工进度智能编排系统 (SCS-BIM)
  • Laravel模型状态:深入理解Eloquent的隐秘力量
  • Spring Cloud Eureka:微服务架构中的服务注册与发现核心组件
  • matlab实现求解兰伯特问题
  • iOS 集成网易云信的音视频呼叫组件
  • 【Elasticsearch】search_after不支持随机到哪一页,只能用于上一页或下一页的场景
  • 深度解析 Qt 最顶层类 QObject:继承关系与内存生命周期管理
  • pikachu通关教程-XSS
  • k8s fsGroup
  • Spring Boot,注解,@ConfigurationProperties
  • AIGC学习笔记(9)——AI大模型开发工程师
  • git管理github上的repository
  • STM32学习之WWDG(原理+实操)
  • Keil MDK5.37或更高版本不再预装ARM Compiler Version5导致编译错误的解决方法
  • 【iOS(swift)笔记-14】App版本不升级时本地数据库sqlite更新逻辑二
  • 前端性能优化:提升用户体验的关键策略
  • Unity-UI组件详解
  • 基于大模型的短暂性脑缺血发作(TIA)全流程预测与干预系统技术方案
  • 嵌入式学习 D31:系统编程--Framebuf帧缓冲
  • 黑马点评完整代码(RabbitMQ优化)+简历编写+面试重点 ⭐
  • Java 大视界 -- Java 大数据在智能安防视频监控中的异常事件快速响应与处理机制(273)
  • 【数据库】安全性
  • 【图像处理入门】4. 图像增强技术——对比度与亮度的魔法调节
  • D2-基于本地Ollama模型的多轮问答系统
  • HALCON 深度学习训练 3D 图像的几种方式优缺点
  • 123网盘SDK-npm包已发布
  • 强制卸载openssl-libs导致系统异常的修复方法
  • 乐播视频v4.0.0纯净版体验:高清流畅的视听盛宴
  • Linux 命令全讲解:从基础操作到高级运维的实战指南