对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)

相关推荐

  • VTK中常用控件介绍及如何实现圆锥体绘制

    技术VTK中常用控件介绍及如何实现圆锥体绘制VTK中常用控件介绍及如何实现圆锥体绘制,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。利用 VT

    攻略 2021年11月15日
  • 最小公倍数的求法,最小公倍数的定义和求法

    技术最小公倍数的求法,最小公倍数的定义和求法最小公倍数本是一个只在正整数范围内讨论的概念,不过我们可以把它合理地推广到正分数。一个合理的定义是最小公倍数的求法:一组正分数的最小公倍数,是最小的、且是每个分数的整数倍的数。

    生活 2021年10月24日
  • Linux——配置主从数据库服务

    技术Linux——配置主从数据库服务 Linux——配置主从数据库服务主从数据库
    Linux中,数据库服务有三种:互为主主,互为主从,一主一从(主从数据库)
    互为主主:数据库时时更新
    互为主从:数据库达

    礼包 2021年12月15日
  • 数据库中外连接有OR关联条件只能走NL优化的方法是什么

    技术数据库中外连接有OR关联条件只能走NL优化的方法是什么本篇内容介绍了“数据库中外连接有OR关联条件只能走NL优化的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一

    攻略 2021年11月4日
  • Python如何将数字转化成列表

    技术Python如何将数字转化成列表小编给大家分享一下Python如何将数字转化成列表,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. digitizedef digitize(n):
    retur

    攻略 2021年11月11日
  • 怎么利用Python画花样图

    技术怎么利用Python画花样图本篇内容介绍了“怎么利用Python画花样图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成

    攻略 2021年11月1日