如何查找索引是在RAM还是磁盘[MongoDB]?

时间:2012-11-25 14:23:36

标签: mongodb indexing database

在mongodb中查找索引是驻留在RAM还是磁盘的最佳方法是什么?

2 个答案:

答案 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大小以适应完整索引。

希望有所帮助