在mongodb中查找索引是驻留在RAM还是磁盘的最佳方法是什么?
答案 0 :(得分:4)
一方面,完全有可能只有索引的某些部分位于RAM http://docs.mongodb.org/manual/applications/indexes/#indexing-right-handed
中索引在所有情况下都不必完全适合RAM。如果索引字段的值随每个插入增长,并且大多数查询选择最近添加的文档;那么MongoDB只需要保留索引中包含RAM中最新或“最右”值的部分。这样可以有效地将索引用于读写操作,并最大限度地减少支持索引所需的RAM量。
另一方面,db.serverStatus()
为您提供所需信息的汇总。检查http://docs.mongodb.org/manual/reference/server-status/#server-status-indexcounters:
indexCounters.btree.hits
值反映了索引被访问的次数,mongod能够从内存中返回索引。
答案 1 :(得分:1)
是的,有办法。您可以使用totalIndexSize()
或stats()
来检查索引的大小
> db.collection.totalIndexSize()
> 1073741824
> db.collection.stats()
> {
"ns" : "collection.test",
"count" : 100006,
"size" : 72104,
"avgObjSize" : 4506.5,
"storageSize" : 688128,
"numExtents" : 3,
"nindexes" : 1,
"lastExtentSize" : 524288,
"paddingFactor" : 1.0170000000000319,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 1073741824,
"indexSizes" : {
"_id_" : 1073741824
},
"ok" : 1
两者都将以字节为单位返回集合的索引大小。上面的示例显示索引大小为1GB
。
<强>更新强>
要查找整个数据库的总索引大小,可以使用stats()
> db.stats()
{
"db" : "test",
"collections" : 10,
"objects" : 5909990,
"avgObjSize" : 2888.31186440677965,
"dataSize" : 170123304,
"storageSize" : 14745603499,
"numExtents" : 17,
"indexes" : 8,
"indexSize" : 1073741824,
"fileSize" : 50331648,
"nsSizeMB" : 163453,
"ok" : 1
}
现在您可以将indexSize
与机器RAM进行比较,以检查索引是否适合内存。并且您可以增加RAM大小以适应完整索引。
希望有所帮助