PostgreSQL 的 MVCC 很糟糕——其他数据库也一样
来源:boringsql.com — 2026-07-31
📋 概述
PostgreSQL 的 MVCC 被广为诟病:写放大、表膨胀、VACUUM 维护噩梦、32 位事务 ID 回卷。但作者逐个对比了 Oracle(undo 日志)、SQL Server(可选版本化)、MongoDB(缓存中版本)、LSM 引擎(压缩即生活方式)、etcd(完全不同的模型)——每一种替代方案都在不同地方付出代价。MVCC 不是可选的,每个想要读写不互锁的数据库都必须以某种方式保留多个行版本。
🔑 核心要点
- PostgreSQL MVCC 的四宗罪:写放大、表膨胀、空闲事务毒化、32 位事务 ID 限制。
- Oracle 和 InnoDB 使用 undo 日志:旧版本不在表中,但读取历史需要回滚——代价由读者支付。
- SQL Server 的版本化是可选功能,旧版本存储在 tempdb 中——tempdb 成为瓶颈。
- LSM 引擎(如 RocksDB)的 压缩就是生活方式——写放大换到了后台,但压缩风暴随时可能发生。
💡 金句
MVCC 不是可选的。任何想让读者不阻塞写者的数据库都必须以某种方式保留多个行版本。
👍 0
👎 0
← 返回 Lobsters 首页