土法炼钢兴趣小组的算法知识备份

【WiredTiger 内核】Cache · Eviction · Reconciliation · History Store · Checkpoint

文章导航

分类入口
databasestorage
标签入口
#wiredtiger#mongodb#mvcc#history-store#cache#eviction#reconciliation#checkpoint#journal

目录

WiredTiger 内核:Cache · Eviction · Reconciliation · History Store · Checkpoint

站内 数据库 MVCCInnoDB Undo 已经把「堆内多版本」和「undo 旁路」钉在源码路径上;PostgreSQL / SQLite / RocksDB 覆盖了服务器行存、嵌入式行存与 LSM。MongoDB 默认引擎 WiredTiger 走第三条 MVCC 落点——用户表只持久化最新已提交版本,旧版本进 History Store——但站内原先只有一篇机制文,缺完整路径。

本系列回答:一次更新如何挂上 update chain、脏页为何必须 reconcile 才能 evict、checkpoint 与 journal 如何分工、旧快照在页被赶走之后凭什么还能读。

写:

系列状态:正文 17 篇已齐(2026-07-22)。 规划见 PLAN.md。实验台账仍待有环境补跑;未跑则不写伪造输出。

版本锚定:WiredTiger Architecture Guide(文档树 Version 12.0.0 / develop,声明不与发版锁步)+ 源码 wiredtiger/wiredtiger mongodb-8.0。MongoDB 手册参数以 8.0 为准。未实测则不写跨引擎延迟排名。

适合谁看

在知识栈中的位置

站内内容 本系列关系
隔离语义 mvcc 第 07–08、16 篇回链
Undo 旁路 mysql-innodb 第 08、16 篇对照
服务器 / 嵌入式行存 postgresql-kernelsqlite-kernel 第 01、16–17 篇
LSM rocksdb 第 01、16–17 篇边界
分布式 KV tikv-htapfoundationdb 第 01、17 篇边界
WiredTiger 内核 本系列 Session → Cache → Reconcile → HS → Checkpoint → 选型

一、这个领域最值得关注的 5 个问题

  1. 一次文档更新如何经 update chain 落到可驱逐的用户页? → 第 1、3–6 篇。
  2. 脏页 reconcile / evict 后,旧快照凭什么还能读? → 第 7–8 篇。
  3. checkpoint 与 journal 各自保证什么?崩溃后从哪恢复? → 第 9–10 篇。
  4. Rollback-to-Stable / prepared / 时间戳如何收束可见性? → 第 7、11 篇。
  5. 何时选 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 系统掌握

三、目录与每篇价值点

第一部分:模型与缓存

  1. 文档库存储引擎全景
    • 生态位地图;相对其它内核系列的缺口;17 篇路线。
  2. Connection / Session / Cursor
    • 连接、会话、游标与线程边界。
  3. Cache 与 WT_REF
    • clean/dirty 计量、WT_REF / WT_PAGE、按需读页。
  4. Eviction
    • 触发条件;脏页必须先 reconcile。

第二部分:写路径与版本

  1. B-Tree 与 update chain
    • Row-store、insert list、未提交更新只挂链。
  2. Reconciliation
    • 内存页 → on-disk image;与 HS 写入衔接。
  3. Timestamps、Snapshot 与事务
    • 时间戳契约、快照读、prepared 边界。
  4. History Store 与 Durable History:文档库里的第三种 MVCC
    • 旁路历史、LAS→HS、读写路径;与 PG/InnoDB 对照;开放问题。

第三部分:持久化与恢复

  1. Checkpoint
    • 跨文件一致快照;元数据原子切换。
  2. Journal / Logging
    • Checkpoint 间 WAL;崩溃回放。
  3. Rollback to Stable
    • RTS、stable/durable/oldest、prepared。

第四部分:磁盘形态与嵌入

  1. Block manager、页格式与压缩
    • 块分配、页镜像、压缩入口。
  2. Compaction 与 Backup
    • Compaction 与 backup 契约。
  3. MongoDB 嵌入边界
    • cache / checkpoint / HS 窗口;复制与分片只作边界。
  4. 运维与排障
    • HS 膨胀、cache 压力、长游标;可复现口径。

第五部分:对照与选型

  1. 与 PG / InnoDB / RocksDB 机制对照
    • 缓冲池、WAL、MVCC 落点、故障模式;不写排名。
  2. 选型与阅读地图
    • 选型决策树;回收开放问题;系列收束。

四、与相邻系列的分工

话题 本系列 相邻内容
快照隔离语义 第 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

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-07-22 · database / storage

【WiredTiger 内核】Eviction:脏页必须先 reconcile

拆解 WiredTiger Eviction 的 server/worker/队列、target/trigger 阈值,以及 dirty eviction 经 reconciliation 把最新值写入用户表、旧版本写入 History Store;说明应用线程被迫协助驱逐的条件。

2026-07-22 · database / storage

【WiredTiger 内核】Reconciliation:内存页到 on-disk image

拆解 WiredTiger reconciliation:把 in-memory 页转为 on-disk image、按 leaf_page_max 与 split_pct 分裂,并在用户表 reconcile 时选出最新已提交值、将更旧更新写入 History Store;锚定 wiki 与 src/reconcile/。


By .