查找索引是否驻留在 RAM 或 MongoDB 磁盘中的最佳方法是什么?
2 回答
一方面,完全有可能只有索引的某些部分在 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 能够从内存中返回索引。
是的,有办法。您可以使用totalIndexSize()
or 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 大小以容纳完整索引。
希望能帮助到你