#mongodb
#mongodb
Вопрос:
Я знаю, что могу использовать db.collection.totalIndexSize()
для получения общего размера индекса, но мне интересно увидеть размер отдельного индекса.
Поддерживается ли это?
Ответ №1:
Конечно, можно. db.collection.stats().indexSizes
это встроенный документ, в котором каждое имя индекса является ключом, а значение представляет собой общий размер индекса в байтах :
> db.test.stats()
{
"ns" : "test.test",
<snip>
"indexSizes" : {
"_id_" : 137904592,
"a_1" : 106925728
},
"ok" : 1
}
Комментарии:
1. Как мне получить размеры в КБ или МБ?
Ответ №2:
Это простой скрипт для определения индексов, которые занимают больше всего места во всей вашей базе данных:
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] );
Ответ №3:
Перечисляя размер индексов для каждой коллекции в конкретной БД, мы можем использовать следующий фрагмент кода:
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");
Вы можете изменить значение переменных в приведенном выше фрагменте
var reverse = true;
var sortField = "indexSizeInMB";
чтобы изменить поле сортировки и порядок.
Ответ №4:
Эй, просто добавьте значение в функцию totalIndexSize() как
- db.collection.totalIndexSize(1)
например
db.test.totalIndexSize(1)