谈一谈MVCC

一 MVCC的定义

MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种用于数据库管理系统(DBMS)中的并发控制方法,它允许数据库读写操作不加锁地并发执行,从而提高了数据库系统的并发性能。MVCC 主要是通过维护数据的多个版本来实现这一点的,每个事务在执行时都会基于数据的某个版本进行操作,这样即使多个事务同时操作同一数据,也不会相互干扰。

二 MVCC 的主要特点

★非锁定读:在MVCC的支持下,读操作(SELECT)不会阻塞写操作(INSERT、UPDATE、DELETE),同时写操作也不会阻塞读操作。这是因为读操作可以读取数据的旧版本,而写操作则会在旧版本的基础上创建新版本。

★一致性读:事务在执行过程中,无论其他事务如何修改数据,该事务读取的数据版本都是一致的,即事务开始时数据的状态。这保证了事务的隔离性。

★写操作的可见性控制:写操作(更新或删除)会创建数据的新版本,并且这些新版本对其他事务的可见性受到事务隔离级别的控制。

三 MVCC 的实现机制

MVCC 的具体实现依赖于数据库的内部结构和事务管理策略,但通常包括以下几个关键组件:

★版本链:每个数据项(如表中的一行)都可能有多个版本,这些版本通过某种方式(如指针或时间戳)链接起来,形成版本链。

★隐藏列:在数据项中增加额外的隐藏列来存储版本信息,如创建时间戳、删除时间戳(对于已删除的数据项)等。

★读视图:每个事务在开始时都会创建一个读视图,该视图定义了事务可以看到的数据版本范围。事务只能看到在这个范围内创建或未删除的数据版本。

★事务ID和版本号:每个事务都有一个唯一的事务ID和版本号,用于标识事务的先后顺序和数据版本的新旧。

四 MVCC为数据库解决的问题

(一)数据库的三种并发场景

读读并发:不会产生并发问题,也不需要并发控制。

读写并发:会造成事务隔离性问题,脏读、幻读和不可重复读的问题。

写写并发:可能出现数据更新丢失的问题。

(二)MVCC可以为数据库解决以下三个方面的问题:

第一 并发读写数据。在并发读写数据库时,提高数据库的并发读写的处理能力,不用阻塞写操作;写操作也不用去阻塞读操作,从而去提高数据库的并发读写的处理能力。

第二:实现读一致性,解决脏读、幻读、不可重复读等事务隔离问题,但它不能解决数据更新的丢失问题。

第三:采用乐观锁或者悲观锁用来解决写和写的冲突,提高数据库的并发性能。

(三)MVCC机制下的数据库读写

五 MVCC 的优势与劣势

★优势:

提高并发性能:通过减少锁的使用,MVCC 可以显著提高数据库的并发处理能力。

简化事务管理:MVCC 使得事务的提交和回滚操作更加简单和高效。

★劣势:

存储空间占用:由于需要存储数据的多个版本,MVCC 会增加数据库的存储空间需求。

复杂性增加:MVCC 的实现相对复杂,需要数据库管理系统在内部进行更多的版本管理和可见性控制。

六 常见的MVCC数据库

1 PostgreSQL

2 MySQL(InnoDB存储引擎)

3 Oracle

4 SQL Server(在某些配置和版本下)

这些数据库系统通过不同的方式实现了MVCC,但基本原理是相似的。

相关推荐
风哥2号25 分钟前
MySQL8.x/9.x数据库安装自动化全过程-Fgedu
数据库·mysql自动化安装
疯狂打码的少年38 分钟前
【数据库技术】SQL数据查询(SELECT基本语法)
数据库·笔记·sql·oracle
ly76891 小时前
JVM 类加载机制:打破双亲委派模型的实践与陷阱
jvm·热部署·spi·类加载器·双亲委派
程序员黎剑1 小时前
Redis缓存击穿:热点Key过期打崩数据库的3种解决方案
数据库·redis·缓存
Carl_.Net软开1 小时前
NSSM后台启动influx时序数据库
数据库·时序数据库
IPdodo_1 小时前
静态 IP 访问异常排查:403/429 归因与迁移验收
服务器·网络·数据库·python·网络协议·php·性能测试
DevOpenClub1 小时前
PDF 多格式解析如何避免混用输出:TEXT、HTML、XML 与 TAG 数据契约
xml·前端·数据库·pdf·html
meilindehuzi_a1 小时前
从域名到数据库:React + Node.js 项目部署全流程与用户访问链路
数据库·react.js·node.js
泡干脆面就番茄2 小时前
MySQL_流程控制_分组查询与连接查询详解
数据库·mysql
Bode_20022 小时前
全生命周期 SQL 控制
数据库·智能制造