mongodb磁盘空间回收

场景

架构:三节点副本集,wt引擎
读写方式:每日凌晨四点导入数据,少量实时数据写入,白天提供查询功能
线上一个collection要进行历史数据删除,document总数为30多亿,数据文件大小为240GB,索引总大小为150GB。要删除的数据为10多亿,删除的方式为remove,也就是说磁盘空间不会释放,同时碎片也会影响查询的性能。

可用的磁盘空间回收方案

1.  关闭secondary节点,删除数据目录,重启secondary节点,触发一次全量同步,这样做能够充分回收磁盘空间,主节点回收时需要降级为secondary节点,缺点是同步期间带宽很大,时间较长。
2. 使用compact功能,对于mmap引擎,此种方式只会回收内存中碎片,不会回收磁盘空间,wt引擎可以回收内存和磁盘碎片空间。并且compact只对当前节点有效,不会传递到其他节点,由于是副本集,完全可以在secondary节点以此执行释放,对于主节点也是采取降级为seconday节点,因此对应用影响很小。

执行过程

secondary节点:
db.runCommand({compact:"collection_name"})
命令执行后当前节点状态为RECOVERING
时间大概50分钟,磁盘空间释放了80G
primary节点:
rs.stepDown(30),确认主节点已经由其他节点接管,主节点状态变为SECONDARY,此时可以执行回收操作
db.runCommand({compact:"collection_name"})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,925评论 25 709
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,391评论 11 349
  • 践行第六天 此去经年,心如坟,埋一人,好唯美的意境,又有些凄凉,经不住暗自伤神,泪流满面。 我心中的那个坟呢?埋下...
    李李青青阅读 347评论 0 0
  • @(Linux 命令脚本) 今天在写脚本在几十个机器上部署,需要通过脚本在 crontab 中新加定时任务查了下,...
    orientlu阅读 583评论 0 0
  • 何谓"信""达""雅"?它是由我国清末新兴启蒙思想家严复提出的,他在《天演论》中的"译例言"讲到:"译事三难:信、...
    MU心阅读 1,350评论 0 2