对Mysql的MVCC的理解是什么

技术对Mysql的MVCC的理解是什么今天就跟大家聊聊有关对Mysql的MVCC的理解是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MVCC(Mutil-V

今天跟大家说一下Mysql对MVCC的理解,可能很多人不太理解。为了让大家更好地理解,边肖为大家总结了以下内容。希望你能从这篇文章中有所收获。

Mvcc(多版本并发控制)是多版本并发控制。MVCC是一种并发控制方法,一般用于数据库管理系统,实现对数据库的并发访问。

在Mysql的InnoDB引擎中,是指READ COMMITTD和REPEATABLE READ两个隔离级别下的事务访问版本链中的记录进行SELECT操作的过程。

这允许其他事务修改该记录,并且无论如何每个修改都将被记录在版本链中。SELECT可以从版本链中获取记录,实现了读写、写读的并发执行,提高了系统的性能。

让我们具体看看这是如何实现的。

版本链

我们先来了解一下版本链的概念。在InnoDB引擎表中,在其聚集索引记录中有两个必要的隐藏列:

trx_id

每次修改聚集索引记录时,此id用于存储事务id。

roll_pointer

每次修改集群索引记录时,旧版本将被写入撤消日志。这个roll_pointer只是存储一个指针,指向这个聚集索引记录的前一个版本的位置,并通过它获取前一个版本的记录信息。(请注意,插入操作的撤消日志没有此属性,因为它没有旧版本。)

对Mysql的MVCC的理解是什么

例如,有一个用事务id 60执行的该记录的修改语句。

对Mysql的MVCC的理解是什么

此时,版本链存在于撤消日志中。

对Mysql的MVCC的理解是什么

ReadView

谈完版本链,我们再来看看ReadView。已提交读和可重复读的区别就在于它们生成ReadView的策略不同.

ReadView主要有一个列表来存储我们系统中当前活动的读写事务,也就是开始未提交的事务。使用此列表来确定记录的版本是否对当前事务可见。假设当前列表中的交易id为[80,100]。

如果您要访问的记录版本的事务id为50,小于当前列表中的最小ID 80,则表示该事务是之前提交的,因此当前活动的事务可以访问该事务。

如果你要访问的记录版本的交易id为70,并且发现交易在列表id的最大值和最小值之间,那么再次判断它是否在列表中。如果是,则表示事务尚未提交,因此无法访问版本。如果不存在,则意味着事务已经提交,因此可以访问该版本。

如果你要访问的记录版本的事务id为110,大于id100的事务列表的最大ID,说明这个版本发生在ReadView生成之后,所以无法访问。

这些记录都在版本链中找到。首先,找到最新的记录。如果最新记录的事务id不符合条件且不可见,则查找之前的版本,将当前的事务id与该版本的事务id进行比较,看是否可以访问该版本,以此类推,直到返回或完成可见版本。

例如,在提交的读取隔离级别下:

比如此时有一笔交易,交易id为100,修改名称使名称等于小明2,但是交易还没有提交。此时的版本链是。

对Mysql的MVCC的理解是什么

当时另一个事务发起了select语句查询id为1的记录,当时生成的ReadView列表只有[100]。然后去版本链找。首先,一定要找最近的。发现列表中有trx_id为100的记录,也就是小明2名字的记录,无法访问。

此时继续通过指针查找下一条名为小明1的记录,发现trx_id为60,小于列表中的最小id,因此可以访问,直接访问结果为小明1。

当时,我们把交易I。

d为100的事务提交了,并且新建了一个事务id为110也修改id为1的记录,并且不提交事务

对Mysql的MVCC的理解是什么

这是时候版本链就是

对Mysql的MVCC的理解是什么

这时候之前那个select事务又执行了一次查询,要查询id为1的记录。

这个时候关键的地方来了

如果你是已提交读隔离级别,这时候你会重新一个ReadView,那你的活动事务列表中的值就变了,变成了[110]。

按照上的说法,你去版本链通过trx_id对比查找到合适的结果就是小明2。

如果你是可重复读隔离级别,这时候你的ReadView还是第一次select时候生成的ReadView,也就是列表的值还是[100]。所以select的结果是小明1。所以第二次select结果和第一次一样,所以叫可重复读!

也就是说已提交读隔离级别下的事务在每次查询的开始都会生成一个独立的ReadView,而可重复读隔离级别则在第一次读的时候生成一个ReadView,之后的读都复用之前的ReadView。

看完上述内容,你们对对Mysql的MVCC的理解是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/46786.html

(0)

相关推荐

  • mysql table_open_cache 到底有什么影响

    技术mysql table_open_cache 到底有什么影响mysql table_open_cache 到底有什么影响,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴

    攻略 2021年11月4日
  • MySQL 5.7如何使用GTID方式搭建复制环境

    技术MySQL 5.7如何使用GTID方式搭建复制环境这篇文章主要为大家展示了“MySQL 5.7如何使用GTID方式搭建复制环境”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下

    攻略 2021年11月3日
  • 太极拳入门基本功,初学太极拳最好的方法有哪几种

    技术太极拳入门基本功,初学太极拳最好的方法有哪几种初学太极拳最好的方法有哪几种太极拳入门基本功?(原创)这个问题我来回答题主。我从五十岁开始学太极拳,到现在己经有二十三年了。根据我学习太极拳的经历来回答这个问题。初学大极

    生活 2021年10月22日
  • leetode24两两交换链表中的节点

    技术leetode24两两交换链表中的节点 leetode24_两两交换链表中的节点一、题目二、算法分析
    我主要想着通过while循环自己交换,前面两个单独考虑,后面的都是一样的处理。
    因为前面的两个需

    礼包 2021年11月9日
  • pagerank算法原理举例子(pagerank算法详解)

    技术PageRank算法如何给网页排名PageRank算法如何给网页排名,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1,PageRank 算法原理Page

    攻略 2021年12月23日
  • Git使用笔记

    技术Git使用笔记 Git使用笔记一、git commit --amend
    本地修改文件,并提交:
    git add .
    git commit -m "message"
    此时:如果发现 message 漏

    礼包 2021年11月30日