Какие размеры возвращаются в `show collection`?

Изменить: Этот вопрос не о ванильных MongoDB show collections но о mongo-hacker, Смотрите принятый ответ и комментарии.


Используя Mongo DB 3.2 + WiredTiger, show collections отображает два размера: s1 / s2.

show collections
coll_1               → 10.361MB / 1.289MB
coll_2               →  0.000MB / 0.004MB
coll_3               →  0.000MB / 0.016MB
coll_4               →  0.001MB / 0.031MB

Я думаю, это:

  • s1: общий размер документов в базе данных
  • s2: размер базы данных на диске (документы + индексы) после сжатия

Это правильно? Я не мог найти никаких ссылок в документах.

2 ответа

Решение

Вы используете монго-хакер? По умолчанию в MongoDB 3.2.11, show collections не показывает информацию о размере вообще.

Информация о размере, предоставленная монго-хакером, получается из вывода db.collection.stats().size который показывает вам общий несжатый размер коллекции (без индексов), и db.collection.stats().storageSize который показывает вам физический размер хранилища. Если вы включите сжатие в WiredTiger, storageSize как правило, будет меньше, чем size,

Вы можете найти соответствующий исходный код здесь: https://github.com/TylerBrock/mongo-hacker/blob/0.0.13/hacks/show.js#L57-L72

Вы можете использовать запрос ниже, чтобы получить размер каждой коллекции:

var collectionNames = db.getCollectionNames(), stats = [];
collectionNames.forEach(function (n) { stats.push(db[n].stats()); });
for (var c in stats) {
    print(stats[c]['ns'] + ": " + stats[c]['size'] + " (" + stats[c]['storageSize'] + ")");
}

Очень похоже на ответ @kalaivani, я просто реорганизовал его для облегчения (для меня) понимания, а также печати в ГБ

// Get collection names
var collectionNames = db.getCollectionNames()
var col_stats = [];

// Get stats for every collections
collectionNames.forEach(function (n) { 
    col_stats.push(db.getCollection(n).stats());
});

// Print
for (var item of col_stats) {
    print(`${item['ns']} | size: ${item['size']} 
(${(item['size']/1073741824).toFixed(2)} GB) | storageSize: ${item['storageSize']} 
(${(item['storageSize']/1073741824).toFixed(2)} GB)`);
}
Другие вопросы по тегам