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: 10,697 · Posted: 2020-09-29
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...