2012-11-25 29 views

cevap

4

, sadece dizinin bazı bölümleri

endeksler her durumda RAM'e tamamen uyacak gerekmez RAM http://docs.mongodb.org/manual/applications/indexes/#indexing-right-handed içindedir tamamen mümkündür. Dizine eklenmiş alanın değeri her ekleme ile büyürse ve çoğu sorgu son eklenen belgeleri seçerse; daha sonra MongoDB'nin sadece RAM'de en yeni veya “en sağdaki” değerleri tutan dizinin bölümlerini tutması gerekir. Bu, okuma ve yazma işlemleri için verimli indeks kullanımına olanak sağlar ve endeksi desteklemek için gereken RAM miktarını en aza indirir.

Diğer taraftan, db.serverStatus(), istediğiniz bilgilerin bir toplamını verir. http://docs.mongodb.org/manual/reference/server-status/#server-status-indexcounters kontrol edin:

indexCounters.btree.hits değer bir indeks erişilebilir ve mongod bellekten endeksi iade edebilir edildiğini sayısını yansıtır.

+0

Teşekkür kontrol yardımcı olur. Ben db.serverStatus() denedim. IndexCounters.btree' Ama Her sıfır ile bir nesneyi gösterir. '\t { \t \t "kere": 0, \t \t "hit": 0, \t \t "başarılı": 0, \t \t "sıfırlar": 0, \t \t "missRatio" 0 \t} ' Sorguyu birkaç kez çalıştırdım ve sorgum bir dizin kullanıyor. açıkla() bunu gösterir. Nedenini bulabilir misin? –

+0

Hangi sürüme çalışıyorsunuz? Dokümanlar, "2.2 ve sonrasında bu verilerin gerçek dizin kullanımını yansıttığını" belirtiyor. – chx

+0

2.2.0 olduğunu, 2.2.1 sürümüne gidip sonuçları göreceğim. –

1

Evet, bir yolu var. Sen bayt toplama endeksi boyutunu dönecektir endeksinin

> 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 

Hem boyutunu kontrol etmek totalIndexSize() veya stats() kullanabilirsiniz. Yukarıdaki örnek, dizin boyutunun 1GB olduğunu göstermektedir.

GÜNCELLEME

tüm veritabanının toplam endeks boyutunu bulmak için, indeks bellekte uyup uymadığını kontrol etmek Makine RAM indexSize karşılaştırabilirsiniz Şimdi 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 
} 

kullanabilirsiniz ya da değil. Ve tam indeksi karşılamak için RAM boyutunu artırabilirsiniz.

o

+0

Ancak bu dizinin nerede olduğuyla ilgili bir şey söylemiyor ...? – chx

+0

@chx, benim güncellenmiş cevabımı kontrol edin – RameshVel

+0

@RameshVel Yeterli RAM'im var ama bakabileceğim bir doğrudan çözüm arıyordum. –

İlgili konular