千家信息网

怎么理解MySQL中的MVCC

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关怎么理解MySQL中的MVCC,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。关系数据库管理系统使用MVCC(Multive
千家信息网最后更新 2026年11月02日怎么理解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  
1test  1

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

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

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

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

delete from table where id=1;

id  name  create version  delete version  
1new_value23  

4)、查询操作:

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

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

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

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

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

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

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

版本 事务 数据 不同 数据库 系统 方式 存储 就是 引擎 控制 时间 机制 两个 内容 问题 查询 也就是 多个 就是说 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡豆 上海睿民互联网科技有限公司 北京互联网络科技有限公司 北京禾田雨橡互联网科技 科技互联网公司logo 玖二柒互联网科技公司待遇 互联网科技寓意 互联网金融科技公司干啥的 互联网科技有哪些公司 河南猎农互联网科技有限公司 无锡工业互联网科技有限公司 互联网方面的科技前沿 上海京穆互联网科技有限公司 互联网金融科技元年 启辰互联网科技 福州德业互联网科技 云鲸互联网络科技有限公司 米泉互联网科技专业怎么样 互联网科技和医药行业 株洲百竞科技的互联网营销顾问 互联网科技公司起名 互联网最新的科技有限公司 互联网科技英文 成都仁贤领冠互联网科技有限公司 佛山市拉法互联网科技有限公司 朱啸虎曾投资哪些互联网科技企业 雨阳互联网卡科技有限公司 山东大美朱楼互联网科技有限公司 版纳互联网科技选哪家 盐城市攀科互联网科技有限公司
0