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

【WiredTiger 内核】运维与排障:HS 膨胀、cache 压力与长游标

文章导航

分类入口
databasestorage
标签入口
#wiredtiger#mongodb#troubleshooting#history-store#cache#eviction#cursor#operations

目录

第 14 篇 给出参数映射。排障时需要的是可核对口径:现象 → 可能机制 → 先查什么 → 明确禁止什么。本文不提供未实测的「最佳参数配方」,不引用无版本论坛耗时。

本文是「WiredTiger 内核」系列第 15 篇(共 17 篇)。→ 系列目录

先修:第 4、8–11、14 篇。续读:第 16–17 篇。

版本锚定:机制回指 Architecture Guide 与本系列;MongoDB 指标名以 8.x 手册 / serverStatus 字段为准。本篇无本地故障注入实测;下列步骤须在读者环境真实执行后再采信输出。


一、硬禁止

  1. 不要手工删除或截断 WiredTigerHS.wt(第 08 篇 / 升级说明)。空间问题调窗口、查长事务/游标/复制延迟。
  2. 不要在 backup cursor / 热备份窗口外乱删 WiredTigerLog.*(第 10、13 篇);正常由 checkpoint 后自动 remove。
  3. 不要多实例写同一 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 版本、WT 版本、采样时间、是否删减


四、收束

  1. 排障是把现象映射回 Cache/Evict/HS/Checkpoint/Journal/RTS,而不是先猜参数。
  2. 禁止删 HS;备份与长游标是日志/历史膨胀的常见外因。
  3. 下一篇:与 PG / InnoDB / RocksDB 机制对照(不写延迟排名)。

参考资料


上一篇MongoDB 嵌入边界
下一篇与 PG / InnoDB / RocksDB 对照

同主题继续阅读

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

2026-07-22 · database / storage

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

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


By .