加载中...
MVCC 是数据库中一种并发控制机制,通过为数据保存多个版本,让读操作访问某一时刻的快照而无需加锁,读写互不阻塞。它是 MySQL InnoDB、PostgreSQL 等数据库实现高并发和可重复读隔离级别的核心技术。

| 类型 | 并发控制机制 |
| 全称 | Multi-Version Concurrency Control |
| 核心思想 | 保留数据多版本 |
| 读写关系 | 读不阻塞写 |
| 典型实现 | InnoDB、PostgreSQL |
多版本并发控制(Multi-Version Concurrency Control,简称 MVCC)是数据库管理系统中一种重要的并发控制方法。它为同一行数据保留多个历史版本,使得读操作可以读取某个一致性快照,而不必与写操作互相阻塞,从而在保证隔离性的同时大幅提升并发能力。
传统基于锁的并发控制中,读和写会互相阻塞:写操作加排他锁时,读操作必须等待,反之亦然,并发度受限。MVCC 的思路是让写操作生成新版本而不覆盖旧版本,读操作则根据自己的事务视图去读取对应版本的数据,这样读不加锁、写不阻塞读,读写并行。
在 MySQL InnoDB 中,MVCC 依靠 undo 日志保存旧版本,并通过读视图(Read View)判断可见性,配合间隙锁实现可重复读隔离级别并解决幻读问题。
问:MVCC 为什么能让读写不互相阻塞?答:因为写操作生成新版本而不覆盖旧版本,读操作读取的是符合自己事务视图的旧版本,二者操作的是不同的数据版本,因此普通读不需要等待写锁,读写可以并行。
问:MVCC 会带来什么额外开销?答:保留多版本需要额外存储空间,且必须有清理机制回收不再需要的旧版本。如果长事务长期不提交,旧版本无法及时回收,可能导致存储膨胀和性能下降。

| 类型 | 并发控制机制 |
| 全称 | Multi-Version Concurrency Control |
| 核心思想 | 保留数据多版本 |
| 读写关系 | 读不阻塞写 |
| 典型实现 | InnoDB、PostgreSQL |
登录 后参与讨论
暂无讨论,来发表第一条评论吧