我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么理解MySQL中的MVCC

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么理解MySQL中的MVCC

这篇文章将为大家详细讲解有关怎么理解MySQL中的MVCC,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

关系数据库管理系统使用MVCC(Multiversion Concurrency Control多版本并发控制)来避免写操作堵塞读操作的并发问题,MVCC也就是通过使用数据的多个版本保证并发读写不冲突的一种机制,不同的数据库有不同的实现,这也是数据库系统让人头疼的地方.

MVCC的两种不同实现方式

  第一种实现方式是将数据记录的多个版本保存在数据库中,当这些不同版本数据不再需要时,垃圾收集器回收这些记录。这个方式被PostgreSQL和Firebird/Interbase采用,SQL Server使用的类似机制,所不同的是旧版本数据不是保存在数据库中,而保存在不同于主数据库的另外一个数据库tempdb中/

  第二种实现方式只在数据库保存最新版本的数据,但是会在使用undo时动态重构旧版本数据,这种方式被Oracle和MySQL/InnoDB使用。

MVCC是为了解决什么问题?

  • 大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用.悲剧的是Falcon这个存储引擎过早夭折,原本是InnoDB有力的竞争对手,但是结果让人唏嘘长叹,可以参见:由MySQL中的falcon存储引擎引申的八卦杂谈(r5笔记第23天)

  • 大家都应该知道,锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销.

MVCC实现

  MVCC是通过保存数据在某个时间点的快照来实现的. 不同存储引擎的MVCC. 不同存储引擎的MVCC实现是不同的,典型的有乐观并发控制和悲观并发控制.

   InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,分别保存了这个行的创建时间,一个保存的是行的删除时间。这里存储的并不是实际的时间值,而是系统版本号(可以理解为事务的ID),没开始一个新的事务,系统版本号就会自动递增,事务开始时刻的系统版本号会作为事务的ID

做了简单修改,我们做一些简单的例子来说明。

1)、在插入操作时 :记录的创建版本号就是事务版本号。 

比如插入一条记录, 事务id 假设是1,那么记录如下:也就是说,创建版本号就是事务版本号。 

id   name   create version   delete version  
1 test   1

2)、在更新操作的时候,采用的是先标记旧的那行记录为已删除,并且删除版本号是事务版本号,然后插入一行新的记录的方式。 比如,针对上面那行记录,事务id为2 要把name字段更新,

update table set name= 'new_value' where id=1;

id  name  create version  delete version 
1   test   1 2        
1   new_value   2

3)、删除操作的时候,就把事务版本号作为删除版本号。比如

delete from table where id=1; 

id   name   create version   delete version  
1 new_value 2 3  

4)、查询操作: 

从上面的描述可以看到,在查询时要符合以下两个条件的记录才能被事务查询出来: 

    (1) 删除版本号 大于当前事务版本号,就是说删除操作是在当前事务启动之后做的。 

    (2) 创建版本号 小于或者等于 当前事务版本号,就是说记录创建是在事务中(等于的情况)或者事务启动之前。

这样就保证了各个事务互不影响。从这里也可以体会到一种提高系统性能的思路,就是: 通过版本号来减少锁的争用。

另外,只有read-committed和 repeatable-read 两种事务隔离级别才能使用MVCC,read-uncommited由于是读到未提交的,所以不存在版本的问题而serializable 则会对所有读取的行加锁。

   当然上面的内容都是二次吸收,做了一些过滤和简单总结,后续会持续总结和认真分析,对比一下Oracle和MySQL MVCC的异同,MVCC的缺陷等。

关于怎么理解MySQL中的MVCC就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么理解MySQL中的MVCC

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mysql中的mvcc 原理详解

MVCC多版本并发控制,是用来在数据库中控制并发的方法,实现对数据库的并发访问用的,这篇文章主要介绍了mysql mvcc 原理详解,需要的朋友可以参考下
2022-11-13

Mysql中mvcc各场景理解应用

这篇文章主要为大家介绍了Mysql中mvcc各场景理解应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

Mysql中MVCC机制的原理是什么

这篇文章将为大家详细讲解有关Mysql中MVCC机制的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Mysql的锁和事务隔离级别在理解MVCC机制的原理之前,需要先理解Mysql的
2023-06-14

mysql中怎么使用MVCC来解决幻读

在MySQL中,MVCC(Multi-Version Concurrency Control)是通过在内部保留数据的多个版本来实现并发控制的。这样可以确保一个事务在读取数据时不会被其他事务的写操作所干扰,从而解决了幻读问题。要使用MVCC
mysql中怎么使用MVCC来解决幻读
2024-04-24

mysql的mvcc怎么使用

MySQL的MVCC(Multi-Version Concurrency Control)是一种用于管理并发事务的机制,它可以在不同事务之间提供一致性和隔离性。MVCC允许读取事务在写入事务之前读取数据库中的数据,这样就可以避免读取到未提交
mysql的mvcc怎么使用
2024-04-24

Mysql MVCC机制原理详解

什么是MVCCMVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。我们知道,一般情况下我
2022-05-25

说说MySQL中MVCC机制的原理

目录一、概述:二、什么是Undo log三、行的隐藏列四、Undo log版本链五、关于ReadViewReadView包含以下几个重要的参数:一、概述:了解了mysql的底层架构后,我们今天要深入了解下什么是MVCC。MVCC,全称M
2023-04-24

MySQL中MVCC机制的实现原理

目录前言什么是当前读和快照读?MVCC的实现原理前言MVCC全称为Multi Version Concurrency Control,直译为多版本并发控制,是MySQhttp://www.cppcns.comL中一种并发控制的方法,他主要
2022-08-10

一文解析MySQL的MVCC实现原理

目录1. 什么是MVCC2. 事务的隔离级别3. Undo Log(回滚日志)4. MVCC的实现原理4.1 当前读和快照读4.2 隐藏字段4.3 版本链4.4 Read View(读视图)5. 不同隔离级别下可见性分析5.1 READ C
2022-08-16

mysql中MVCC的作用是什么

本篇文章为大家展示了mysql中MVCC的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、说明多版并发控制MVCC是MySQL InnoDB存储引擎实现隔离等级的具体方法,用于实现提交阅
2023-06-15

如何理解和应用MySQL MVCC 原理

如何理解和应用MySQL MVCC 原理引言:MySQL是一种常用的关系型数据库管理系统,它采用了MVCC(Multi-Version Concurrency Control)原理来保证数据的一致性和并发性。MVCC是一种事务并发控制方法,
2023-10-22

MySQL MVCC的详解之Read View

文章目录 概要一、基于UNDO LOG的版本链1.1、行记录结构1.2、了解UNDO LOG1.3、版本链 二、Read View2.1、判定机制2.2、源码 三、参考 概要 在上文中,我们提到了
2023-08-30

编程热搜

目录