MongoDB删除了无用数据后,并不会释放磁盘空间。需使用compact或repairDatabase命令。
repairDatabase
4.2版本开始移除了db.repairDatabase()命令。并且在WiredTiger存储引擎的数据库中,不会压缩数据释放磁盘空间。
预计可回收空间
单点或副本集,单位为字节。
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同步初始化)
阅读(1088) | 评论(0) | 转发(0) |