2012-08-28 25 views
1

我试图实现改变加盖集合大小的功能,并且在2GB的32位系统上运行的可用虚拟空间不足。如果我尝试删除旧集合并创建具有相同名称但大小不同的新集合,Mongo db会不断创建新文件。32位Windows 2003上的多个'repairDatabase'导致MongoDb终止

为了解决这个问题,我决定在每次更改集合的大小时都要执行一次repairDatabase,以便Mongo Db在执行该操作之前可以减小文件大小。它在Windows 2008 32位但在Windows 2003 32位上正常工作在尝试执行一系列操作'repairDatabase','dropCollection','createCollection'(尝试接近10次)后出现以下错误。

Tue Aug 28 06:24:28 [conn7] MapViewOfFileEx for C:/Program Files/.../MongoDb/data/$tmp_repairDatabase_0/sbm.1 failed with errno:8 ?????????????????????????? (file size is 536870912) in MemoryMappedFile::map, terminating. 

我beleive由问题字符替换该消息是'Not enough storage is available to process this command.'。我在这里看到它SERVER-6044和这里SERVER-5244。但是这些问题似乎都与我的情况一样。有什么办法可以阻止Mongo Db终止?或者是否有更好的方法来减少文件大小,如果我改变封顶的集合大小?

我还试图创建只有大小不超过500MB的集合(请参阅this问题以查明原因)。我使用的Mongo Db版本是2.0.7

回答

1

当'repairDatabase'运行时,它需要的空间是正常运行状态的两倍,所以我在32位系统上的运行时间限制为2GB甚至更少尽管我只有一个比1GB大的数据库。 解决方案是使用更小的尺寸大于500MB的加盖集合,并考虑'repairDatabase'可以使用的空间。

相关问题