MVCC 是什么?
多版本并发控制(MVCC, Multi-Version Concurrency Control)是一种数据库管理技术,主要用于提升并发事务处理的性能,同时避免传统锁机制带来的阻塞问题。MVCC 通过维护数据库对象(如行)在不同时间点上的多个版本,实现了更高效的并发控制。
MVCC 的基本原理 ?
MVCC 通过保存数据的多个版本,允许读操作与写操作并发执行,而无需彼此阻塞。具体来说,每个事务开始时都会记录一个时间戳,这个时间戳用于确定事务可以看到哪些数据版本。数据行在更新时不会直接覆盖旧值,而是创建一个新的版本,同时保留旧版本。不同事务根据其开始时间戳读取合适的数据版本,从而避免了读写冲突。
MVCC 的实现方式 ?
-
版本链(Version Chain): 数据行在被修改时,会创建一个新的版本,形成一个版本链。每个版本包含以下信息:
-
版本时间戳或事务ID:标识该版本的创建时间或创建它的事务。
-
旧版本的指针:指向上一个版本。
-
-
事务时间戳: 每个事务在开始时获得一个唯一的时间戳,作为其事务ID。事务在读取数据时,根据自己的时间戳选择合适的数据版本。
-
可见性规则:
-
事务只能看到在其开始时间之前提交的版本。
-
正在进行中的事务的未提交更改对其他事务不可见。
-
MVCC 的优点 ?
-
提高并发性: 读操作与写操作互不阻塞,大大提高了系统的并发处理能力。
-
减少锁争用: 读操作不需要加锁,减少了锁的竞争和开销。
-
快照隔离: 通过维护数据的多个版本,MVCC 提供了类似于快照隔离的效果,事务可以读取其开始时的数据快照。
MVCC 的缺点 ?
-
存储开销: 由于需要维护多个版本的数据行,存储空间开销较大。
-
版本清理: 需要定期清理不再需要的旧版本,以避免存储空间耗尽。这一过程称为“垃圾回收”(Garbage Collection)。
-
实现复杂性: MVCC 的实现较为复杂,需要额外的元数据管理和版本链维护。