MongoDB 清理历史数据释放磁盘空间
MongoDB About 1,254 words清理数据
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
同步初始化)。
注意
compact
命令会阻塞数据库操作,需在合理时间段进行操作。- 在主节点执行
compact
不会对副本集的secondary
节点生效(从节点需单独执行compact
)。 secondary
节点节点执行compact
时会进入RECOVERING
状态(RECOVERING
状态读操作会失败),compact
操作结束后,secondary
节点进入SECONDARY
状态。compact
只使用单个实例,在分片集群模式下,需单独为每个实例执行compact
命令。
参考
Views: 9,223 · Posted: 2020-09-29
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...