什么是MVCC机制

发布时间:2021-10-14 10:09:53 作者:iii
来源:亿速云 阅读:317

本篇内容主要讲解“什么是MVCC机制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是MVCC机制”吧!

1,undo log 版本链回顾

我们上篇讲解了undo log版本链是怎样的《MYSQl深入探索系列二 undo log》咱们在来看下那张图

什么是MVCC机制

2,什么是readview

我们不是说mvcc吗?怎么又出现个readview呢,这俩有什么关联么?

别着急,听我慢慢道来咱们还是简单画个图,看下这readview是个什么东西和mvcc是什么关系

什么是MVCC机制

通过上图可以基本上分清楚他们3个之间的关系了吧 readview中主要就这4个东西

这几个值究竟有什么用呢?比如说 当前的readview min_txr_id: 20 max_txr_id: 30  creator_txr_id:20  [20,30]  那么这个readview就是 事务20创建的,此时undo 版本链有 3个 分别对应txr_id 19  22  29 哪改事务就只能读取txr_id为19的那个版本,其他2个版本是读取不到的。

3,事务的隔离级别以及每种隔离级别带来的问题

我们都知道有4中事务隔离级别

这几种隔离级别常见的问题是什么呢?

     ru 情景一 :有 A B 两个事务同时来操作同一条数据,A呢更新了这条数据值为a但是还没提交,此时B读取到了a,但是事务A某种原因回滚了,导致事务B再也读取不到a了这就是 脏读。

          情景二 :有AB两个事务同时来更新统一条数据c,事务A呢将c更新成了a 还没提交,此时事务b过来更新把a更新长b 然后提交了。但是事A回滚了,导致事务B就蒙蔽了命名更新成b了现在变成c了,这就是 脏写

     rc  情景一 :有2个事务AB在同时运行,事务A 按照制定条件查询了符合条件的行数 6条,select count(1) from xxx where age>18,此时事B插入了2条数据并且提交了事务,事务A再次查询发现符合的条数变成8条了,好奇怪啊 2次查询同样的条件居然查到的条数不一样,这就是 幻读

           请景二 :有2个事务AB在同时操作同一条数据c,事务查询c值完成一些业务操作,此时事务A将数据c值更新成了a并且提交了,但是事务B再次查询这条数据发现值不一样了?同一个事务内多次读取到的同一条数据值不同,这就是不可重复读

     rr  这个虽然解决了可重复读的问题,即一次事务中无论该条数据被其他事务更新了多少次,始终读取到的都是同一个值,但是仍然有幻读的问题

4,mysql中是如何支持read committed的

mysql中是如何通过mvcc 支持read committed呢,如果我们在mysql中设置的隔离级别是 rc 哪每次查询都会生成一个新的readview,这是实现rc的关键,我们举例看下

还是A(id=20)、B(id=30)两个事务同时来操作数据c,事务A第一次查询的时候生成readview 1 min_txr_id=20 ,max_txr_id=30,活跃事务[20,30],creator_txr_id=20  对应的undo log版本是txr_id=19  旧值是c。

此时事务B将c更新为b并且提交了,生成了undo log txr_id=30的版本,事务A再次发起查询生成新的readview 2 min_txr_id=20,max_txr_id=31,活跃事务[20],creator_txr_id=20。

发现活跃的事务只有它自己了,然后顺着undo log版本链查到到txr_id=30这条,虽然它的事务id比自己大,但是活跃事务中并没有它,说明事务30已经提交了,所以此时可以看到该版本,所以事务A第二次读取的c值为b。

5,mysql中是如何支持repeatble read的

我们来看下mysql怎么通过mvcc 实现rr可以同时解决不可重复读,幻想读的2中问题的。

如果我们将mysql设置rr隔离级别,每次事务只会生成一个readview,不管当前事务查询数据库多少次。

如果每次事务读取的readview相同也就是每次能看到的undo log版本相同,所以每次看到的数据也就相同,即可解决可重复读、幻想读的问题。

到此,相信大家对“什么是MVCC机制”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. PostgreSQL的MVCC vs InnoDB的MVCC
  2. MVCC 在RC 和 RR 隔离等级下的工作机制

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mvcc mysql

上一篇:MIME类型中swfupload及php

下一篇:源代码控制工具TFS的入门是怎样的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》