2011-10-21 9 views

risposta

40

Certamente possibile. db.collection.stats().indexSizes è un documento incorporato in cui ogni nome dell'indice è una chiave e il valore è la dimensione dell'indice totale in byte:

> db.test.stats() 
{ 
     "ns" : "test.test", 
     <snip> 
     "indexSizes" : { 
       "_id_" : 137904592, 
       "a_1" : 106925728 
     }, 
     "ok" : 1 
} 
6

Questo è uno script facile scoprire gli indici che occupano più spazio nella vostra intera database:

var indexesArr = {} 
db.getCollectionNames().forEach(function(collection) { 
    indexes = db[collection].stats().indexSizes 
    for (i in indexes) indexesArr[collection + " - " + i] = indexes[i]; 
}); 

var sortable = [], x; 
for (x in indexesArr) sortable.push([x, indexesArr[x]]) 
var pArr = sortable.sort(function(a, b) {return b[1] - a[1]}) 
for (x in pArr) print(pArr[x][1] + ": " + pArr[x][0]); 
1

Listing verso il basso la dimensione degli indici per la raccolta in una specifica db possiamo utilizzare il seguente frammento di codice:

use mydb; 

var collectionStats = [] 

// Get the sizes 
db.getCollectionNames().forEach(function (collectionName) { 
    var collection = db.getCollection(collectionName) 
    var collectionIndexSize = collection.totalIndexSize(); 
    var indexSizeInMB = collectionIndexSize/(1024*1024) 
    collectionStats.push({"collection": collectionName, "indexSizeInMB": indexSizeInMB}) 
}); 

// Sort on collection name or index size 
var reverse = true; 
var sortField = "indexSizeInMB"; 
collectionStats.sort(function (a, b) { 
    comparison = a[sortField] - b[sortField]; 
    if (isNaN(comparison)) comparison = a.collection.localeCompare(b.collection); 
    if (reverse) comparison *= -1; 
    return comparison; 
});undefined; 

// Print the collection stats 
collectionStats.forEach(function (collection) { 
    print(JSON.stringify(collection)); 
}); 

// Total size of indexes 
print("Total size of indexes: " + db.stats()["indexSize"]/(1024*1024) + " MB"); 

È possibile modificare il valore delle variabili nel frammento sopra

var reverse = true; 
var sortField = "indexSizeInMB"; 

per modificare il campo di ordinamento e l'ordine.

Problemi correlati