Безопасно ли удалить файл журнала 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
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 startMongoDB >= 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страница.Не забудьте опорожнить
journalsudo service mongodb stop sudo rm -rf /var/lib/mongodb/journal/* sudo service mongodb start
Comments