Почему после удаления коллекции размером более 110 ГБ мой каталог / var / lib / mongodb по-прежнему имеет такой же размер?

12

У меня проблемы с MongoDB и использованием пространства. В частности, у меня когда-то была большая коллекция из примерно 600 миллионов записей общим объемом 110+ ГБ на диске. Недавно я решил отбросить его, потому что данные устарели, для этого я отбросил коллекцию через веб-интерфейс rockmongo. Соответственно, rockmongo больше не показывает мне коллекцию, однако использование моего диска совсем не изменилось.

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

Я пытался выполнить «восстановление», но система жалуется, что на диске недостаточно места ... потому что все это используется MongoDB.

tunnuz
источник

Ответы:

19

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

Вам нужно будет бежать db.repairDatabase()в компактном пространстве, как указано здесь

н.у.к.
источник
2
Место на жестком диске было слишком мало, чтобы сделать это. Однако я решил так: mongodump, oldDatabase.dropDatabase(), mongorestore --db newDatabase dump/oldDatabase.
Туннуз
4

Хотя описанный выше подход mongodump / drop / mongorestore будет хорошо работать с технической точки зрения, он потребует от вас перевести базу данных в автономный режим, пока вы это делаете, что может повлиять на обслуживание.

Если вы хотите сделать это без простоя И если вы используете наборы реплик MongoDB [1], вы можете сделать это следующим образом:

  1. Выберите члена и остановите там MongoDB (остановка службы mongodb). Если это был ПЕРВИЧНЫЙ, подождите, пока другой член будет избран ПЕРВИЧНЫМ.
  2. Удалите файлы данных этого члена (cd / var / lib / mongodb; rm *).
  3. Перезапустите сервис MongoDB снова (запуск сервиса mongodb).
  4. Подождите, пока участник повторно синхронизируется с ПЕРВИЧНЫМ (rs.status ()).
  5. Это восстановит только необходимые (меньшие) файлы данных.

Затем повторите описанные выше шаги для каждого из остальных участников в наборе реплик.

[1] https://docs.mongodb.org/manual/tutorial/deploy-replica-set )

Джеймс Мернин
источник