MongoDB限制内存

时间:2010-12-06 10:04:16

标签: performance ubuntu mongodb debian

我使用mongo存储日志文件。 mongoDB和mysql都在同一台机器上运行,虚拟化mongo env不是一个选项。因为日志表变得非常快,我恐怕很快就会遇到性能问题。有没有办法限制mongo的驻留内存,以便它不会占用所有可用内存并过度减慢mysql服务器?

数据库机:Debian'lenny'5

其他解决方案(请发表评论):

  • 由于我们需要所有历史数据,我们不能使用上限集合,但我也在考虑使用转储和删除旧数据的cron脚本

  • 我是否还应考虑使用较小的密钥,如其他论坛所示?

3 个答案:

答案 0 :(得分:13)

嘿Vlad,你有几个关于日志的简单策略。

首先要知道的是,Mongo通常可以处理大量连续插入而无需大量RAM。原因很简单,你只需插入或更新最近的东西。因此索引大小会增加,但数据会不断被分页。

换句话说,您可以将RAM使用分为两个主要部分:index&数据

如果您正在运行典型的日志记录,则数据部分会不断被清除,因此只有索引才真正保留在RAM中。

要知道的第二件事是,您可以通过将日志放入较小的存储桶来缓解索引问题。这样想吧。如果将所有日志收集到带有日期戳的集合中(称之为logs20101206),那么您还可以控制RAM中索引的大小。

当您滚动数天时,旧索引将从RAM中刷新,并且不会再次访问它,因此它将会消失。

  

但我也在考虑使用转储和删除旧数据的cron脚本

这种按天记录的方法也有助于删除旧数据。在您完成数据的三个月内,您只需执行db.logs20101206.drop()即可立即消失。请注意,您不会回收磁盘空间(它都是预先分配的),但是新数据将填满空位。

  

我是否应该考虑使用其他论坛上建议的较小的密钥?

事实上,我将它内置到我的数据对象中。因此,我使用logs.actionlogs->action访问数据,但在下面,数据实际上已保存到logs.a。在“领域”上花费更多的空间比在“价值”上花费更多的空间,因此值得缩小“领域”并试图将其抽象出去。

答案 1 :(得分:1)

对于使用wiredTiger引擎的版本3.2+,选项--wiredTigerCacheSizeGB与问题相关。如果你知道你在做什么,你可以设置它。我不知道它是否是最佳做法,只需从Maven Shade Plugin阅读并在此处提出。

答案 2 :(得分:0)

对于Windows,似乎可以控制MongoDB使用的内存量,请参阅Captain Codeman的本教程:

Limit MongoDB memory use on Windows without Virtualization