1.1 什么是MVCC
MVCC(Multi-Version Concurrency Control)是一种多版本并发控制机制。
与隔离级别紧密联系的另外一个东西是并发调度,通过并发调度实现隔离级别。对于并发调度,不同的数据库厂商有不同的实现机制,但基本原理类似,都是通过加锁来保护数据对象不同时被多个事务修改。
多版本的并发控制(MVCC)相对于传统的基于锁的并发控制主要特点是读不上锁,这种特性对于读多写少的场景,大大提高了系统的并发度,因此大部分关系型数据库都实现了MVCC。
1.2 MVCC是为了解决什么问题?
大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用.
大家都应该知道,锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销.
MVCC是通过保存数据在某个时间点的快照来实现的. 不同存储引擎的MVCC. 不同存储引擎的MVCC实现是不同的,典型的有乐观并发控制和悲观并发控制.
2.MVCC 具体实现分析
下面,我们通过InnoDB的MVCC实现来分析MVCC使怎样进行并发控制的.
InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列,分别保存了这个行的创建时间,一个保存的是行的删除时间。
这里存储的并不是实际的时间值,而是系统版本号(可以理解为事务的ID),每开始一个新的事务,系统版本号就会自动递增,事务开始时刻的系统版本号会作为事务的ID.
下面看一下在REPEATABLE READ隔离级别下,MVCC具体是如何操作的.
INSERT
InnoDB为新插入的每一行保存当前系统版本号作为版本号.
SELECT
InnoDB会根据以下两个条件检查每行记录:
a.InnoDB只会查找版本早于当前事务版本的数据行
(也就是,行的系统版本号小于或等于事务的系统版本号),这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插入或者修改过的.
b.行的删除版本要么未定义,要么大于当前事务版本号
这可以确保事务读取到的行,在事务开始之前未被删除.
只有a,b同时满足的记录,才能返回作为查询结果.
DELETE
InnoDB会为删除的每一行保存当前系统的版本号(事务的ID)作为删除标识.
UPDATE
InnoDB执行UPDATE,实际上是新插入了一行记录,并保存其创建时间为当前事务的ID,同时保存当前事务ID到要UPDATE的行的删除时间.
相关推荐
InnoDB事务-锁-MVCC.pdf
MVCC机制举例
InnoDB引擎MVCC实现原理
文档描述了PG 多版本的实现,简单快速的了解MVCC的机制
InnoDB多版本并发控制机制MVCC的原理与实现,包括底层代码实现以及快照的构建原理。RR隔离级别和RC隔离级别的实现逻辑。
mvcc正确性测试方案设计.pdf
07-VIP-深入理解MVCC与BufferPool缓存机制.pdf
53 理解MVCC机制的前奏:undo log版本链是个什么东西?l.pdf
12 多版本并发控制原理(MVCC).pdf
对Mysql(索引结构/事务/锁/MVCC/BufferPool/优化)总结,包括重要知识点与面试点,xmind源文件
这个文件涉及的主题是MVCC(多版本并发控制)的理解。MVCC是一种并发控制机制,常用于数据库系统中,旨在解决并发读写操作可能引发的数据一致性问题。它通过在数据库中保存多个版本的数据,使得读操作不会被写操作所...
4.实例演示RR隔离级别下MVCC机制的应用原理 5.实例演示RC隔离级别下MVCC机制的应用原理 read view的生成 可重复读隔离级别:事务开启后,首次执行任何select时会生成当前事务的read-view,在事务结束前不会变化。 读...
事务原理MVCC、Readview和行锁原理分析直播中(1).zip事务原理MVCC、Readview和行锁原理分析直播中(1).zip事务原理MVCC、Readview和行锁原理分析直播中(1).zip事务原理MVCC、Readview和行锁原理分析直播中(1).zip事务...
MVCC多版本并发控制 MVCC实现原理等等
众所周知MySQL中InnoDB的可重复读是通过MVCC实现的。 MVCC是由哪些元素构成? MVCC的读 又叫快照读,在MySQL中不可能把整个表的数据拷贝一份来提供这个快照。它通过 1、undolog InnoDB增删数据时除了redo log外...
MVCC相关,自己总结的
#H2数据库多版本并发控制(MVCC)测试 在 1.4.x 中默认激活 MVCC 模式在 1.4.x 版本中默认启用,使用默认的 MVStore 存储引擎。 MVCC 在使用 PageStore 存储引擎时默认是禁用的(这是 1.3.x 版中的默认设置)。 使用...
MVCC-(Oracle-Innodb-Postgres)PPT课件.pptx
什么是MVCC MVCC即Multi-Version Concurrency Control,译为多版本并发控制。 MVCC的背景 MySQL的大多数事务型存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制...
深入理解MVCC与BufferPool缓存机制