Безопасно ли удалить файл журнала mongodb?



Если я удалю файл журнала 3.1 G,sudo service mongodb restart не удастся. Однако, этот файл занимает слишком много места. Как я могу решить эту проблему? Как я могу его удалить?



bash$ du -sh /var/lib/mongodb/*
4.0K _tmp
65M auction_development.0
128M auction_development.1
17M auction_development.ns
3.1G journal
4.0K mongod.lock
646   3  

3 ответов:

TL; DR: у вас есть два варианта. Используйте --smallfiles опция запуска при запуске MongoDB в ограничить размер файлов журнала до 128 Мб, или отключить ведение журнала с помощью . Используя --nojournal в производстве обычно плохая идея, и часто имеет смысл использовать разные проблемы записи также в разработке, поэтому у вас нет другого кода в dev и prod.

долгий ответ: Нет, удаление файла журнала не безопасно. Идея ведение журнала это:

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

к сожалению, записи на диск занимают эоны по сравнению с записями в ОЗУ, таким образом, база данных находится в дилемме: не запись на диск является рискованным, потому что неожиданное завершение работы приведет к потере данных. Но запись на диск для каждой отдельной операции записи так сильно снизит производительность базы данных что он становится непригодным для практических целей.

Теперь вместо записи в сами файлы данных и вместо того, чтобы делать это для каждого запроса, база данных просто добавит в файл журнала, где он хранит все операции, которые еще не были зафиксированы в фактических файлах данных. Это намного быстрее, потому что файл уже "горячий", так как он читается и записывается все время, и это только один файл, а не куча файлов, и, наконец, потому что он записывает все в ожидании операции в пакете каждые 100 мс по умолчанию. Удаление этого файла в середине чего-то наносит ущерб.

как объясняется в ответе Мнемосина, ведение журнала имеет важное значение для механизмов хранения. К счастью, это можно контролировать до некоторой степени. Следующее было написано для MMAPv1 механизм хранения, который был по умолчанию до MongoDB 3.2. Тогда, WiredTiger стал двигателем выбора, к которому больше информации можно найти в нижней части этого ответа.

MMAPv1

MongoDB

для нашего развития сервер, мы использовали следующую процедуру:

cp -p /etc/mongodb.conf /etc/mongodb.conf.orig
vi /etc/mongodb.conf

теперь вставить

smallfiles=true

в mongodb.conf, затем сохранить. smallfiles ограничивает файл журнала до 128 МБ.

service mongodb stop
rm -rf /var/lib/mongodb/journal/*
service mongodb start

MongoDB >= 2.6 (YAML Config)

если вы используете MMAPv1 с YAML config style, используйте тот же шаг для резервного копирования конфигурации, что и выше, но в

  mmapv1:

конфигурации блока, вставить

    smallFiles: true 

. Затем выполните описанные выше действия, перезапустив сервер и удалив журналы.

WiredTiger (MongoDB >=3.0, по умолчанию с 3.2)

на машинах разработки файлы журналов в WiredTiger по умолчанию должны быть несколько меньше, чем в MMAPv1, как журнал сжатие включен по умолчанию. Согласно документация, "Файлы журнала WiredTiger для MongoDB имеют максимальный размер около 100 МБ". Он будет "создавать контрольные точки (т. е. запись данных моментального снимка на диск) с интервалом 60 секунд или 2 гигабайта данных журнала."

таким образом, если вы выполняете только небольшое количество запросов (с небольшим количеством данных для изменения) в своей базе данных, файлы журналов с использованием WiredTiger не должны превышать низкий кратный 100 МБ. Однако размер файлов журнала, по-видимому, не настраивается.

mongodb эволюционировал с тех пор. Теперь его В3.4.1 стабильный.
Я на В3.2 вот так:
раскомментируйте # mmapv1: Так выглядит:

  mmapv1:
    smallFiles: true 

если у вас есть другой вариант искать storage Options на reference/configuration-options страница.

Не забудьте опорожнить journal

sudo service mongodb stop
sudo rm -rf /var/lib/mongodb/journal/*
sudo service mongodb start

Comments

    Ничего не найдено.