1

我正在尝试实现更改上限集合大小的功能,并且在 2GB 的 32 位系统上用完了可用的虚拟空间。如果我尝试删除旧集合并创建一个名称相同但大小不同的新集合,Mongo db 会不断创建新文件。

为了修复它,我决定每次更改集合大小时都做一个repairDatabase,以便Mongo Db可以在执行该操作之前减小文件大小。它在 Windows 2008 32 位上运行良好,但在 Windows 2003 32 位上,在经过一定次数的尝试(接近 10 次尝试)后尝试执行一系列操作“repairDatabase”、“dropCollection”、“createCollection”时出现以下错误。

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.

我相信用问题字符代替的消息是'Not enough storage is available to process this command.'. 我在这里SERVER-6044和这里SERVER-5244见过它。但是这些问题似乎都与我的情况不同。有什么办法可以防止 Mongo Db 终止?或者,如果我要更改上限集合大小,是否有更好的方法来减小文件大小?

我还尝试仅创建大小不超过 500MB 的集合(请参阅问题以了解原因)。我正在使用的 Mongo Db 版本是 2.0.7

4

1 回答 1

1

当“repairDatabase”运行时,它需要两倍于正常运行状态的空间,所以我在 32 位系统上用完了 2GB 的限制,即使我的数据库只比 1GB 大一点。解决方案是使用大小低于 500MB 的上限集合,并考虑“repairDatabase”可以使用的空间

于 2012-08-29T14:54:42.953 回答