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

相关推荐

  • 如何进行Log4j2的简单使用

    技术如何进行Log4j2的简单使用本篇文章为大家展示了如何进行Log4j2的简单使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。日志是一个系统经常用到的功能,我们可以在调试的时

    攻略 2021年11月10日
  • 如何实现elasticsearch导入mysql数据

    技术如何实现elasticsearch导入mysql数据这篇文章主要讲解了“如何实现elasticsearch导入mysql数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学

    攻略 2021年12月4日
  • 岁寒三友是指什么,人们说的“岁寒三友”是什么

    技术岁寒三友是指什么,人们说的“岁寒三友”是什么一、岁寒三友是指:松、竹经冬不凋,梅花耐寒开放,因此有“岁寒三友”之称。二、古诗:1、小松 【唐】杜荀鹤 自小刺头深草里,而今渐觉出蓬蒿。 时人不识凌云木,直待凌云始

    生活 2021年10月20日
  • Java设计模式中单件模式有什么用

    技术Java设计模式中单件模式有什么用小编给大家分享一下Java设计模式中单件模式有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!定义单件模式确保一个类只有一个实例,并提供一个全局访问点Java单

    攻略 2021年11月14日
  • PG中pg_basebackup多表空间备份恢复方法是什么

    技术PG中pg_basebackup多表空间备份恢复方法是什么这篇文章主要讲解了“PG中pg_basebackup多表空间备份恢复方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一

    攻略 2021年11月10日
  • 天然气锅炉怎么操作,家用燃气锅炉的正确使用方法

    技术天然气锅炉怎么操作,家用燃气锅炉的正确使用方法1、即使寒冷的冬季不使用热水/采暖热水器,也为了启动防冻结装置,电源需插座上,或将供暖系统内的水放净,才可关闭电源天然气锅炉怎么操作。2、在使用时,首先要注意压力一定不要

    生活 2021年10月19日