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

相关推荐

  • CSS+JS怎么实现爱心点赞按钮

    技术CSS+JS怎么实现爱心点赞按钮本篇内容主要讲解“CSS+JS怎么实现爱心点赞按钮”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS+JS怎么实现爱心点赞按钮”吧!To

    攻略 2021年11月20日
  • 如何实现基于webpack实现Web工程搭建

    技术如何实现基于webpack实现Web工程搭建这篇文章给大家介绍如何实现基于webpack实现Web工程搭建,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.引言随着互联网前端技术的发展,在前端工

    攻略 2021年12月11日
  • ASP.NET Core MVC 模型绑定用法及原理

    技术ASP.NET Core MVC 模型绑定用法及原理 ASP.NET Core MVC 模型绑定用法及原理https://www.cnblogs.com/savorboard/p/aspnetcor

    礼包 2021年11月10日
  • Oracle 12c RAC如何安装PSU

    技术Oracle 12c RAC如何安装PSU这篇文章给大家分享的是有关Oracle 12c RAC如何安装PSU的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、准备工作1,数据库环境操作系

    攻略 2021年11月18日
  • TP6管理后台实战第五天-文章管理

    技术TP6管理后台实战第五天-文章管理 TP6管理后台实战第五天-文章管理第五天目标:
    1、文章管理进入开发:
    1、文章分类管理1.1 文章分类列表 — ok搜索项: 分类名称 分类状态列表项:ID,

    礼包 2021年10月27日
  • 高锰酸钾制取氧气化学式,高锰酸钾制取氧气怎么念

    技术高锰酸钾制取氧气化学式,高锰酸钾制取氧气怎么念高锰酸钾制取氧气化学方程式高锰酸钾制取氧气化学式:
    2KMnO4
    加热==K2MnO4+MnO2+O2↑
    高锰酸钾制取氧气步骤:
    1,装配实验装置(试管内的导管稍伸出胶塞

    生活 2021年10月26日