mongodb内存混乱。页面错误和索引大小
我完全搞不清楚我的mongodb实际使用了多少内存 发出db.stats(1024*1024)我得到一个输出mongodb内存混乱。页面错误和索引大小,mongodb,indexing,Mongodb,Indexing,我完全搞不清楚我的mongodb实际使用了多少内存 发出db.stats(1024*1024)我得到一个输出 > db.stats(1024*1024) { "db" : "test", "collections" : 9, "objects" : 38035503, "avgObjSize" : 535.2138471259339, "dataSize" : 19414, "storageSize" : 22280, "numExt
> 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
所以我猜它实际上已经用完了内存,现在直接从磁盘交换和拾取
基本上,我的问题是,在RAM耗尽之前,我如何确定能够存储的数据量?。统计数据告诉我,它只有4GB的索引,但mongo似乎被阻塞了,交换并消耗了所有17GB。我遗漏了什么?您有17GB的RAM可用于存储20GB的数据和4GB的索引(这只是在这个数据库上-我不知道您的系统中是否还有更多,但mongostat说您的数据文件总大小约为28GB) 如果您正在查询整个数据集,您难道不希望最终读取的新数据记录不再适合RAM,而不显示一些以前读取(并加载到RAM)的记录吗?这就是你看到的页面错误
您关心的不是数据存储,而是正在使用、查询或访问的数据。如果它不能全部留在RAM中,那么它将被调出,然后在再次访问时需要重新调回。索引大小与此无关。重要的是您的工作集大小。MongoDB的最新版本确实有一种可能计算工作集大小的方法:尽管它只能给出一个粗略的估计。基本上你需要考虑的是:A。我所有的查询都在索引中,b。我的查询是否包括在内,如果不包括的话,在给定的时间内我要分页到我的工作集中的文档有多少?这些是单个数据库的统计数据,mongostat显示您有27.9G的数据文件。还有其他的星展银行吗?复制打开了吗?@Sammaye你又错了。数据和索引大小与此有关-您认为还有什么占用了RAM?@AsyaKamsky工作集并不像OP所想的那样,只包含您的索引?它是数据大小加上索引大小。这如何使索引大小变得无关紧要?