[聚合文章] 数据库事务处理的艺术:事务管理与并发控制---第12章InnoDB并发控制系统的实现--MVCC

MySQL 2017-11-24 13 阅读

MVCC ,多版本并发访问控制技术。本书在 2.2.4 2.2.5 节做过理论上的介绍。本章我们也把 MVCC 技术单独列为一章,这是因为 MVCC 对于传统的数据库引擎而言,非常重要。但是,为什么 MVCC 非常重要呢?

大家都知道 MVCC 这个词很火,很多开发数据库引擎的团队宣传其数据库产品的时候,把 MVCC 作为一个重点功能做了宣传,似乎数据库的并发控制技术使用的只是 MVCC 技术。宣传书中并不会说明 MVCC 技术和其他并发访问控制技术之间的关系。那么, MVCC 技术和其他并发访问控制技术之间的关系到底是什么?

细心的读者,在阅读了第 2 章之后,其实完全可以回答这两个问题。

在此对这两个问题再做一个小结:

Q1 MVCC 技术和其他并发访问控制技术之间的关系到底是什么?

A1

q   首先,基于封锁技术、基于时间戳技术、基于有效性检查、 MVCC 等技术,都是并发访问控制技术。

q   其次,多数数据库引擎,采用的并发访问控制技术,都是基于封锁技术,然后在封锁技术的基础上,采用了 MVCC 技术。如 OraclePostgreSQLMySQL/InnoDB 都是如此。

q   第三, MVCC 技术多用于弥补基于封锁技术在读 - 写、写 - 读这两种情况下的并发不足(不足之处是根本没有并发, MVCC 的引入使得并发可行)。

Q2 :为什么 MVCC 十分重要呢?

A2

q   在第 1 章和第 2 章,讨论了四种情况(读 - 读、读 - 写、写 - 读、写 - 写)里的三种冲突(读 - 写、写 - 读、写 - 写),基于封锁的并发访问控制技术,为了保证数据的一致性,只能允许读 - 读操作并发执行,而其他三种情况会造成如第 1 章里讨论的一些数据异常现象,所以被限制了并发,这样导致基于封锁的并发访问控制技术的并发度很低。

q   MVCC 技术,因为同一个数据项存在多个版本,使得不同事务的对同一个数据项的读操作可以根据其读时刻的快照作用在不同的版本上,因而避免了 1.1 节讨论的三种读数据异常现象,所以对于读 - 写、写 - 读操作允许并发,提高了并发度。所以 MVCC 技术才显得重要。

q   另外,传统的事务型数据库,尽管以插入和修改数据的操作为主,但是查询工作也很重要,所以 MVCC 技术引入使得读和写操作互不阻塞、使得长的读操作事务能够被放心地并发执行,大大提高了事务型数据库在分析、查询方面的能力,因而被传统数据库厂商所青睐。

q   基于上面所述的原因,才使得 MVCC 技术显得十分重要。

但是,尽管本章把 MVCC 技术单独成章,从逻辑的角度看,在理解的时候,不要把 MVCC 和其他并发访问控制技术割裂,而是要把他们融合在一起加以理解。

InnoDB MVCC 技术解决了其使用的基于封锁技术在并发方面的不足之处(不足之处如 Q2 所言),如下我们讲讨论 InnoDB MVCC 技术的实现方式。

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。