【WiredTiger 内核】MongoDB 嵌入边界:cache、checkpoint 与历史窗口

💡 原文中文,约3400字,阅读约需8分钟。
📝

内容提要

本文介绍MongoDB手册中WiredTiger存储引擎的运维参数映射:缓存大小、约60秒检查点、日志与历史窗口等旋钮对应内核机制;列出数据目录关键文件(.wt、WiredTigerHS.wt、日志等);明确不展开复制集、分片等边界;强调调参前需回看机制篇,避免误操作。

🔎

延伸解读

参数映射的实践意义

本文的核心价值在于将 MongoDB 的运维参数与 WiredTiger 内核机制对应起来。例如,cacheSizeGB 对应 WT 的 cache_size,默认值约为 (RAM-1GB) 的 50%,手册建议不要轻易调大,因为 OS 文件系统缓存仍承载压缩数据文件。理解这种映射有助于避免盲目调参,比如仅增加缓存而不考虑其他机制。

历史窗口与磁盘空间

minSnapshotHistoryWindowInSeconds 参数(5.0+)控制历史保留窗口,直接影响 WiredTigerHS.wt 文件的大小。加大窗口会增加磁盘占用,且空间随更新负载上升。运维人员需权衡历史保留需求与磁盘成本,避免因窗口设置过大导致磁盘空间不足。

数据目录文件的管理边界

数据目录中的关键文件各有其作用:.wt 文件存储用户表数据,WiredTigerHS.wt 是历史存储,WiredTigerLog.* 是日志,turtle 文件保存检查点指针。特别强调 WiredTigerHS.wt 禁止手工删除,否则可能导致数据损坏或恢复问题。理解这些文件的作用有助于正确备份和恢复。

调参前的注意事项

本文明确列出不展开的边界,如复制集、分片、Change Stream 等,并提醒调参前需回看对应机制篇。例如,复制集延迟可能拖住 oldest 并放大历史存储,但机制在 WT,策略在复制。因此,调整参数前应充分理解相关机制,避免误操作。

Q&A

MongoDB 中 WiredTiger 的缓存大小参数是什么?默认值如何计算?

缓存大小参数是 storage.wiredTiger.engineConfig.cacheSizeGB(或命令行 --wiredTigerCacheSizeGB)。默认值通常为 (RAM - 1GB) 的 50% 与某个下限中的较大者,具体以 MongoDB 手册公式为准。

WiredTiger 的 checkpoint 默认多久执行一次?

MongoDB 配置 WiredTiger 大约每 60 秒执行一次 checkpoint。

WiredTiger 的 journal 文件在数据目录中叫什么?它的作用是什么?

journal 文件在数据目录中命名为 WiredTigerLog.*。它用于持久化 checkpoint 之间的修改,当进程在 checkpoint 之间退出时,通过回放 journal 来恢复数据。

WiredTigerHS.wt 文件是什么?可以手动删除吗?

WiredTigerHS.wt 是 History Store 的磁盘文件,用于保存历史版本数据。它受 minSnapshotHistoryWindowInSeconds 参数影响,禁止手动删除。

minSnapshotHistoryWindowInSeconds 参数的作用是什么?调大它有什么影响?

该参数控制历史快照的保留时间窗口,影响 History Store 的保留量。调大窗口会增加磁盘空间占用,且空间随更新负载升高而增加。

MongoDB 中 WiredTiger 的 journal 与写关注(write concern)有什么关系?

journal 用于持久化 checkpoint 之间的修改。写关注如 j:true 或 majority 会强制同步 journal,具体同步条件以 MongoDB Journaling 手册为准。

调优 WiredTiger 缓存大小时需要注意什么?

手册建议不要轻易将缓存大小设置得大于默认值,因为操作系统文件系统缓存仍会承载压缩数据文件。调参前应先回顾对应机制篇,避免误操作。

🏷️

标签

➡️

继续阅读