为什么mongodb不使用已删除数据的空间?

时间:2014-03-28 02:32:14

标签: mongodb

我将一个分片的maxsize设置为20GB并保持每天删除数据。但是我看到这个分片中的一个数据库storageSize约为18G,但它在磁盘上的数据文件大约是33GB并且它还在不断增长。我知道mongo只是标志删除数据,但它应该重用那个空间吗?或者我需要配置一些东西?

1 个答案:

答案 0 :(得分:1)

当你想要回到你的空间时,我不会按照建议在你的数据库上运行repair;这会给一个人带来灾难性的性能问题。

你遇到的问题是文件不适合"进入你删除的桶列表中的空间(供参考,这是一个很好的演示文稿:http://www.mongodb.com/presentations/storage-engine-internals它将解释我所说的一切)并且因为MongoDB耗尽了#34; steam"在创建一个全新的文档之前搜索列表,您最有可能为您要插入/更新的每个文档获得新的范围。

您可以运行compact,但就性能而言,这与repair一样糟糕,但它会将这些删除空间发送到可供任何大小文档使用的空闲列表。

你也可以使用powerof2sizes进行collmod:http://docs.mongodb.org/manual/reference/command/collMod/#usePowerOf2Sizes这可能很好地解决你的问题。

理想情况下,您需要重做您的应用程序,您低估了MongoDB的就地更新/插入方式,现在它正在屠杀您。