2012-11-25 11 views

risposta

4

Da una parte, è del tutto possibile solo alcune parti del indice è nella RAM http://docs.mongodb.org/manual/applications/indexes/#indexing-right-handed

rilevamenti non deve entrare interamente nella RAM in tutti i casi. Se il valore del campo indicizzato cresce con ogni inserto e la maggior parte delle query seleziona i documenti aggiunti di recente; quindi MongoDB ha solo bisogno di mantenere le parti dell'indice che contengono i valori più recenti o "più a destra" nella RAM. Ciò consente un uso efficiente dell'indice per operazioni di lettura e scrittura e riduce al minimo la quantità di RAM necessaria per supportare l'indice.

D'altra parte, db.serverStatus() fornisce un insieme delle informazioni desiderate. Controllare http://docs.mongodb.org/manual/reference/server-status/#server-status-indexcounters:

Il valore indexCounters.btree.hits riflette il numero di volte che un indice è stata letta e mongod è in grado di restituire l'indice dalla memoria.

+0

Grazie. Ho provato 'db.serverStatus(). IndexCounters.btree' Ma mostra un oggetto con tutti gli zeri. '\t { \t \t "accessi": 0, \t \t "hits": 0, \t \t "manca": 0, \t \t "azzera": 0, \t \t "missRatio": 0 \t} ' Ho eseguito query poche volte e la mia query utilizza un indice. explain() lo mostra. Riesci a trovare perché? –

+0

Quale versione stai utilizzando? I documenti indicano che "In 2.2 e versioni successive, questi dati riflettono l'uso effettivo dell'indice". – chx

+0

È 2.2.0, aggiornerò alla 2.2.1 e vedremo i risultati. –

1

Sì, c'è un modo. È possibile utilizzare totalIndexSize() o stats() per verificare le dimensioni dell'indice

> 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 

Sia restituirà la dimensione dell'indice della collezione in byte. Sopra l'esempio mostra la dimensione dell'indice è 1GB.

UPDATE

Per trovare la dimensione totale dell'indice di tutto il database, è possibile utilizzare 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 
} 

Ora è possibile confrontare indexSize con la macchina RAM per verificare se l'indice si inserisce in memoria o no. E puoi aumentare la dimensione della RAM per adattarla all'indice completo.

Spero che sia utile

+0

Ma questo non dice nulla su dove si trova l'indice ...? – chx

+0

@chx, controlla la mia risposta aggiornata – RameshVel

+0

@RameshVel Ho abbastanza RAM ma stavo cercando una soluzione diretta se posso cercarla. –

Problemi correlati