【MySQL】Read view存储的机制,记录可见分析

read view核心组成

1.1 事务id相关

  • creator_trx_id: 创建该read view的事务id

每开启一个事务都会生成一个 ReadView,而 creator_trx_id 就是这个开启的事务的 id。

  • m_ids: 创建read view时系统的活跃事务(未提交的事务)id集合

当前有哪些事务正在执行且还没有提交,这些事务的id就存在这里

  • min_trx_id: 创建read view时系统中最早的活跃事务id

指的是创建的活跃事务id集合里最小的事务id,即最早加入的活跃事务id

  • max_trx_id: 创建read view时系统将分配给下一个事务的id

指的是下一个要生成的事务id,下一个要生成的肯定比所有id都要大

1.2 版本链指针

  • 指向当前数据行的版本链,用于遍历不同版本数据

read view工作原理

1.1 可见性判断

  • 行的事务id < 最小的活跃事务集合id:该版本已经提交,可见。
  • 行的事务id > 最大的活跃事务集合id:该版本由将来事务创建,不可见。
  • 最小的活跃事务集合id <= 行事务id < 最大的活跃事务集合id:
    • 如果行事务id在活跃事务id集合中:事务还没有提交,不可见。
    • 如果行事务id已经不在活跃事务id集合中:事务已经提交,可见。
  • 如果行事务id = 创建时生成的事务id:证明时当前事务对自己的修改,可见。

总结:当事务id在活跃事务id集合,或者大于活跃事务id集合中最大的活跃事务id时,这个版本不可见。


https://github.com/0voice

相关推荐
落叶的悲哀38 分钟前
mysql tidb like查询有换行符内容问题解决
数据库·mysql·tidb
凉栀お_44 分钟前
MySQL第五次作业(触发器,存储过程)
android·mysql·adb
wangchen_01 小时前
MySQL索引
数据库·mysql
哈__1 小时前
数据库迁移实操与金仓数据库技术优势:从语法兼容到自动化落地
数据库
蟹至之1 小时前
增删查改(其一) —— insert插入 与 select条件查询
数据库·mysql·增删查改
Yeats_Liao2 小时前
时序数据库系列(七):性能监控实战指标收集
数据库·后端·时序数据库
无心水2 小时前
【中间件:Redis】1、Redis面试核心:线程模型深度解析(6.0前后变化+工作流程)
数据库·redis·面试·redis面试·redis原理·redis线程模型·后端技术
milanyangbo2 小时前
从同步耦合到异步解耦:消息中间件如何重塑系统间的通信范式?
java·数据库·后端·缓存·中间件·架构
绛洞花主敏明2 小时前
Gorm(十四)的多条件叠加
数据库
枫叶丹43 小时前
【Qt开发】布局管理器(五)-> QSpacerItem 控件
开发语言·数据库·c++·qt