多版本并发控制
Multiversion Concurrency Control
大部分的MySQL的存储 引擎,比如InnoDB,Falcon,以及PBXT并不是简简单单的使用行锁机制。它们都使用了行锁结合一种提高并发的技术,被称为MVCC(多版本并发控制)。MVCC并不单单应用在MySQL中,其他的数据库如Oracle,PostgreSQL,以及其他数据库也使用这个技术。
MVCC避免了许多需要加锁的情形以及降低消耗。这取决于它实现的方式,它允许非阻塞读取,在写的操作的时候阻塞必要的记录。
MVCC保存了某一时刻数据的一个快照。意思就是无论事物运行了多久,它们都能看到一致的数据。也就是说在相同的时间下,不同的事物看相同表的数据是不同的。如果你从来没有这方面的经验,可能说这些有点令人困惑。但是在以后这个会很容易理解和熟悉的。
每个存储引擎实现MVCC方式都是不同的。有许多种包含了乐观(optimistic)和悲观(pessimistic)的并发控制。我们用简单的InnoDb的行为来举例说明MVCC工作方式。
InnoDB实现MVCC的方法是,它存储了每一行的两个额外的隐藏字段,这两个隐藏字段分别记录了行的创建的时间和删除的时间。在每个事件发生的时 候,每行存储版本号,而不是存储事件实际发生的时间。每次事物的开始这个版本号都会增加。自记录时间开始,每个事物都会保存记录的系统版本号。依照事物的 版本来检查每行的版本号。在事物隔离级别为可重复读的情况下,来看看怎样应用它。
SELECT
InnoDB检查每行,要确定它符合两个标准。
InnoDB必须知道行的版本号,这个行的版本号至少要和事物版本号一样的老。(也就是是说它的版本号可能少于或者和事物版本号相同)。这个既能确定事物开始之前行是存在的,也能确定事物创建或修改了这行。
行的删除操作的版本一定是未定义的或者大于事物的版本号。确定了事物开始之前,行没有被删除。
符合了以上两点。会返回查询结果。
INSERT
InnoDB记录了当前新增行的系统版本号。
DELETE
InnoDB记录的删除行的系统版本号作为行的删除ID。
UPDATE
InnoDB复制了一行。这个新行的版本号使用了系统版本号。它也把系统版本号作为了删除行的版本。
所有其他记录的结果保存是,从未获得锁的查询。这样它们查询的数据就会尽可能的快。要确定查询行要遵循这些标准。缺点是存储引擎要为每一行存储更多的数据,检查行的时候要做更多的处理以及其他内部的一些操作。
MVCC只能在可重复读和可提交读的隔离级别下生效。不可提交读不能使用它的原因是不能读取符合事物版本的行版本。它们总是读取最新的行版本。可序列化不能使用MVCC的原因是,它总是要锁定行。
下面的表说明了在MySQL中不同锁的模式以及并发级别。
锁的策略 |
并发性 |
开销 |
引擎 |
表 |
最低 |
最低 |
MyISAM,Merge,Memory |
行 |
高 |
高 |
NDB Cluster |
行和MVCC |
最高 |
最高 |
InnoDB,Falcon,PBXT,solidD |
分享到:
相关推荐
InnoDB引擎MVCC实现原理
MVCC机制举例
InnoDB多版本并发控制机制MVCC的原理与实现,包括底层代码实现以及快照的构建原理。RR隔离级别和RC隔离级别的实现逻辑。
众所周知MySQL中InnoDB的可重复读是通过MVCC实现的。 MVCC是由哪些元素构成? MVCC的读 又叫快照读,在MySQL中不可能把整个表的数据拷贝一份来提供这个快照。它通过 1、undolog InnoDB增删数据时除了redo log外...
文档描述了PG 多版本的实现,简单快速的了解MVCC的机制
版本链 在InnoDB引擎表中,他们的聚簇索引记录中有两个隐藏列: trx_id:用来存储对数据进行修改时的事务id roll_pointer:每次对哪条聚簇索引记录有修改的时候,就会把老版本写入undo日志中。...
事务隔离级别设置 set global transaction isolation level read committed; //全局的 ...InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保
【MySQL】资源 MySQL入门+进阶资源合集 MVCC
4.实例演示RR隔离级别下MVCC机制的应用原理 5.实例演示RC隔离级别下MVCC机制的应用原理 read view的生成 可重复读隔离级别:事务开启后,首次执行任何select时会生成当前事务的read-view,在事务结束前不会变化。 读...
07-VIP-深入理解MVCC与BufferPool缓存机制.pdf
InnoDB事务-锁-MVCC.pdf
53 理解MVCC机制的前奏:undo log版本链是个什么东西?l.pdf
深入理解MVCC与BufferPool缓存机制
MySQL-acid-mvcc以及=事物隔离级别
对Mysql(索引结构/事务/锁/MVCC/BufferPool/优化)总结,包括重要知识点与面试点,xmind源文件
面试官:什么是MySQL 事务与 MVCC 原理?.doc
MYSQL数据库多版本并发控制(MVCC)
Mysql InnoDB多版本可见性分析,由何登成编写,非常经典值得看看
不仅是MySQL,包括Oracle、 PostgreSQL等其他数据库系统也都实现了 MVCC,但各自的实现机制不尽相同,因为 MVCC没有一个统一的实现标准。 可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此...