¿Es seguro eliminar el archivo de diario de mongodb?


Si elimino el archivo de diario 3.1 G, sudo service mongodb restart fallará. Sin embargo, este archivo está ocupando demasiado espacio. ¿Cómo puedo resolver este problema? ¿Cómo puedo eliminarlo?

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
Author: Joe Frambach, 2013-10-23

3 answers

TL; DR: Tienes dos opciones. Use la opción de inicio --smallfiles cuando inicie MongoDB para limite el tamaño de los archivos de diario a 128MB, o desactive el registro en diario usando la opción --nojournal. Usar --nojournal en producción suele ser una mala idea, y a menudo tiene sentido usar diferentes preocupaciones de escritura también en desarrollo para no tener código diferente en dev y prod.

La respuesta larga: No, eliminar el archivo de diario no es seguro. La idea del diario es la siguiente:

A entra la escritura. Ahora, para hacer que la escritura sea persistente (y la base de datos duradera), la escritura debe ir de alguna manera al disco.

Desafortunadamente, las escrituras en el disco toman eones en comparación con las escrituras en la RAM, por lo que la base de datos está en un dilema: no escribir en el disco es arriesgado, porque un apagado inesperado causaría pérdida de datos. Pero escribir en el disco para cada operación de escritura disminuirá el rendimiento de la base de datos tan mal que se vuelve inutilizable para la práctica propósito.

Ahora, en lugar de escribir en los propios archivos de datos, y en lugar de hacerlo para cada solicitud, la base de datos simplemente agregará a un archivo de diario donde almacena todas las operaciones que aún no se han confirmado en los archivos de datos reales. Esto es mucho más rápido, porque el archivo ya está 'caliente' ya que se lee y se escribe en todo el tiempo, y es solo un archivo, no un montón de archivos, y por último, porque escribe todas las operaciones pendientes en un lote cada 100 ms por defecto. Eliminar este archivo en medio de algo causa estragos.

 68
Author: mnemosyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-23 07:29:53

Como se explica en la respuesta de mnemosyn, el diario es esencial para los motores de almacenamiento. Afortunadamente, se puede controlar hasta cierto punto. Lo siguiente fue escrito para el motor de almacenamiento MMAPv1, que era el predeterminado hasta MongoDB 3.2. Entonces, WiredTiger se convirtió en el motor de elección, al que se puede encontrar más información al final de esta respuesta.

MMAPv1

MongoDB

Para nuestro servidor de desarrollo, utilizamos lo siguiente procedimiento:

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

Ahora, insértese

smallfiles=true

En el mongodb.conf, luego guardar. smallfiles limita el archivo de diario a 128MB.

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

MongoDB > = 2.6 (YAML Config)

Si está utilizando MMAPv1 con el estilo de configuración YAML , use el mismo paso para hacer una copia de seguridad de la configuración que se muestra arriba, pero en el

  mmapv1:

Bloque de configuración, insertar

    smallFiles: true 

. Después, proceda como se indica anteriormente, reiniciando el servidor mientras elimina revista.

WiredTiger (MongoDB >=3.0, predeterminado desde 3.2)

En máquinas de desarrollo, los archivos de diario bajo WiredTiger deberían ser algo más pequeños por defecto que bajo MMAPv1, ya que la compresión de diario está habilitada por defecto. De acuerdo con la documentación, "Los archivos de diario WiredTiger para MongoDB tienen un límite de tamaño máximo de aproximadamente 100 MB". Creará puntos de control (es decir, escribirá los datos de la instantánea en el disco) a intervalos de 60 segundos o 2 gigabytes de journal data."

Por lo tanto, si solo está ejecutando una cantidad baja de solicitudes (con pocos datos que cambiar) en su base de datos, los archivos de diario que usan WiredTiger no deben exceder un múltiplo bajo de 100 MB. Sin embargo, el tamaño de los archivos de diario no parece configurable.

 69
Author: Mitja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-10 06:48:01

mongodb ha evolucionado desde entonces. Ahora su v3.4.1 estable.
Estoy en v3. 2 aquí está cómo:
descomentar # mmapv1: para que parezca:

  mmapv1:
    smallFiles: true 

Si tiene una versión diferente, busque storage Options en la página reference/configuration-options.

No olvides vaciar el journal

sudo service mongodb stop
sudo rm -rf /var/lib/mongodb/journal/*
sudo service mongodb start
 7
Author: Jadeye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-12 02:05:02