Warum nutzt Journaling so viel Platz in Mongodb?

5609
lfagundes

Ich habe eine Mongodb-Datenbank, die ungefähr 1 GB Speicherplatz belegt. Ich war überrascht, als mein Server keinen Platz mehr hatte, und dann wurde mir klar, dass das Journal 3 GB belegt.

In der Dokumentation heißt es: "Sobald MongoDB alle Schreibvorgänge in den Journaldateien anwendet, löscht es diese Dateien", aber dies scheint nicht der Fall zu sein, da die Datenbank synchronisiert wird und die Erfassung dreimal so groß ist wie die gesamte Datenbank.

Wie kann ich diese Journaldateien löschen und das System so konfigurieren, dass weniger Speicherplatz benötigt wird?

7
Haben Sie ein sauberes Herunterfahren versucht? Derselbe Link sagt, dass es das Journal löschen wird. vor 11 Jahren 0
Ich habe den Server neu gestartet. Ich gehe davon aus, dass es ein sauberes Herunterfahren ist, aber die Journaldateien sind dort geblieben ... lfagundes vor 11 Jahren 0
How often do you write data to your database? To reduce journal file size you must use smallfiles option when starting mongod, that's what documentation recommends: http://docs.mongodb.org/manual/reference/configuration-options/#smallfiles But it has its drawbacks because it creates many files. Binarysurf vor 11 Jahren 0

1 Antwort auf die Frage

3
Adam C

Die Dokumentation, die Sie zitieren, ist korrekt. Wenn Sie den Befehl db.fsyncLock () ausführen, werden alle Änderungen auf die Festplatte gelöscht und die Journaldateien werden gelöscht. Sobald Sie db.fsyncUnlock () ausführen und ein weiterer Schreibvorgang eintrifft, werden diese Journaldateien erneut angezeigt :

Hier ein kurzes Beispiel für ein Testsystem:

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

So sieht das Journalverzeichnis aus:

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

Jetzt sperren wir es auf und spülen alles auf die Festplatte:

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

Das Journalverzeichnis ist jetzt leer:

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

Entsperren, einfügen:

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

Jetzt haben wir wieder Journaldateien:

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

Wenn Sie also nicht sperren, die Datenbanken auf die Festplatte leeren und ständig Schreibvorgänge eingehen, haben Sie immer Journaldateien.

Wenn Sie eine mongodInstanz sauber herunterfahren, werden die Journaldateien gelöscht, sobald der Flush auf die Festplatte erfolgreich abgeschlossen wurde.

Wenn Sie die Journaldateien verkleinern möchten, können Sie die Ausführung mit der --smallfilesOption prüfen. Dadurch erhalten Sie 3 x 128 MB-Dateien anstelle von 3 x 1 GB-Dateien.