无法创建大于500兆字节的上限集合

时间:2012-08-06 09:27:12

标签: c# mongodb

我在32位系统上使用Mongo数据库,我需要创建一个最大大小为1GB的大型上限集合。在64位系统上一切正常,但在32位我得到错误:

com.mongodb.CommandResult$CommandFailure: command failed [command failed [create] { 
"serverUsed" : "localhost:27017" , 
"errmsg" : "exception: assertion db\\pdfile.cpp:437" , 
"code" : 0 , 
"ok" : 0.0}

在32位系统上,服务器的总存储大小为2GB,但即使使用此大小,我也无法创建大于500MB的集合。这个神奇的数字是什么意思?

Mongo数据库服务器版本是2.0.6

其他信息:

我有几个数据库文件,其总大小为34MB。在运行mongo db之前,我将这些文件复制到'data'目录中,启动Mongo db然后在shell中我看到相同的数字表示整个大小 - 35651584 (34MB)(使用的命令来自注释下面)。如果我尝试创建大小为500MB的集合,我会看到添加了一个新文件(512MB)。但是,例如,如果我将尝试创建一个大小为600MB的集合,我上面有一个错误(但仍然添加了512MB文件)。

The Mongo db server log

使用命令行选项启动Mongo数据库:

> db.adminCommand("getCmdLineOpts")
{
        "argv" : [
                "mongod.exe",
                "--dbpath",
                "..\\data",
                "-vvvvvv",
                "--logpath",
                "..\\log\\server.log"
        ],
        "parsed" : {
                "dbpath" : "..\\data",
                "logpath" : "..\\log\\server.log",
                "vvvvvv" : true
        },
        "ok" : 1
}
>

1 个答案:

答案 0 :(得分:3)

64位系统上的MongoDB runs much better,您可以更改为x64吗?正如Stennie所说,由于数据库中的其他数据,您必须达到mmap限制​​。

您是否可以通过连接mongo shell并尝试通过运行比512 MB大1个字节的新集合来创建新的假设来测试此假设 -

db.createCollection("mycoll6", {capped:true, size:536870913})

您应该希望收到以下错误消息 -

"errmsg" : "exception: can't map file memory - mongo requires 64 bit build for larger datasets",

在Mongo shell中,连接到admin数据库并查看数据库的大小以查看您有多少数据 -

use admin
show dbs

更新:基于一些额外的测试(我使用Ubuntu 12.04 32位),这似乎可能是一个错误。

Ubuntu测试

  

db.createCollection(“my13”,{capped:true,size:536608768})   {       “errmsg”:“exception:assertion db / pdfile.cpp:437”,       “代码”:0,       “好的”:0   }   db.createCollection(“my13”,{capped:true,size:536608767})   {“ok”:1}`

536608767字节略低于512 MB,为文件中的某种标题留出了空间。

我认为它可能与[smallfiles][2]有关,因为所有32位安装都使用该选项运行,但是,使用smallfiles的x64版本不会显示相同的症状。

我已针对此问题记录SERVER-6722