So erhalten Sie die aktuelle Größe des MongoDB-Arbeitssatzes

9

Aus dem Dokument , hieß es

"Für eine optimale Leistung sollte der Großteil Ihres aktiven Sets in den Arbeitsspeicher passen."

Also zum Beispiel mein db.stats()gib mir

{
"db" : "mydb",
"collections" : 16,
"objects" : 21452,
"avgObjSize" : 768.0516501957859,
"dataSize" : 16476244,
"storageSize" : 25385984,
"numExtents" : 43,
"indexes" : 70,
"indexSize" : 15450112,
"fileSize" : 469762048,
"ok" : 1
}

Welcher Wert ist der working set size?

Howard
quelle

Antworten:

9

Die SO-Frage / Antwort, die in den Kommentaren durch Quanten verknüpft ist, ist korrekt. Der "Arbeitssatz" ist im Grunde die Menge an Daten UND Indizes, die von Ihrem System aktiv / verwendet werden.

Sie können nicht sagen, db.stats()was das sein wird, es sei denn, Sie glauben, dass Sie den gesamten Datensatz und den gesamten Index im RAM haben müssen. Das heißt, Sie können den maximalen Arbeitssatz für diese Datenbank ermitteln, nicht jedoch den tatsächlich aktiven Arbeitssatz. Das Maximum ist die Summe aus:

  1. dataSize - Die Gesamtgröße der in dieser Datenbank gespeicherten Daten
  2. indexSize - Die Gesamtgröße aller in dieser Datenbank erstellten Indizes

In Ihrem Fall würde dieses Maximum bei der von Ihnen eingefügten Ausgabe ungefähr 30,45 MiB betragen.

Zur Verfolgung der tatsächlichen Speichernutzung würde ich eine Kombination der Zahlen aus db.stats()und der Speicherdiagramme (insbesondere des residenten Speichers) empfehlen, die im kostenlosen Überwachungstool MMS verfügbar sind .

Update (04.08.2013):

In Version 2.4 wurde dem Befehl serverStatus ein Working Set Size Estimator hinzugefügt. Dies ist nur eine Schätzung, kann jedoch als Leitfaden verwendet werden, um zu überprüfen, ob die anderen obigen Zahlen und Schätzungen für Ihre MongoDB-Instanz sinnvoll sind.

Update (September 2016):

Drei Jahre nach meiner ursprünglichen Antwort sind die Dinge viel komplizierter - im Allgemeinen ist es immer noch ein guter Ausgangspunkt, die Größe Ihrer Daten und Ihrer Indizes zu ermitteln. Das Herausfinden von Dingen in MongoDB hängt jetzt davon ab, welche Speicher-Engine Sie verwenden. Darüber hinaus hat Version 3.0 den oben für MMAP verknüpften Working Set-Schätzer im Rahmen der Sperrarbeiten auf Sammlungsebene entfernt (siehe SERVER-13783 ). Es gibt jetzt (zum Beispiel) die Cache-Statistik für die WiredTigerEngine als Ersatz, vorausgesetzt, Sie haben den Sprung zur neuen Engine gemacht. Für MMAPist die allgemeine Empfehlung an den aussehen Seitenfehlern Metrik als Proxy für , ob Ihre Daten in dem Speicher sind passend oder nicht.

Adam C.
quelle
Eigentlich benutze ich MMSschon, aber ich bin mir nicht sicher, welche Figur ich sehen soll.
Howard
Im Allgemeinen ist die residente Zahl im Speicherdiagramm hier am relevantesten. Es wächst mit der Zeit und belegt den gesamten verfügbaren Arbeitsspeicher (wobei ältere Daten nach Bedarf ausgelagert werden, damit neue Daten eingelagert werden können), wenn Ihr Datensatz erheblich größer als der Arbeitsspeicher ist. Wenn nicht und der Datensatz ziemlich statisch ist, findet er eine niedrigere Ebene und schwebt dort. Der oben skizzierte Maximalwert wäre der größte Arbeitsspeicher, den eine einzelne Datenbank als Teil dieser Abbildung belegen würde.
Adam C
1
Der Befehl serverStatus enthält ab MongoDB 3.0 keine Schätzung der Arbeitssatzgröße mehr. docs.mongodb.com/manual/reference/command/serverStatus
Vince Bowdren
1
Die Dinge haben sich in 3-4 Jahren sehr verändert. Ich habe das Original verlassen und ein udpate hinzugefügt, um einige der Optionen in den neueren Versionen abzudecken.
Adam C