7

У меня есть база данных mongodb, которая использует примерно 1 ГБ пространства. Я был удивлен, когда на моем сервере не хватило места, а затем я понял, что журнал использует 3 ГБ.

В документации сказано, что «как только MongoDB применяет все операции записи в файлах журнала, он удаляет эти файлы», но, похоже, это не так, поскольку база данных синхронизируется, а журналирование в 3 раза больше, чем вся база данных.

Как я могу удалить эти файлы журналов и настроить систему так, чтобы она занимала меньше места?

1 ответ1

3

Указанная вами документация верна, если вы запустите команду db.fsyncLock(), вы сбросите все изменения на диск, и файлы журнала будут удалены. Как только вы запустите db.fsyncUnlock() и прибудет другая запись, файлы журнала снова появятся:

Вот краткий пример тестовой системы:

> db.foo.insert({"id" : 1})

Вот как выглядит каталог журнала:

$ls /usr/local/var/mongodb/journal/
j._1 lsn
$

Теперь давайте заблокируем и запишем все на диск:

> db.fsyncLock()
{
    "info" : "now locked against writes, use db.fsyncUnlock() to unlock",
    "seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
    "ok" : 1
}

Каталог журнала теперь пуст:

$ls /usr/local/var/mongodb/journal/
$

Разблокировать, вставить:

> db.fsyncUnlock()
{ "ok" : 1, "info" : "unlock completed" }
> db.foo.insert({"id" : 1})

Теперь у нас снова есть файлы журнала:

$ls /usr/local/var/mongodb/journal/
j._2 lsn
$

Следовательно, если вы не блокируете, сбрасываете базы данных на диск и постоянно получаете записи, у вас всегда будут файлы журнала.

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

Если вы хотите уменьшить размер журнальных файлов, вы можете запустить их с опцией --smallfiles . Это даст вам 3 х 128 МБ файлов, а не 3 х 1 ГБ файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .