2013-12-12 7 views
10

Ich habe eine Datenbank mit dem Namen log_test1, mit nur 1 Capped Collection Logs. Die maximale Größe der Capped-Sammlung beträgt 512M. Nachdem ich 200k Daten eingefügt habe, fand ich die Plattenbenutzung der db ist 1.6G. Mit db.stats() kann ich sehen, dass die Speichergröße 512M ist, richtig, aber meine tatsächliche Dateigröße ist 1,6G, warum ist das passiert? Wie kann ich die Größe der Festplatte steuern, wenn ich nur die Größe meiner überdeckten Sammlung und die Indexgröße festlege?Warum ist mein Mongodb FileSize viel größer als StorageSize in db.stats()?

> use log_test1 
switched to db log_test1 
> db.stats() 
{ 
    "db" : "log_test1", 
    "collections" : 3, 
    "objects" : 200018, 
    "avgObjSize" : 615.8577328040476, 
    "dataSize" : 123182632, 
    "storageSize" : 512008192, 
    "numExtents" : 3, 
    "indexes" : 8, 
    "indexSize" : 71907920, 
    "fileSize" : 1610612736, 
    "nsSizeMB" : 16, 
    "dataFileVersion" : { 
     "major" : 4, 
     "minor" : 5 
    }, 
    "ok" : 1 
} 

Antwort

10

Dies liegt wahrscheinlich daran, dass MongoDB Daten und Journaldateien vorbelegt.


MongoDB 2

im Datenverzeichnis, zuweist MongoDB Datendateien auf eine bestimmte Größe, teilweise Dateisystem Fragmentierung zu verhindern. MongoDB benennt die erste Datendatei <databasename>.0, die nächste <databasename>.1 usw. Die erste Datei mongod reserviert 64 MB, die nächsten 128 MB, und so weiter, bis zu 2 GB, zu welchem ​​Zeitpunkt alle folgenden Dateien 2 GB sind. Die Datendateien enthalten Dateien mit zugewiesenem Speicherplatz, die jedoch keine Daten enthalten. mongod kann eine 1 Gigabyte Datendatei zuordnen, die zu 90% leer sein kann. Bei den meisten größeren Datenbanken ist ungenutzter zugewiesener Speicherplatz im Vergleich zur Datenbank klein.

Auf Unix-ähnlichen Systemen, mongod reserviert eine zusätzliche Datendatei und initialisiert den Speicherplatz auf 0. Die Vorbelegung von Datendateien im Hintergrund verhindert signifikante Verzögerungen bei der nächsten Zuweisung einer neuen Datenbankdatei.

Sie können die Vorbelegung mit der Option noprealloc Laufzeit deaktivieren. noprealloc ist nicht bestimmt für den Einsatz in Produktionsumgebungen: Verwenden Sie nur noprealloc zum Testen und mit kleinen Datensätzen, wo Sie häufig Datenbanken löschen.

MongoDB 3

Die Datendateien in Ihrem Datenverzeichnis, die das /data/db Verzeichnis in Standardkonfigurationen ist, kann größer sein als die Daten in die Datenbank eingefügt gesetzt. Betrachten Sie die folgenden möglichen Ursachen:

Vorbelegte Datendateien

MongoDB zuweist seine Datendateien Dateisystem Fragmentierung, und aus diesem Grund, die Größe dieser Dateien nicht unbedingt reflektieren die Größe Ihrer Daten zu vermeiden.

Die storage.mmapv1.smallFiles Option reduziert die Größe dieser Dateien, die nützlich sein können, wenn Sie viele kleine Datenbanken auf der Festplatte haben.

Die oplog

Wenn diese mongod ein Mitglied einer Replikat-Gruppe ist, die Daten Verzeichnis der oplog.rs-Datei enthält, die eine vorbelegt capped Sammlung in der lokalen Datenbank ist.

Die Standardzuweisung beträgt ca. 5% des Festplattenspeichers auf 64-Bit-Installationen .

Die Zeitschrift

Das Datenverzeichnis, die Journaldateien enthält, die Schreibvorgänge auf der Festplatte speichern, bevor MongoDB sie auf Datenbanken gilt.

Leere Aufzeichnungen

MongoDB führt Listen der leeren Datensätze in Datendateien wie es Dokumente und Sammlungen gelöscht. MongoDB kann diesen Speicherbereich wiederverwenden, gibt diesen Speicherplatz jedoch standardmäßig nicht an das Betriebssystem zurück.


von MongoDB Storage FAQ genommen.

Verwandte Themen