Warum verbraucht Journaling in Mongodb so viel Platz?

7

Ich habe eine Mongodb-Datenbank, die ungefähr 1 GB Speicherplatz belegt. Ich war überrascht, als auf meinem Server kein Speicherplatz mehr verfügbar war, und stellte dann fest, dass das Journal 3 GB verwendet.

In der Dokumentation heißt es: "Sobald MongoDB alle Schreibvorgänge in den Journaldateien anwendet, werden diese Dateien gelöscht." Dies scheint jedoch nicht der Fall zu sein, da die Datenbank synchronisiert ist und das Journal dreimal so groß ist wie die gesamte Datenbank.

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

lfagundes
quelle
Haben Sie versucht, sauber herunterzufahren? Der gleiche Link sagt, dass es das Tagebuch löschen wird.
Ich habe den Server neu gestartet, was meiner
Meinung nach
Wie oft schreiben Sie Daten in Ihre Datenbank? Um die Größe der Journaldatei zu verringern, müssen Sie beim Starten von mongod die Option smallfiles verwenden. Dies wird in der Dokumentation empfohlen: docs.mongodb.org/manual/reference/configuration-options/… Dies hat jedoch seine Nachteile, da viele Dateien erstellt werden.
Binarysurf

Antworten:

3

Die von Ihnen angegebene Dokumentation ist korrekt. Wenn Sie den Befehl db.fsyncLock () ausführen , werden alle Änderungen auf der 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 ist 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
$

Lassen Sie es uns jetzt abschließen und alles auf die Festplatte leeren:

> 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 dieser --smallfilesOption prüfen. Dadurch erhalten Sie 3 x 128 MB-Dateien anstelle von 3 x 1 GB-Dateien.

Adam C.
quelle