PostgreSQL 的 MVCC 很糟糕——其他数据库也一样
来源:boringsql.com — 2026-07-30
📋 概述
文章全面分析了 PostgreSQL MVCC 的四大指控:写放大、表膨胀、空闲事务毒害、32 位事务 ID 回卷风险。并横向对比了 Oracle/InnoDB 的回滚段方案、SQL Server 的可选版本控制、MongoDB 的缓存版本、LSM 树引擎的代际 GC 以及 etcd 的完全无 MVCC 方案。结论是每种方案都在四个核心设计问题上做出了不同的取舍,没有银弹。
🔑 核心要点
- PostgreSQL MVCC 四大问题:写放大、表膨胀、空闲事务毒害、32 位事务 ID 回卷
- Oracle/InnoDB 使用 回滚段 (undo log) 方案,避免表膨胀但引入回滚开销
- SQL Server 的版本控制是 可选附加功能,默认不启用
- LSM 树引擎将 垃圾回收视为生活方式,通过层级压缩自然清理旧版本
- 各种方案都在 四个核心设计问题 上做了不同取舍,没有完美答案
💡 金句
批评者是对的:PostgreSQL 的 MVCC 会膨胀表和放大写入。但 Oracle、InnoDB、SQL Server 的答案也只是在不同地方付出代价。
👍 0
👎 0
← 返回 Lobsters 首页