我在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文件)。
使用命令行选项启动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
}
>
答案 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。