我多少实际内存心乱如麻正在使用MongoDB的我..mongodb记忆混乱。缺页和索引的大小
发行db.stats(1024 * 1024),我得到一个输出
> db.stats(1024*1024)
{
"db" : "test",
"collections" : 9,
"objects" : 38035503,
"avgObjSize" : 535.2138471259339,
"dataSize" : 19414,
"storageSize" : 22280,
"numExtents" : 62,
"indexes" : 12,
"indexSize" : 4039,
"fileSize" : 30642,
"nsSizeMB" : 16,
"ok" : 1
}
所以我有一个小于4000万的对象和4GB的索引大小。 在具有17GB RAM的Windows服务器上运行该工具,查看资源监视器和任务管理器,我的mongodb实例有一个17GB的工作集和相同数量的可共享。
我的第一个虽然是“好的,所以它已经预先分配数据文件,以便当它实际上需要空间时会有更快的插入”。
但后来我开始mongostat并可以清楚地看到一个非常高的页面错误:
insert query update delete getmore command flushes mapped vsize res faults
time
220 2419 0 0 0 221 0 27.9g 56.1g 16.8g 2659
所以即时猜测,它实际上已经耗尽内存,现在交换,直接从磁盘回升。
我的问题基本上是我如何才能真正确定数据量,我将能够在我用完内存之前存储?统计数据告诉我,它的索引值只有4GB,但mongo似乎被阻塞,交换和消耗全部17GB。我错过了什么?
指数大小是无关紧要的。重要的是你的工作集大小。最新版本的MongoDB确实可以计算出您的工作集大小:http://docs.mongodb.org/manual/reference/server-status/#workingset尽管它只能给出一个粗略的估计。基本上你需要考虑的是:a。我所有的查询都碰到索引,b。我的查询是否包含在内,如果不是在给定的时间内分配到我的工作集中的文档数量是多少? – Sammaye 2013-04-25 07:45:46
这些是单个数据库的统计数据,mongostat显示您拥有27.9G的数据文件。还有其他数据库吗?是复制吗? – 2013-04-25 07:46:23
@Sammaye你再次失败了。数据和索引大小都与它有关 - 你认为还有什么是占用RAM的? – 2013-04-25 07:47:10