修复数据库需要多少额外空间

时间:2013-01-23 03:55:13

标签: mongodb

如果没有在此处发布任何回复,我已经感到this question in mongodb google group

我们有一个单节点mongo(版本2.0.1)实例。即使在每日存档之后,我们也会耗尽磁盘空间,因为mongo不会将空间返回到操作系统并尝试自己使用它。目前我们的设置非常稀疏,大约50%的空间闲置。您可以看到数据+索引大小约为1170 GB,而存储大小约为2158 GB,文件大小约为2368 GB。

db.stats()    
{  
    "db" : "default",            
    "collections" : 106,  
    "objects" : 553988389,  
    "avgObjSize" : 2094.1392962010254,  
    "dataSize" : NumberLong("1160128855044"),  
    "storageSize" : NumberLong("2315777236208"),  
    "numExtents" : 1487,  
    "indexes" : 107,  
    "indexSize" : 97914435136,  
    "fileSize" : NumberLong("2543459500032"),  
    "nsSizeMB" : 16,  
    "ok" : 1  
}

我们希望收回这个空间,因为这不是一个关键任务系统(它就像一个日志的倾倒场)可以维持停机时间。我们不想花费在创建副本集上,我们也在物理数据中心,因此不希望仅为修复数据库而附加额外的磁盘。
我想明白: - - 修复数据库需要多少可用磁盘空间
- 修复数据库后我们希望恢复多少空间 - 修复数据库需要多长时间 - 如果所有修复数据库都在继续,那么杀死它并重启数据库是否安全。

我们的数据大量存在于一个集合中,因此紧凑集合是否优于修复数据库。

1 个答案:

答案 0 :(得分:2)

首先我建议你从2.0.1升级。如果不是2.2.2,至少要达到2.0.7。 修复需要2倍的文件大小。 最终您的数据大小应该比文件大小略大。 需要多长时间取决于系统资源以及系统的繁忙程度。 Compact不会释放磁盘空间 - 它只是在数据文件中进行碎片整理。

在2.2.x中你可以使用 collMod

命令设置usePowerOf2Sizes以减少文件碎片。例如,插入800字节文档和1024字节。删除该文档并插入900字节的文档,现在可以重用1024个空格。如果没有这个,可能只分配了850个字节,并且为900字节文档分配了新的可用空间。

kill repairDatabase应该没问题 - 文件被复制到新位置,defragg然后在完成时复制回来,但你必须测试它以确保:)