2012-11-25 29 views

回答

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的是能夠從內存返回指數的次數。

+0

謝謝。我試過'db.serverStatus()。indexCounters.btree'但它顯示了一個全零的對象。 '\t { \t \t 「訪問」:0, \t \t 「命中」:0, \t \t 「未命中」:0, \t \t 「復位」:0, \t \t 「missRatio」:0 \t}' 我跑了查詢幾次,我的查詢使用索引。 explain()顯示它。 你能找到原因嗎? –

+0

你正在運行什麼版本?該文檔指出,「在2.2及更高版本中,這些數據反映了實際的索引使用情況。」 – chx

+0

它是2.2.0,我會更新到2.2.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

UPDATE

要了解整個數據庫的總索引的大小,你可以使用stats()

> db.stats() 
{ 
    "db" : "test", 
    "collections" : 10, 
    "objects" : 5909990, 
    "avgObjSize" : 2888.31186440677965, 
    "dataSize" : 17, 
    "storageSize" : 14745603499, 
    "numExtents" : 17, 
    "indexes" : 8, 
    "indexSize" : 1073741824, 
    "fileSize" : 50331648, 
    "nsSizeMB" : 163453, 
    "ok" : 1 
} 

現在你可以用本機內存比較indexSize檢查索引是否裝入內存或不。並且您可以增加RAM大小以適應全部索引。

希望它有幫助

+0

但這並沒有說什麼索引是什麼...? – chx

+0

@chx,檢查我的更新回答 – RameshVel

+0

@RameshVel我有足夠的內存,但我正在尋找一個直接的解決方案,我是否可以找到它。 –

相關問題