почему мой размер файла mongodb намного больше, чем размер хранилища в db.stats ()?

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

> 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
}

person Tyr    schedule 12.12.2013    source источник


Ответы (1)


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


МонгоБД 2

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

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

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

MongoDB 3

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

Предварительно выделенные файлы данных

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

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

Оплог

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

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

Журнал

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

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

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


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

person Rafa    schedule 12.12.2013