Файлы данных MongoDB становятся меньше после миграции

StackOverflow https://stackoverflow.com//questions/25020856

  •  21-12-2019
  •  | 
  •  

Вопрос

На моем первом сервере я получаю:

root@prod ~ # du -hs /var/lib/mongodb/
909G    /var/lib/mongodb/
.

После миграции это база данных с mongodump / mongorestore На моем втором сервере я получаю:

root@prod ~ # du -hs /var/lib/mongodb/
30G /var/lib/mongodb/
.

После того, как я ждал несколько часов, Mongo закончил индексацию, я получил:

root@prod ~ # du -hs /var/lib/mongodb/
54G /var/lib/mongodb/
.

Я тестировал базу данных, и нет поврежденных или пропущенных данных.

Почему настолько большая разница в размере до и после миграции?

Это было полезно?

Решение

MongoDB не восстановляет дисковое пространство при фактическом размере данных падает из-за удаления данных вместе с другими причинами. В онлайн-документах есть приличное объяснение:

Почему файлы в моем каталоге данных больше, чем данные в моей базе данных?

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

PREALLOCATED файлы данных.

в каталоге данных, Mongodb PrealLocates файлы данных для конкретного Размер, отчасти для предотвращения фрагментации файловой системы. Монгодб имен первый файл данных .0, следующий .1 и т. Д. Первый файл Mongod Artocates 64 мегабайт, следующие 128 мегабайт, и так далее до 2 гигабайт, насколько все последующие файлы 2 гигабайта. Файлы данных включают в себя файлы с выделенным пространством, но которые не имеют данных. Mongod может выделить файл данных 1 гигабайта, который может быть на 90% пустым. Для большинства больших баз данных неиспользуемое выделенное пространство маленький по сравнению с базой данных.

на Unix подобных системам, Mongod PrealLocates дополнительный файл данных и Инициализирует дисковое пространство до 0. PresalLocation файлов данных в Фон предотвращает значительные задержки, когда новый файл базы данных Далее выделил.

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

на системах Linux вы можете использовать HDPARM, чтобы получить представление о том, как дорого Распределение может быть:

time hdparm - отделяет $ ((1024 * 1024)) testfile

oplog.

Если этот Mongod является членом набора реплики, каталог данных включает в себя файл Oplog.rs, который представляет собой расплату в локальной базе данных. Выделение по умолчанию составляет примерно 5% Дисковое пространство на 64-битных установках, см. Раздел Oplog для получения дополнительной информации Информация. В большинстве случаев вам не нужно разместить Oplog. Однако, если вы сделаете, см. Изменение размера OPLog.

журнал.

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

<Сильные> Пустые записи.

Mongodb поддерживает списки пустых записей в файлах данных при удалении Документы и сборники. Монгодб может повторно использовать это пространство, но будет Никогда не возвращайте это пространство в операционную систему.

к распределенному хранилище, используйте компакт, какие де-фрагменты выделенное пространство. От деразъемного хранения, Mongodb может эффективно Используйте выделенное пространство. Компакт требует до 2 гигабайт дополнительных Дисковое пространство для запуска. Не используйте компакт, если вы критически низко Дисковое пространство.

<Сильные> Важные

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

Чтобы восстановить удаленное пространство, используйте RepaureDatabase, который перестраивает база данных, которые де-фрагменты хранилища и могут освободить место для Операционная система. RepaureDatabase требует до 2 гигабайт дополнительных Дисковое пространство для запуска. Не используйте RepairDatabase, если вы критически низкие на дисковом пространстве.

http://docs.mongodb.org/manual/faq/storage/

Что они не говорят вам, это два других способа восстановления / восстановления дискового пространства - Mongodump / Mongorestore, как вы сделали или добавили новый элемент на реплику, установленные с пустым диском, так что оно пишет файлы данных файлов данных с нуля ,

Если вы заинтересованы в мониторинге этого, команда DB.Stats () возвращает множество данных о данных, индексах, хранении и размерах файлов:

http://docs.mongodb.org/manual/reference/command/dbstats/

Другие советы

Over time the MongoDB files develop fragmentation. When you do a "migration", or whack the data directory and force a re-sync, the files pack down. If your application does a lot of deletes or updates which grow the documents fragmentation develops fairly quickly. In our deployment it is updates that grow the documents that causes this. Somehow MongoDB moves the document when it sees that the updated document can't fit in the space of the original document. There is some way to add padding factors to the collection to avoid this.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top