web-dev-qa-db-fra.com

Est-il prudent de supprimer le fichier journal de mongodb?

Si je supprime le fichier journal 3.1G, Sudo service mongodb restart va échouer. Cependant, ce fichier prend trop de place. Comment puis-je résoudre ce problème? Comment puis-je l'enlever?

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
62
user94602

TL; DR: Vous avez deux options. Utilisez le --smallfiles Option de démarrage lors du démarrage de MongoDB sur limiter la taille des fichiers journaux à 128 Mo ou désactiver la journalisation à l'aide de la commande --nojournal option. En utilisant --nojournal dans la production est généralement une mauvaise idée, et il est souvent logique d’utiliser différentes préoccupations d’écriture dans le développement pour ne pas avoir de code différent dans dev et prod.

Réponse longue : Non, la suppression du fichier journal n'est pas sûre. L'idée de journaliser est la suivante:

Une écriture arrive. Maintenant, pour que cette écriture soit persistante (et la base de données durable), l'écriture doit en quelque sorte aller sur le disque.

Malheureusement, les écritures sur le disque prennent des eons par rapport aux écritures dans la RAM , la base de données est donc confrontée à un dilemme: ne pas écrire sur le disque est risqué, car un arrêt inattendu entraînerait une perte de données. Cependant, l'écriture sur le disque pour chaque opération d'écriture diminuera tellement les performances de la base de données qu'elle deviendra inutilisable pour des raisons pratiques.

Désormais, au lieu d'écrire dans les fichiers de données eux-mêmes et au lieu de le faire pour chaque demande, la base de données sera simplement ajoutée à un fichier journal où elle stockera toutes les opérations qui n'ont pas encore été validées dans les fichiers de données réels. C'est beaucoup plus rapide, car le fichier est déjà "chaud" car il est lu et écrit en permanence, et il ne s'agit que d'un fichier, pas d'un tas de fichiers, et enfin, parce qu'il écrit toutes les opérations en attente dans un lot toutes les 100 ms. par défaut. La suppression de ce fichier au milieu de quelque chose fait des ravages.

73
mnemosyn

Comme expliqué dans la réponse de mnemosyn, la journalisation est essentielle pour les moteurs de stockage. Heureusement, cela peut être contrôlé dans une certaine mesure. Ce qui suit a été écrit pour le moteur de stockage MMAPv1 , qui était celui par défaut jusqu'à MongoDB 3.2. Ensuite, WiredTiger est devenu le moteur de choix auquel vous pouvez trouver plus d’informations au bas de cette réponse.

MMAPv1

MongoDB <2.6 (configuration non-YAML)

Pour notre serveur de développement, nous avons utilisé la procédure suivante:

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

Maintenant, insérez

smallfiles=true

dans le fichier mongodb.conf, puis enregistrez. smallfiles limite le fichier journal à 128 Mo.

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

MongoDB> = 2.6 (configuration YAML)

Si vous utilisez MMAPv1 avec le style de configuration YAML , utilisez la même étape pour sauvegarder la configuration comme ci-dessus, mais dans le

  mmapv1:

bloc de configuration, insérer

    smallFiles: true 

. Ensuite, procédez comme indiqué ci-dessus, en redémarrant le serveur tout en supprimant les journaux.

WiredTiger (MongoDB> = 3.0, valeur par défaut depuis 3.2)

Sur les ordinateurs de développement, les fichiers journaux sous WiredTiger doivent être un peu plus petits par défaut que sous MMAPv1, car compression du journal est activé par défaut. Selon la documentation , "les fichiers journaux WiredTiger pour MongoDB ont une taille maximale d’environ 100 Mo". Il "créera des points de contrôle (c’est-à-dire, enregistrera les données de capture instantanée sur le disque) à des intervalles de 60 secondes ou de 2 giga-octets de données de journal."

Ainsi, si vous n'exécutez qu'un faible nombre de demandes (avec peu de données à modifier) ​​sur votre base de données, les fichiers journaux utilisant WiredTiger ne doivent pas dépasser un multiple de 100 Mo. La taille des fichiers journaux ne semble toutefois pas être configurable.

70
Mitja

mongodb a évolué depuis. Maintenant, son v3.4.1 stable .
Je suis sur v3.2 voici comment:
commentez # mmapv1: donc ça ressemble à:

  mmapv1:
    smallFiles: true 

si vous avez une version différente, cherchez storage Options sur le reference/configuration-options page.

n'oubliez pas de vider le journal

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