WiredTiger 内核:Cache · Eviction · Reconciliation · History Store · Checkpoint
站内 数据库 MVCC 与 InnoDB Undo 已经把「堆内多版本」和「undo 旁路」钉在源码路径上;PostgreSQL / SQLite / RocksDB 覆盖了服务器行存、嵌入式行存与 LSM。MongoDB 默认引擎 WiredTiger 走第三条 MVCC 落点——用户表只持久化最新已提交版本,旧版本进 History Store——但站内原先只有一篇机制文,缺完整路径。
本系列回答:一次更新如何挂上 update chain、脏页为何必须 reconcile 才能 evict、checkpoint 与 journal 如何分工、旧快照在页被赶走之后凭什么还能读。
写:
- Connection / Session / Cursor 与线程边界。
- Cache、
WT_REF、Eviction。 - B-Tree update chain 与 Reconciliation。
- Timestamps / Snapshot、History Store(Durable History)。
- Checkpoint、Journal、Rollback-to-Stable。
- 块管理、压缩、compaction / backup。
- MongoDB 嵌入参数与排障口径。
- 与 PG / InnoDB / RocksDB 的对照选型。
系列状态:正文 17 篇已齐(2026-07-22)。 规划见 PLAN.md。实验台账仍待有环境补跑;未跑则不写伪造输出。
版本锚定:WiredTiger Architecture Guide(文档树 Version 12.0.0 /
develop,声明不与发版锁步)+ 源码wiredtiger/wiredtigermongodb-8.0。MongoDB 手册参数以 8.0 为准。未实测则不写跨引擎延迟排名。
适合谁看
- 要解释
WiredTigerHS.wt、cache 压力、checkpoint 行为的运维与平台工程师。 - 读过 History Store 章 或 数据库 MVCC,想下沉到全路径的读者。
- 从 PG / InnoDB / RocksDB / SQLite 内核系列过来,需要文档库对照轴的工程师。
- 在 MongoDB 与关系库 / LSM 之间做存储选型的架构师。
在知识栈中的位置
| 层 | 站内内容 | 本系列关系 |
|---|---|---|
| 隔离语义 | mvcc | 第 07–08、16 篇回链 |
| Undo 旁路 | mysql-innodb | 第 08、16 篇对照 |
| 服务器 / 嵌入式行存 | postgresql-kernel、sqlite-kernel | 第 01、16–17 篇 |
| LSM | rocksdb | 第 01、16–17 篇边界 |
| 分布式 KV | tikv-htap、foundationdb | 第 01、17 篇边界 |
| WiredTiger 内核 | 本系列 | Session → Cache → Reconcile → HS → Checkpoint → 选型 |
一、这个领域最值得关注的 5 个问题
- 一次文档更新如何经 update chain 落到可驱逐的用户页? → 第 1、3–6 篇。
- 脏页 reconcile / evict 后,旧快照凭什么还能读? → 第 7–8 篇。
- checkpoint 与 journal 各自保证什么?崩溃后从哪恢复? → 第 9–10 篇。
- Rollback-to-Stable / prepared / 时间戳如何收束可见性? → 第 7、11 篇。
- 何时选 WiredTiger(MongoDB)而非 PG / InnoDB / RocksDB? → 第 16–17 篇。
二、篇目依赖关系与推荐阅读路径
flowchart TD
A["01 Overview"] --> B["02 Conn Session Cursor"]
B --> C["03 Cache WT_REF"]
C --> D["04 Eviction"]
D --> E["05 BTree update chain"]
E --> F["06 Reconciliation"]
F --> G["07 Timestamps Snapshot Txn"]
G --> H["08 History Store"]
H --> I["09 Checkpoint"]
I --> J["10 Journal Logging"]
G --> K["11 Rollback to Stable"]
F --> L["12 Block format compress"]
L --> M["13 Compaction Backup"]
I --> N["14 MongoDB embed boundary"]
H --> O["15 Ops troubleshoot"]
N --> O
O --> P["16 PG InnoDB RocksDB compare"]
P --> Q["17 Engine selection"]
| 路径 | 篇目 | 适合 |
|---|---|---|
| 必读核心 | 1 → 3 → 4 → 6 → 8 → 9 → 17 | 快速建立坐标系 |
| MVCC / 历史 | 7 → 8 → 11 → 16 | 从 undo/堆版本过来 |
| 持久化与恢复 | 9 → 10 → 11 → 15 | 崩溃恢复 / 运维读者 |
| 对照选型 | 1 → 8 → 16 → 17 | 多引擎选型 |
| 完整通读 | 1 → … → 17 | 系统掌握 |
三、目录与每篇价值点
第一部分:模型与缓存
- 文档库存储引擎全景
- 生态位地图;相对其它内核系列的缺口;17 篇路线。
- Connection
/ Session / Cursor
- 连接、会话、游标与线程边界。
- Cache 与
WT_REF
- clean/dirty 计量、
WT_REF/WT_PAGE、按需读页。
- clean/dirty 计量、
- Eviction
- 触发条件;脏页必须先 reconcile。
第二部分:写路径与版本
- B-Tree
与 update chain
- Row-store、insert list、未提交更新只挂链。
- Reconciliation
- 内存页 → on-disk image;与 HS 写入衔接。
- Timestamps、Snapshot
与事务
- 时间戳契约、快照读、prepared 边界。
- History
Store 与 Durable History:文档库里的第三种 MVCC
- 旁路历史、LAS→HS、读写路径;与 PG/InnoDB 对照;开放问题。
第三部分:持久化与恢复
- Checkpoint
- 跨文件一致快照;元数据原子切换。
- Journal
/ Logging
- Checkpoint 间 WAL;崩溃回放。
- Rollback
to Stable
- RTS、stable/durable/oldest、prepared。
第四部分:磁盘形态与嵌入
- Block
manager、页格式与压缩
- 块分配、页镜像、压缩入口。
- Compaction
与 Backup
- Compaction 与 backup 契约。
- MongoDB
嵌入边界
- cache / checkpoint / HS 窗口;复制与分片只作边界。
- 运维与排障
- HS 膨胀、cache 压力、长游标;可复现口径。
第五部分:对照与选型
- 与
PG / InnoDB / RocksDB 机制对照
- 缓冲池、WAL、MVCC 落点、故障模式;不写排名。
- 选型与阅读地图
- 选型决策树;回收开放问题;系列收束。
四、与相邻系列的分工
| 话题 | 本系列 | 相邻内容 |
|---|---|---|
| 快照隔离语义 | 第 7–8、16 篇回链 | mvcc |
| Undo / Read View | 第 8、16 篇对照 | mysql-innodb |
| 服务器行存 | 第 16–17 篇 | postgresql-kernel |
| 嵌入式行存 | 第 1、17 篇边界 | sqlite-kernel |
| LSM | 第 1、16–17 篇边界 | rocksdb |
| COW / 持久化结构 | 第 8 篇回链 | persistent-ds |
参考
返回 数据库索引 · mvcc · sqlite-kernel
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【WiredTiger 内核】文档库存储引擎全景:MongoDB 默认引擎的生态位
定位文档库默认引擎 WiredTiger 相对 PG/InnoDB/SQLite/RocksDB 的生态位;钉住 Session→Cache→Reconcile→HS→Checkpoint 主线、站内分工与 17 篇阅读路线,并以 Berenson 隔离词汇与 Durable History 为学术/工程锚点。
【WiredTiger 内核】Eviction:脏页必须先 reconcile
拆解 WiredTiger Eviction 的 server/worker/队列、target/trigger 阈值,以及 dirty eviction 经 reconciliation 把最新值写入用户表、旧版本写入 History Store;说明应用线程被迫协助驱逐的条件。
【WiredTiger 内核】Reconciliation:内存页到 on-disk image
拆解 WiredTiger reconciliation:把 in-memory 页转为 on-disk image、按 leaf_page_max 与 split_pct 分裂,并在用户表 reconcile 时选出最新已提交值、将更旧更新写入 History Store;锚定 wiki 与 src/reconcile/。
【WiredTiger 内核】History Store 与 Durable History:文档库里的第三种 MVCC
拆解 MongoDB WiredTiger 如何把旧版本挪到 History Store(WiredTigerHS.wt),在 reconciliation / eviction 后仍服务快照读;对照 PostgreSQL 堆版本与 InnoDB undo,并交代 Lookaside 到 Durable History 的工程分叉。