Какие размеры возвращаются в `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)`);
}