MongoDB清理历史数据释放磁盘空间

MongoDB大约 1253 字

清理数据

MongoDB删除了无用数据后,并不会释放磁盘空间。需使用compactrepairDatabase命令。

repairDatabase

4.2版本开始移除了db.repairDatabase()命令。并且在WiredTiger存储引擎的数据库中,不会压缩数据释放磁盘空间。

https://docs.mongodb.com/manual/release-notes/4.2-compatibility/#remove-support-for-the-repairdatabase-command

预计可回收空间

单点或副本集,单位为字节。

db.getCollection('my_test_coll').stats().wiredTiger["block-manager"]["file bytes available for reuse"]

分片模式(有多个shard,修改shard1为对应的值即可),单位为字节。

db.getCollection('my_test_coll').stats().shards["shard1"].wiredTiger["block-manager"]["file bytes available for reuse"]

compact

指定集合名称进行压缩数据释放空间(只能指定一个)。

db.runCommand( { compact : 'mycollectionname' } )

获取所有集合遍历释放。

db.getCollectionNames().forEach(function (collectionName) {
    print('Compacting: ' + collectionName);
    db.runCommand({ compact: collectionName });
});

对于集合采用WiredTiger存储引擎的,将释放不使用的磁盘空间通过重写(rewrite)集合和索引。

对于集合采用MMAPv1存储引擎的,将整理集合数据文件的碎片以及重建(recreate)集合的索引,不使用的磁盘空间不会释放,但会保留着给将来的数据使用(如果要在MMAPv1数据库中释放空间,应使用initial sync同步初始化)。

注意

  • compact命令会阻塞数据库操作,需在合理时间段进行操作。
  • 在主节点执行compact不会对副本集的secondary节点生效(从节点需单独执行compact)。
  • secondary节点节点执行compact时会进入RECOVERING状态(RECOVERING状态读操作会失败),compact操作结束后,secondary节点进入SECONDARY状态。
  • compact只使用单个实例,在分片集群模式下,需单独为每个实例执行compact命令。

参考

https://docs.mongodb.com/manual/reference/command/compact

阅读 81 · 发布于 2020-09-29

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看换一批