Почему мой mongodb fileSize намного больше, чем storageSize в db.stats()?

У меня есть db с именем log_test1, только с 1 закрытым журналом сбора. Максимальный размер закрытой коллекции - 512M. После того, как я вставил 200k данных, я нашел, что использование диска db равно 1.6G. С db.stats() я могу заметить, что размер storageSize равен 512M, но мой фактический fileSize равен 1.6G, почему это произошло? Как я могу контролировать размер диска - это только мой размер коллекции плюс размер индекса?

> use log_test1
switched to db log_test1
> db.stats()
{
    "db" : "log_test1",
    "collections" : 3,
    "objects" : 200018,
    "avgObjSize" : 615.8577328040476,
    "dataSize" : 123182632,
    "storageSize" : 512008192,
    "numExtents" : 3,
    "indexes" : 8,
    "indexSize" : 71907920,
    "fileSize" : 1610612736,
    "nsSizeMB" : 16,
    "dataFileVersion" : {
        "major" : 4,
        "minor" : 5
    },
    "ok" : 1
}

Ответ 1

Вероятно, это связано с тем, что MongoDB предопределяет данные и файлы журналов.


MongoDB 2

В каталоге данных MongoDB предопределяет файлы данных определенного размера, частично для предотвращения фрагментации файловой системы. MongoDB называет первый файл данных <databasename>.0, следующий <databasename>.1 и т.д. Первый файл mongod выделяет 64 мегабайта, следующие 128 мегабайт и т.д., До 2 гигабайт, при которых point все последующие файлы составляют 2 гигабайта. Файлы данных включают файлы с выделенным пространством, но не содержат данных. mongod может выделить файл данных объемом 1 гигабайт, который может быть на 90% пустым. Для большинства более крупных баз данных неиспользуемое выделенное пространство мало по сравнению с базой данных.

В Unix-подобных системах mongod предопределяет дополнительный файл данных и инициализирует дисковое пространство до 0. Предварительное выделение файлов данных в фоновом режиме предотвращает значительные задержки при следующем назначении нового файла базы данных.

Вы можете отключить предварительное распределение с опцией времени noprealloc. Однако noprealloc не, предназначенный для использования в производственных средах: используйте только noprealloc для тестирования и с небольшими наборами данных, где вы часто удаляете базы данных. p >

MongoDB 3

Файлы данных в вашем каталоге данных, который является /data/dbкаталог в конфигурациях по умолчанию, может быть больше, чем набор данных вставлен в базу данных. Рассмотрим следующие возможные причины:

Предопределенные файлы данных

MongoDB предопределяет свои файлы данных, чтобы избежать фрагментации файловой системы, и из-за этого размер этих файлов не обязательно отражают размер ваших данных.

Опция storage.mmapv1.smallFiles уменьшит размер этих файлы, которые могут быть полезны, если на диске имеется множество небольших баз данных.

. oplog

Если этот mongod является членом набора реплик, данные каталог содержит файл oplog.rs, который является предварительно распределенным коллекции в локальной базе данных.

Распределение по умолчанию составляет примерно 5% дискового пространства на 64-битном установки.

Журнал

Каталог данных содержит файлы журнала, в которых хранятся записывать операции на диске до того, как MongoDB применит их к базам данных.

Пустые записи

MongoDB ведет списки пустых записей в файлах данных поскольку он удаляет документы и коллекции. MongoDB может повторно использовать это пространство, но по умолчанию не возвратит это пространство в операционную систему.


Взято из Часто задаваемые вопросы по хранению MongoDB.