谈一谈MVCC

2024-09-05 21:04
文章标签 mvcc 谈一谈

本文主要是介绍谈一谈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,但基本原理是相似的。

这篇关于谈一谈MVCC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140059

相关文章

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

mysql mvcc 原理

MVCC(Multi Version Concurrency Control的简称),代表多版本并发控制。与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。 MVCC最大的优势:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能 了解MVCC前,我们先学习下Mysql架构和数据库事务隔离级别

为 Key-Value 数据库实现MVCC 事务

ACID是软件领域使用最广泛的技术之一,它是关系数据库的基石,是企业级中间件不可或缺的部分,但通常通过黑盒的方式提供。但是在许多情况下,这种古老的事务方式已经不能够适应现代大规模系统和NoSQL数据库的需要了,现代系统要求更高的性能要求,更大的数据量,更高的可用性。在这种情况下,传统的事务模型被定制的事务或者半事务模型所取代,而在这些模型中事务性并不像以往那样被看重。   在本文中我们会讨论一

亚信安慧AntDB-T数据库内核之MVCC机制

本文主要介绍AntDB数据库内核中的一个很重要的机制——MVCC机制。 MVCC简介 MVCC(多版本并发控制)是AntDB数据库中实现事务隔离级别的一种机制。它允许多个事务同时对数据进行读写和修改操作,而不会相互干扰。在MVCC中,每个数据库事务在读取数据时会看到一个特定的版本,这使得事务之间可以同时进行读写操作,而不会相互冲突。每个事务可以操作自己的数据版本,从而实现了更高的并发性和更好的

Mysql的四个隔离级别 与mvcc(2)

特殊颜色字体为自己总结,关于mvcc直接看最后面的。 一、Mysql的四个隔离级别 预备工作: 先创建一个test数据库及account表, create database test;use test;create table account(id int not null,balance float not null,PRIMARY KEY ( id)) 向accoun

mysql隔离级别与mvcc 关系的理解

MVCC(Mutil-Version Concurrency Control),就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。 主要通过以下两个方式组合 来实现隔离级别的 版本链:用于存储历史已经完成的事务版本。 readview:主要就是有个列表来存储我们系统中当前活跃着的读写事务,也就是begin了还未提交的事务 在Mysql的In

谈一谈一条SQL查询语句究竟是如何执行的?

这里写目录标题 理解执行流程衍生知识最后 本篇文章是基于《MySQL45讲》来写的个人理解与感悟。 理解 先看下图: 大体来说,MySQL可以分为Server层和存储引擎层两部分。就是对应着图中的两个圈。 server层包含查询缓存、分析器、优化器、执行器等,以及及所有的内置函数(如日期、时间…)所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 存

Infosys面试回来,我想和Java程序员谈一谈

http://toutiao.com/a6332993280045924610/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=5367969992&utm_medium=toutiao_ios

Mysql锁、事务隔离级别、MVCC底层原理机制

锁定义 ​ 锁是计算机协调多个进程或线程并发访问某一资源的机制。 ​ 在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。 锁分类 1、从性能上分类:乐观锁和悲观锁 乐观锁: version字段(比较跟上一次的版本号,如果一样则

mysql的mvcc学习

标题MVCC(multi-version concurrency control):多版本并发控制 优点: MVCC在大多数情况下代替了行锁,实现了对读的非阻塞,读不加锁,读写不冲突。 缺点: 每行记录都需要额外的存储空间,需要做更多的行维护和检查工作 实现原理: 在不考虑redo log的情况下利用undo log工作的简化过程: 序号动作1开启事务2记录数据行数据快照到undo log