MongoDB 碎片整理命令 compact 命令

MongoDB 碎片整理命令 compact 命令

1 背景描述

使用 MongoDB 数据灌满之后,发现空间不够建立索引,于是使用 db.collections.remove() 删除掉一部分数据。

但是删除结束,数据的条数变少了,但是磁盘空间却没有被腾出来。

2 解决问题

使用 compact 命令压缩集合及其索引:

> use test
switched to db test
> show collections
people
system.profile
> db.runCommand({compact:"people"}) # 未指定 force, 报错
{
    "ok" : 0,
    "errmsg" : "will not run compact on an active replica set primary as this is a slow blocking operation. use force:true to force"
}
> db.runCommand({compact:"people", force:true}) # 指定 force, 执行成功
{ "ok" : 1 }

compact优点:
1. compact 只压缩需要的 collection,压缩期间产生的临时文件会就相对较少,对磁盘剩余空间需求较小;
2. compact 去除 collection 所在文件的碎片,其重建索引的 cost 也变小了,对内存的需求也减少;

compact注意点:
1. compact 操作是不会释放磁盘空间的,而是把释放的空间继续给 MongoDB 使用;
2. compact 操作进行时会产生对应的锁,使用 mongostat 可以查看,所以该操作最好在业务量最少下进行;
3. 限制集合 {Capped Collection} 是不需要 compact 的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值