前 13 篇按 WiredTiger Architecture Guide 钉机制;生产上读者面对的是 mongod 参数与数据目录文件名。MongoDB Manual WiredTiger Storage Engine(以 8.0 文档树为准)把引擎行为收成运维可调旋钮。本文只做映射表与边界,不写复制集/分片/Change Stream 全书(系列承诺)。
本文是「WiredTiger 内核」系列第 14 篇(共 17 篇)。→ 系列目录
先修:第 3–4、8–11 篇。续读:第 15 篇排障。
版本锚定:MongoDB Manual v8.0 WiredTiger Storage Engine / Journaling 相关页;机制回指本系列 WT Guide 锚点。手册与 Guide 冲突时,排障以所部署 MongoDB 小版本手册 + 所带 WT 为准。
一、手册已钉死的三句话
与本系列直接对齐(MongoDB Manual WiredTiger Storage Engine):
- MVCC 快照:操作开始时 WT 提供 point-in-time 快照。
- Checkpoint:把某快照一致地写入各数据文件;MongoDB 配置 WT 约每 60 秒做一次 checkpoint。
- Journal:checkpoint 之间的修改由 write-ahead log(journal)持久化;进程在 checkpoint 之间退出时靠 journal 回放。
这与第 7、9、10 篇的 WT 契约同构,只是触发周期与文件命名由 MongoDB 嵌入层设定。
二、参数 ↔︎ 机制映射
| MongoDB 侧(常见名) | 映射到的 WT / 本系列机制 | 注意 |
|---|---|---|
storage.wiredTiger.engineConfig.cacheSizeGB
/ --wiredTigerCacheSizeGB |
第 3 篇 cache_size;默认常为约「(RAM−1GB)
的 50%」与下限之较大者(以手册公式为准) |
手册建议勿轻易大于默认;OS filesystem
cache 仍承载压缩数据文件。另有 cacheSizePct
变体 |
| Checkpoint ~60s | 第 9 篇内部 checkpoint 线程 | 间隔是嵌入配置,不是「可关 checkpoint」 |
Journal / storage.journal.commitIntervalMs
等 |
第 10 篇 logging;写关注 j:true / majority
等会逼 sync |
具体 sync 条件以 Journaling 手册为准 |
minSnapshotHistoryWindowInSeconds(5.0+) |
第 7–8 篇 oldest/历史保留;磁盘上体现为
WiredTigerHS.wt |
加大窗口 → 磁盘↑;空间随更新负载升 |
| 表/journal 压缩选项 | 第 12 篇压缩入口 | 不在此列 codec 性能表 |
flowchart TB
mongod["mongod config"] --> cache["cacheSizeGB → WT cache"]
mongod --> ckpt["~60s checkpoint"]
mongod --> jnl["journal ↔ WT log"]
mongod --> win["history window → HS retention"]
cache --> series["Series 03-04"]
ckpt --> series9["Series 09"]
jnl --> series10["Series 10"]
win --> series8["Series 08"]
三、数据目录里的关键文件(只点名)
| 文件 | 系列落点 |
|---|---|
集合/索引 .wt |
用户表 B-Tree 块(第 5、12 篇) |
WiredTigerHS.wt |
History Store(第 08 篇);禁止手工删 |
WiredTigerLog.* |
Journal(第 10 篇) |
| turtle / 元数据 | Checkpoint 指针(第 9、12 篇) |
四、明确不展开的边界
| 话题 | 本系列态度 |
|---|---|
| 复制集、oplog 应用、从库延迟 | 边界句:延迟可拖住 oldest / 放大 HS(第 08 开放问题);机制在 WT,策略在复制 |
| 分片、balancer、chunk | 不写 |
| Change Stream | 不写 |
| 查询计划、聚合 | 不写 |
| 云托管定价、Atlas 特有旋钮 | 不写 |
Prepared / 多文档事务如何设置 prepare/durable timestamp,由 MongoDB 事务层驱动 WT(第 7、11 篇);本篇不画会话状态机。
五、收束
- MongoDB 把 WT 的 cache / checkpoint / journal /
历史窗口暴露为少量运维旋钮;默认 checkpoint ~60s、HS
窗口影响
WiredTigerHS.wt。 - 调参前先回到对应机制篇,避免「只加 cache」或「删 HS 文件」。
- 下一篇:运维与排障——可复现口径与禁止事项。
参考资料
- MongoDB Manual v8.0, WiredTiger Storage Engine:https://www.mongodb.com/docs/v8.0/core/wiredtiger/
- MongoDB Manual, Journaling / Snapshot History Retention(同文档树)
- 本系列第 3–4、8–11 篇;系列索引
上一篇:Compaction
与 Backup
下一篇:运维与排障
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【WiredTiger 内核】文档库存储引擎全景:MongoDB 默认引擎的生态位
定位文档库默认引擎 WiredTiger 相对 PG/InnoDB/SQLite/RocksDB 的生态位;钉住 Session→Cache→Reconcile→HS→Checkpoint 主线、站内分工与 17 篇阅读路线,并以 Berenson 隔离词汇与 Durable History 为学术/工程锚点。
【WiredTiger 内核】Reconciliation:内存页到 on-disk image
拆解 WiredTiger reconciliation:把 in-memory 页转为 on-disk image、按 leaf_page_max 与 split_pct 分裂,并在用户表 reconcile 时选出最新已提交值、将更旧更新写入 History Store;锚定 wiki 与 src/reconcile/。
【WiredTiger 内核】Checkpoint:跨文件一致快照
拆解 WiredTiger checkpoint 算法:先借 eviction 减压,再按用户表→History Store→元数据顺序 reconcile 并原子切换;说明 checkpoint generation 与 eviction 的可见性约束,以及与 journal 的耐久分工。
【WiredTiger 内核】Journal / Logging:Checkpoint 之间的 WAL
拆解 WiredTiger write-ahead log:WiredTigerLog 文件、LSN、slot 无锁写入、checkpoint 之后自动删日志,以及崩溃恢复时从最近 checkpoint 回放;并标出与 MongoDB journaling 配置的边界。