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

相关推荐
qq_192779871 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
u0109272711 小时前
使用Plotly创建交互式图表
jvm·数据库·python
爱学习的阿磊1 小时前
Python GUI开发:Tkinter入门教程
jvm·数据库·python
tudficdew2 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python
sjjhd6522 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
Configure-Handler2 小时前
buildroot System configuration
java·服务器·数据库
2301_821369613 小时前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
电商API_180079052473 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫
2401_832131954 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
打工的小王4 小时前
redis(四)搭建哨兵模式:一主二从三哨兵
数据库·redis·缓存