第 14 篇 给出参数映射。排障时需要的是可核对口径:现象 → 可能机制 → 先查什么 → 明确禁止什么。本文不提供未实测的「最佳参数配方」,不引用无版本论坛耗时。
本文是「WiredTiger 内核」系列第 15 篇(共 17 篇)。→ 系列目录
先修:第 4、8–11、14 篇。续读:第 16–17 篇。
版本锚定:机制回指 Architecture Guide 与本系列;MongoDB 指标名以 8.x 手册 /
serverStatus字段为准。本篇无本地故障注入实测;下列步骤须在读者环境真实执行后再采信输出。
一、硬禁止
- 不要手工删除或截断
WiredTigerHS.wt(第 08 篇 / 升级说明)。空间问题调窗口、查长事务/游标/复制延迟。 - 不要在 backup cursor / 热备份窗口外乱删
WiredTigerLog.*(第 10、13 篇);正常由 checkpoint 后自动 remove。 - 不要多实例写同一
dbPath(第 2 篇 connection 文件锁)。
二、现象 → 机制 → 口径
2.1
WiredTigerHS.wt 持续增长
| 可能机制 | 系列锚点 | 建议核对 |
|---|---|---|
| 历史窗口过大 | 第 8、14 篇
minSnapshotHistoryWindowInSeconds |
窗口值 × 更新速率是否匹配业务 |
| Oldest 推不动 | 第 7 篇 pinned;长读、复制延迟 | 是否有长时间快照/游标;从库是否落后 |
| 更新载荷大 | 第 08 开放问题 1 | 是否高频改大文档 |
| HS 页与回收慢 | 第 8–9 篇 tombstone / checkpoint GC | checkpoint 是否正常;compaction 是否相关(HS 亦受块布局约束) |
可复现口径(须实跑):
固定窗口与工作负载,记录时间序列上的
WiredTigerHS.wt 大小与更新
ops;改窗口后对比同一负载。未跑则不下「窗口每加
1s 增 X GB」结论。
2.2 Cache 压力 / 延迟尖刺
| 可能机制 | 系列锚点 | 建议核对 |
|---|---|---|
| Dirty 达 trigger,应用线程协助 eviction | 第 4 篇 | dirty 占比、eviction 统计、checkpoint 前等待 |
| Updates 字节触发 | 第 4 篇 updates_trigger | 大事务、长事务缓冲(第 10 篇 commit 前缓冲) |
| HS 与用户页抢 cache | 第 08 开放问题 3 | 读路径是否频繁下探 HS |
| cacheSize 过小或过大 | 第 3、14 篇 | 过小 → 频繁 reconcile;过大 → 压缩文件的 FS cache 被挤占(手册建议) |
2.3 长游标 / 长事务
Session 上长时间不提交的读或未关闭的 cursor,会通过 pinned timestamp 拖住历史回收下界(第 7 篇)。口径:列出活跃会话时长、是否持有快照、对应应用方。
2.4 日志文件堆积
Backup cursor 或 log cursor 未关闭 → 自动 remove 停摆(第 10、13 篇)。口径:备份作业是否泄漏 cursor;checkpoint 是否在推进。
2.5 启停极慢
RTS + 随后 checkpoint(第 2、11 篇);不稳定更新与 HS 体量大时 I/O 高。口径:是否异常关机后恢复;HS/日志体积;dry-run RTS 仅作实验室手段(仍需独占)。
三、建议观测面(名称以环境为准)
- MongoDB:
db.serverStatus()中 wiredTiger cache / reconciliation / transaction 相关节;集合与dbPath文件大小。 - 文件系统:
WiredTigerHS.wt、WiredTigerLog.*、各.wt大小时间序列。 - 应用:慢查询、游标超时、写关注与 journal 间隔。
把输出贴进事故单时注明:MongoDB 版本、WT 版本、采样时间、是否删减。
四、收束
- 排障是把现象映射回 Cache/Evict/HS/Checkpoint/Journal/RTS,而不是先猜参数。
- 禁止删 HS;备份与长游标是日志/历史膨胀的常见外因。
- 下一篇:与 PG / InnoDB / RocksDB 机制对照(不写延迟排名)。
参考资料
- 本系列第 3–4、8–14 篇;第 08 篇开放问题
- MongoDB Manual WiredTiger Storage Engine;Architecture Guide Eviction / History Store / Logging
- 系列索引
上一篇:MongoDB
嵌入边界
下一篇:与
PG / InnoDB / RocksDB 对照
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【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 内核】Cache · Eviction · Reconciliation · History Store · Checkpoint
补齐文档库默认引擎内核层:从 Connection/Session、Cache/Eviction、B-Tree update chain、Reconciliation 到 Timestamps、History Store、Checkpoint/Journal 与 Rollback-to-Stable,并以 MongoDB 嵌入边界与 PG/InnoDB/RocksDB 对照收束。
【WiredTiger 内核】Cache 与 WT_REF:clean/dirty 计量与按需读页
拆解 WiredTiger Cache 的 clean/dirty 计量、WT_REF/WT_PAGE 按需加载,以及 update chain / insert list 如何挂在页上;说明 cache_size 不计 session/cursor,并为 Eviction 章节铺垫 dirty 必须先 reconcile。