0

我在 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 db服务器版本为2.0.6

附加信息:

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

Mongo 数据库服务器日志

Mongo db 使用命令行选项启动:

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

1 回答 1

3

MongoDB在 64 位系统上运行得更好,你能换成 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", "code" : 0, "ok" : 0 } db. createCollection("my13", {capped:true, size:536608767}) { "ok" : 1 }`

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

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

我已经为这个问题记录了SERVER-6722

于 2012-08-06T11:23:49.563 回答