首页主机资讯Ubuntu中MongoDB存储空间如何管理

Ubuntu中MongoDB存储空间如何管理

时间2025-11-17 12:20:03发布访客分类主机资讯浏览611
导读: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 允许的前提下提升压缩率、降低存储占用。

三 回收已用空间的可靠做法

  • 备份-恢复重建(最稳妥、可显著回收空间)
    • 步骤:
      1. 备份:mongodump -d yourDB -o /backup/yourDB
      2. 清理:echo ‘db.dropDatabase()’ | mongo yourDB
      3. 恢复: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),并在配置中设置 dbPathlogPath 指向新位置,再重启服务。

五 生产实施建议

  • 选择窗口:在业务低峰期执行回收操作;副本集按“先 SECONDARY、后 PRIMARY”的顺序滚动进行。
  • 先做备份:任何会改写/重建数据的操作前,务必完成有效备份与恢复演练。
  • 容量缓冲:确保磁盘剩余空间不低于数据文件总量的约 20%,为 compact/重同步/索引重建预留余量。
  • 监控与回滚:回收后复核 dbStats/collStatsdf,确认空间已释放;保留回滚方案(旧数据/索引备份、切换脚本)。
  • 长期策略:结合 TTL、定期清理、压缩与索引治理,形成常态化容量管理机制,避免反复膨胀。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu中MongoDB存储空间如何管理
本文地址: https://pptw.com/jishu/748812.html
Ubuntu下MongoDB索引如何创建 MongoDB在Ubuntu上运行出错怎么办

游客 回复需填写必要信息