MVCC理解

innodb 通过B+树作为索引的数据结构,而主键所在的索引又称为聚蔟索引。聚簇索引是指索引和数据存放在同一个结构中。

 

其他的索引这是 索引中的叶子节点存放的是聚蔟索引叶子节点的键值。所以二级索引维护变的方便.

 

在Innodb主键索引结构叶子节点中, 除了RowId外, 还有trx_id : 表示最近修改的事务id.

db_roll_ptr:undo segment中undo log , 上一个版本数据在undo log 里的位置指针。

【1】 ReadView 策略

up_limit_id: 创建当前read view 时, 当前系统活跃事务最小版本号.

low_limit_id: 创建当前read view 时 当前系统活跃的事务最大版本号.

trx_ids : 当前系统活跃(未提交) 事务版本号集合. 我的理解是它是 创建当前read view 时所有活跃事务版本号集合。

creator_trx_id: 创建当前read view 的事务版本号;

 

Read View 匹配规则:

a. 数据事务ID 小于 up_limit_id 则显示

说明数据是在所有所有活跃事务之前创建, 可以显示.

b. 数据事务ID 大于 low_limit_id 则不显示

事务3 开启事务,目前只有这个活跃事务,则up_limit_id = low_limit_Id = 3.

如果数据事务ID 大于 low_limit_id, 表示是之后的事务创建的数据,不显示

c. 数据事务ID 大于等于 up_limit_id 并且 小于等于 low_limit_id

处于这个区间之间的 事务,在当前事务开始时有可能提交,有可能还没有提交。

当前数据事务ID 不存在活跃事务ID集合 或 等于creator_trx_id, 则显示

d. 不满足read view 条件时, 从undo log里面获取。 从 undo log 取到数据的历史版本, 直到符合read view 条件或者找不到返回空.

[2] undo log的理解

每一行数据都会有 db_roll_ptr 指针, 每一版本的数据行 形成一个链表,链表头部是最新版本数据。

db_roll_ptr 是上一个版本数据行的索引。 这里用于 Read View 匹配规则的第D条。

 

[3] 数据的trx_id

它总是等于操作它的事务ID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值