Чому після видалення колекції об'ємом 110+ ГБ, каталог / var / lib / mongodb все ще має однаковий розмір?


12

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

Чи є якась чиста операція, про яку я не знаю, яку потрібно запустити для синхронізації бази даних з файлами бази даних на диску?

Я спробував виконати "ремонт", але система скаржиться, що на диску недостатньо місця ... це тому, що це все використовується MongoDB.

Відповіді:


19

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

Вам потрібно буде бігти db.repairDatabase()до компактного простору, як зазначено тут


2
Місце на жорсткому диску було занадто мало, щоб це зробити. Однак я вирішив так: mongodump, oldDatabase.dropDatabase(), mongorestore --db newDatabase dump/oldDatabase.
tunnuz

5

Хоча вищезазначений підхід mongodump / drop / mongorestore буде добре працювати з технічної точки зору, він вимагатиме від вас взяти базу даних в автономному режимі, поки ви це зробите, що буде впливом на послуги.

Якщо ви хочете зробити це без простоїв І якщо ви використовуєте набори репліку MongoDB [1], ви можете зробити так:

  1. Виберіть члена і зупиніть там MongoDB (зупинка служби mongodb). Якщо це був ПЕРВИЧНИЙ, зачекайте, коли інший член буде обраний ПЕРШИНИМ.
  2. Видаліть файли даних цього члена (cd / var / lib / mongodb; rm *).
  3. Знову перезапустіть послугу MongoDB (запуск послуги mongodb).
  4. Зачекайте, коли член повторно синхронізується з PRIMARY (rs.status ()).
  5. Це відновить лише необхідні (менші) файли даних.

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

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.