2015-12-02 6 views
5

Soweit ich weiß, sollte die Speichergröße für MongoDB immer größer als die Datengröße sein. Nach dem Upgrade auf Mongo 3.0 und der Verwendung von WiredTiger sehe ich jedoch, dass die Datengröße größer ist als die Speichergröße.Wie kann MongoDB dataSize größer als storageSize sein?

Hier ist von einer der Datenbanken:

{ 
    "db" : "Results", 
    "collections" : NumberInt(1), 
    "objects" : NumberInt(251816), 
    "avgObjSize" : 804.4109548241573, 
    "dataSize" : NumberInt(202563549), 
    "storageSize" : NumberInt(53755904), 
    "numExtents" : NumberInt(0), 
    "indexes" : NumberInt(5), 
    "indexSize" : NumberInt(41013248), 
    "ok" : NumberInt(1) 
} 

Beachten Sie, dass 202.563.549> 53755904 bei weitem Spielraum. Ich bin verwirrt, wie das sein kann. Ist der Weg jetzt db.stats() anders in Mongo 3.0 zu lesen?

Antwort

8

Die storageSize-Metrik entspricht der Größe (in Byte) aller Datenerweiterungen in der Datenbank. Ohne Komprimierung ist diese Zahl größer als dataSize, da sie noch nicht verwendeten Speicherplatz (in Datenbereichen) und freien Speicherplatz für gelöschte oder verschobene Dokumente innerhalb von Extents enthält. Da Sie jedoch die Speicher-Engine WiredTiger verwenden, werden Daten auf der Festplatte komprimiert und sind daher kleiner als die dataSize.

1

MongoDB 3.0 mit WiredTiger-Engine verwendet standardmäßig eine "schnelle" Komprimierung. Wenn dies Ihre DB Leistung auswirkt, können Sie prüfen, um es auszuschalten (blockCompressor: kein) in der mongod.conf Datei:

storage: 
    engine: wiredTiger 
    wiredTiger: 
    collectionConfig: 
     blockCompressor: none 
+1

Danke für die Anregung. Es schadet der Leistung nicht, aber ich hatte ursprünglich eine Metrik, die Zahlen von dbstats verwendet, um verschiedene Größen der Datenbank zu verfolgen, und die Metriken sehen nach meinem Upgrade auf 3.0 etwas komisch aus. – KangarooWest

Verwandte Themen