首页 > 数据库技术 > 详细

mysql的MVCC

时间:2020-07-21 00:37:06      阅读:109      评论:0      收藏:0      [点我收藏+]

《高性能 MySQL》描述:
1. 通过两个隐藏列,一个保存行的创建时间,一个保存行的过期时间
RR隔离级别:检索创建时间在当前事务版本号之前的数据,同时会检查数据的删除时间,保证新的删除操作不可见。
select * from table where create_version <= ${version} and (delete_version is null or delete_version > ${version});

INNODB实现:

innodb的隐藏列不是创建时间和过期时间,而是当前事务的id列【在事务启动的时候向innodb申请的,是单调递增的】和删除标志位

 

undo log:undo log记录的是事务的反向逻辑操作

技术分享图片

                                  图片来源于极客时间 - MySQL实战45讲

 

可重复读:

按照可重复读的定义,一个事务启动的时候,能够看到所有已经提交的事务结果。但是之后,这个事务执行期间,其他事务的更新对他不可见。

Innodb为每个事务构造了1个数组,用来保存这个事务启动瞬间,当前所有已经启动了但是还没有提交的事务id。

数组中事务ID的最小值记为低水位,ID的最大值加1记为高水位。这个数组和高低水位就组成了事务的一致性视图。而数据版本的可见性规则,就是基于数据的 row trx_id 和这个一致性视图的对比结果得到的。

 技术分享图片

                                      图片来源于极客时间 - MySQL实战45讲

如果数据的row trx_id 小于低水位,则表明这个版本是已经提交的事务或者当前事务自己生成的,这个数据是可见的。

如果row trx_id大于高水位,则表明这个版本是后来启动的事务生成的,是不可见的。

如果row trx_id大于低水位,小于高水位:

  如果 row trx_id在数组中,则表明是没有提交的事务生成的,是不可见的。

  如果 row trx_id不在数组中,则表明是已经提交的事务生成的,是可见的。

 

读已提交:读已提交的计算逻辑与可重复读类似,不过读已提交的事务数组是在每一个语句执行前重新构造。

 

 

技术分享图片

 

mysql的MVCC

原文:https://www.cnblogs.com/juanmaofeifei/p/13348187.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!