• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Mysql 的 MVCC 兑现原理

mysql 搞代码 7年前 (2018-06-04) 158次浏览 已收录 0个评论

mysql 的 MVCC 实现原理

mysql 中mvcc 实现原理,可翻看源码查看

1个6BYTE的 DB_TRX_ID标识 该行insert或者update操作的最新事务ID,删除操作也被当作一个update操
作(用1个bit表示删除)

1个7BYTE的DB_ROLL_PTR,指向写到rollback segment的一条undo log记录(update操作的话,记录
update前的ROW值)

1个6BYTE的DB_ROW_ID,该值随新行插入单调增加,当由innodb自动产生聚集索引时,聚集索引包括这个DB_ROW_ID的值,不然的话聚集索引中不包括这个值

那么这个DB_TRX_ID是实现MVCC策略的关键

在REPEATABLE READ事务隔离策略下(INNODB 默认)

假设 A事务 先于 B事务

在A中select 该行    ,在B中update该行,那么在B的update先于A的select的情况下

B: 创建 该行的拷贝,设置拷贝的DB_TRX_ID为当前事务,设置原行的DELETE标志,并设置DB_TRX_ID为当前事务

A: 检查该行的DB_TRX_ID ,发现这个值大于A的trx_id,放弃该行,然后检查该行拷贝的DB_TRX_ID和DELETE标志,发现该行在事务开始前没有被删除,于是使用该行的拷贝,也就是原来的值

那么也就实现了不同事务在同一时间看到同一行的不同数据


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Mysql 的 MVCC 兑现原理

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址