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

Read View是实现MVCC的三大前提之一,那么它是在什么时候建立的

问题

Read View是实现MVCC的三大前提之一,那么它是在什么时候建立的

我的回答

在MySQL InnoDB的MVCC实现中,Read View的建立时机主要取决于事务的隔离级别。

对于'读已提交'(READ COMMITTED)隔离级别,Read View是在每次读取操作执行时都会重新创建的。这意味着同一个事务中的多次读取可能会看到不同的数据,因为每次读取都会创建新的Read View,能够看到其他已提交事务的最新修改。

而在'可重复读'(REPEATABLE READ)隔离级别下,Read View只在事务开始后的第一个读操作时创建一次,然后在整个事务过程中都使用这个Read View。这就保证了事务期间多次读取看到的数据是一致的,实现了可重复读的特性。

具体来说,Read View主要包含以下关键信息:

  • 创建Read View时系统中活跃的事务ID列表(m_ids)
  • 创建时刻系统中最小的活跃事务ID(m_up_limit_id)
  • 创建时刻已分配的最大事务ID(m_low_limit_id)

通过这些信息,InnoDB可以判断某个版本的数据对当前事务是否可见。判断规则是:

如果数据版本的事务ID小于m_up_limit_id,说明这个版本是在Read View创建前已经提交的,对当前事务可见。

如果数据版本的事务ID大于或等于m_low_limit_id,说明这个版本是在Read View创建后才开始的事务产生的,对当前事务不可见。

如果数据版本的事务ID在两者之间,则需要查看该事务ID是否在m_ids列表中,如果在,说明创建Read View时该事务还是活跃的,对当前事务不可见;如果不在,说明创建Read View时该事务已经提交,对当前事务可见。

http://www.dtcms.com/a/348028.html

相关文章:

  • frida安装配置及其使用方法
  • 一个奇怪的问题-Python会替代Java吗?技术语言之争的真相-优雅草卓伊凡
  • Java 大视界 -- Java 大数据在智能交通智能公交系统中的乘客流量预测与车辆调度优化
  • 程序里的依赖和中间件的依赖冲突,怎么解决
  • Docling:一个基于AI驱动的免费文档解析工具
  • Python性能优化实战(二):让循环跑得比博尔特还快
  • [身份验证脚手架] 应用布局如何构建
  • 初学python的我开始Leetcode题-16
  • CTFshow系列——命令执行web49-52
  • assert使用方法
  • Redis 高可用开发指南
  • 力扣594:最和谐子序列
  • 客流特征识别误报率↓76%!陌讯多模态时序融合算法在智慧零售的实战解析
  • Tesla智能座舱域控制器(MCU)的系统化梳理
  • 【网络运维】Shell 脚本编程:if 条件语句
  • 【40页PPT】数字工厂一体化运营管控平台解决方案(附下载方式)
  • Spark04-MLib library01-机器学习的介绍
  • SNMP 协议的总结
  • 每日算法题【链表】:相交链表、环形链表、环形链表II
  • 鸿蒙分布式计算实战:用 ArkTS+Worker 池落地可运行任务管理 Demo,从单设备到跨设备全方案
  • [二维前缀和]1277. 统计全为 1 的正方形子矩阵
  • HarmonyOS实战(DevEco AI篇)—深度体验DevEco CodeGenie智能编程助手
  • Function + 枚举 + Map:轻量路由器的最佳实践
  • ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘192.168.24.96‘ (10060)
  • 基于Java、GeoTools与PostGIS的对跖点求解研究
  • 大数据毕业设计选题推荐:基于Spark+Django的学生创业数据分析可视化系统详解 毕业设计/选题推荐/深度学习/数据分析/数据挖掘/机器学习/随机森林
  • 网络编程socket-Udp
  • Linux网络启程
  • Java基础(十四)分布式
  • 《Distilling the Knowledge in a Neural Network》论文PDF分享, 2015 年,谷歌提出了 “知识蒸馏” 的概念