Уменьшение размера файла базы данных MongoDB - PullRequest
161 голосов
/ 03 июня 2010

У меня есть база данных MongoDB, которая когда-то была большой (> 3 ГБ). С тех пор документы были удалены, и я ожидал, что размер файлов базы данных уменьшится соответственно.

Но поскольку MongoDB сохраняет выделенное пространство, файлы все еще остаются большими.

Я тут и там читал, что команда администратора mongod --repair используется для освобождения неиспользуемого пространства, но на диске недостаточно места для выполнения этой команды.

Вы знаете, как я могу освободить неиспользуемое пространство?

Ответы [ 16 ]

1 голос
/ 11 сентября 2015

Когда у меня возникла такая же проблема, я остановил свой сервер Монго и снова запустил его командой

mongod --repair

Перед запуском операции восстановления убедитесь, что на жестком диске достаточно свободного места (min - размер вашей базы данных)

1 голос
/ 09 августа 2013

В целом компакт предпочтительнее, чем repairDatabase. Но одним из преимуществ восстановления по сравнению с компактным является возможность восстановления всего кластера. компактный, вы должны войти в каждый осколок, что немного раздражает.

1 голос
/ 08 сентября 2011

Файлы базы данных не могут быть уменьшены в размере. При восстановлении базы данных сервер Монго может удалить только некоторые из его файлов. Если большой объем данных был удален, сервер mongo «освободит» (удалит) во время восстановления некоторые из существующих файлов.

0 голосов
/ 28 ноября 2018

В автономном режиме вы можете использовать компакт или ремонт,

Для сегментированного набора кластеров или реплик, по моему опыту, после того, как вы запустили сжатие на первичной, а затем на компактной вторичной, размер основной базы данных уменьшился, но не вторичной. Возможно, вы захотите сделать resync member , чтобы уменьшить размер вторичной базы данных. и, делая это, вы можете обнаружить, что размер вторичной базы данных даже больше, чем первичной, я полагаю, компактная команда на самом деле не сжимает коллекцию. Итак, я закончил переключением основного и дополнительного набора реплик и повторным выполнением повторной синхронизации .

Мой вывод заключается в том, что лучший способ уменьшить размер сегментированного набора / реплики - выполнить повторную синхронизацию, переключить основной вторичный сервер и выполнить повторную синхронизацию.

0 голосов
/ 20 сентября 2018

mongoDB - ремонт не рекомендуется в случае сегментированного кластера.

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

db.runCommand( { compact : "collection_name" } )

при использовании с силой: true, компактный запуск на первичном из набора реплик. например, db.runCommand ( { command : "collection_name", force : true } )

Другие вопросы для рассмотрения: -Он блокирует операции. поэтому рекомендуется выполнить в окне обслуживания. -Если наборы реплик работают на разных серверах, необходимо выполнять на каждом элементе отдельно - В случае сегментированного кластера компакт должен выполняться на каждом элементе сегмента отдельно. Невозможно выполнить против экземпляра Mongos.

0 голосов
/ 07 февраля 2015

Только один способ, которым я смог это сделать. Нет гарантии безопасности ваших существующих данных. Попробуйте на свой страх и риск.

Удалите файлы данных напрямую и перезапустите mongod.

Например, в Ubuntu (путь по умолчанию к данным: / var / lib / mongodb) у меня было несколько файлов с именем, например: collection. #. Я держу коллекцию.0 и удалил все остальные.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...