db.repairDatabase()没有减小数据库的大小

时间:2013-06-23 05:00:03

标签: mongodb

我的数据库大约是8G。 我复制数据库以生成副本。 然后我用js控制台修剪了副本。 然后我运行了一个reapir DB,副本仍然是原始的大小。

1 个答案:

答案 0 :(得分:2)

很可能,这意味着您没有释放足够的空间来将整个范围或文件返回到操作系统。想象一下,你有五个2GB文件(MongoDB在前几个较小的文件之后以2GB的增量预分配文件),现在想象你在这个数据库中有8GB的数据。最后一个文件将始终为空,因为MongoDB在需要之前预先分配文件。所以8GB占用4个2GB文件,1GB 2GB文件是空的。

现在你做一些修剪 - 甚至可能删除1.8GB的东西。运行repairDB,它会在一组新的数据库文件中尽可能紧凑地重写每条记录。除了它仍然需要相同的5个2GB文件,因为第四个文件有100MB的数据,最后一个文件必须是空的。

您可以查看db.stats()的输出以查看数据大小与存储大小的比较,但事实是,与分配的文件大小相比,这些数字相对较小,这可能是您的原因所在正在看你所看到的。