Ubuntu中MongoDB存储空间如何管理
导读:Ubuntu 下 MongoDB 存储空间管理实操指南 一 容量观测与定位 查看数据库与集合容量概览: 列出所有数据库及大小:db.adminCommand({ listDatabases: 1 } 查看当前库容量:db.runCom...
Ubuntu 下 MongoDB 存储空间管理实操指南
一 容量观测与定位
- 查看数据库与集合容量概览:
- 列出所有数据库及大小:db.adminCommand({ listDatabases: 1 } )
- 查看当前库容量:db.runCommand({ dbStats: 1 } )
- 查看集合容量:db.runCommand({ collStats: “yourColl” } )
- 查看宿主机磁盘与目录占用:
- 磁盘剩余空间:df -h
- 数据目录占用:du -sh /var/lib/mongodb
- 观察内存映射与脏页(WiredTiger):db.serverStatus().mem
- 实时观察负载:mongostat(关注 insert/query/update/delete、flushes、mapped、res 等指标) 以上命令可快速判断是“数据膨胀”“索引膨胀”还是“日志/系统盘不足”。
二 日常容量治理策略
- 优先使用 TTL 索引自动过期历史数据(示例保留 365 天):
- 创建索引:db.RawMessage.createIndex({ “generatedTime”: -1} , { expireAfterSeconds: 31536000} )
- 注意:TTL 后台线程默认每 60 秒运行一次,删除速度可能赶不上高速写入;且删除后空间不会立刻归还给操作系统。
- 定期清理与归档:对无保留价值的数据执行批量删除或迁移至对象存储/冷库,避免长期累积。
- 索引瘦身:删除无用索引、合并复合索引;索引膨胀常见,必要时重建索引(见下一节)。
- 压缩策略:WiredTiger 支持不同压缩算法(如 zstd/snappy),在 CPU 允许的前提下提升压缩率、降低存储占用。
三 回收已用空间的可靠做法
- 备份-恢复重建(最稳妥、可显著回收空间)
- 步骤:
- 备份:mongodump -d yourDB -o /backup/yourDB
- 清理:echo ‘db.dropDatabase()’ | mongo yourDB
- 恢复:mongorestore -d yourDB /backup/yourDB
- 适用场景:数据量中等、可接受短暂停写;能显著消除碎片与空洞。
- 步骤:
- 副本集节点重同步(几乎不阻塞业务)
- 思路:逐台将 SECONDARY 的数据目录清空并触发重新同步,完成后数据文件将不含碎片;再滚动处理其他节点。
- 要点:操作前确保有最新备份;重同步期间该节点不可读写;完成后数据文件更“紧凑”。
- compact 整理(WiredTiger 可用,需谨慎)
- 作用:重写集合与索引,释放未使用空间;对集合级有效。
- 副本集建议流程:
- 在 SECONDARY 上逐个执行:db.runCommand({ compact: “yourColl” } )
- 从 4.4.17 起,compact 期间允许复制与读,但仍会阻塞部分 DDL(如 dropIndex/createIndex/collMod 等);老版本阻塞范围更大。
- 完成后依次处理其他节点;主节点不复制 compact 命令,需单独在主上执行(维护窗口内)。
- 注意:compact 不是“万能回收器”,效果依赖工作负载与碎片程度;执行前务必备份。
- 重建集合/迁移替换(快速且可控)
- 步骤:创建新集合与索引 → 批量导入数据 → 校验 → 原子切换(如 renameCollection)→ 删除旧集合。
- 适用:单集合/单库膨胀明显、需要一次性瘦身且可短暂停写。
- 不推荐的做法
- db.repairDatabase():主要用于修复,WiredTiger 下不会压缩数据,且需要等同于数据文件总量 + 约 2GB 的空闲空间,并会长时间阻塞读写,生产慎用。
四 日志与存储配置要点
- 预留 Journal 空间:MongoDB 启动需为 journal 预留空间,默认至少约 2GB,常见报错为“Insufficient free space for journal files”。若磁盘紧张,可临时使用 –smallfiles(将每个日志文件从 1GB 降到 128MB,并限制数据文件初始/最大大小),但会影响性能与扩展性,仅作权宜之计。
- 数据目录规划:默认 /var/lib/mongodb 常位于系统盘,易先满。建议将数据与日志挂载到独立大容量磁盘(如 /data/mongodb、/var/log/mongodb),并在配置中设置 dbPath 与 logPath 指向新位置,再重启服务。
五 生产实施建议
- 选择窗口:在业务低峰期执行回收操作;副本集按“先 SECONDARY、后 PRIMARY”的顺序滚动进行。
- 先做备份:任何会改写/重建数据的操作前,务必完成有效备份与恢复演练。
- 容量缓冲:确保磁盘剩余空间不低于数据文件总量的约 20%,为 compact/重同步/索引重建预留余量。
- 监控与回滚:回收后复核 dbStats/collStats 与 df,确认空间已释放;保留回滚方案(旧数据/索引备份、切换脚本)。
- 长期策略:结合 TTL、定期清理、压缩与索引治理,形成常态化容量管理机制,避免反复膨胀。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu中MongoDB存储空间如何管理
本文地址: https://pptw.com/jishu/748812.html
