La comprensione dell'utilizzo della memoria di MongoDB è fondamentale per una buona esperienza di hosting MongoDB. Per ottenere le migliori prestazioni, è fondamentale mantenere in memoria il set di lavoro. Ho visto alcuni suggerimenti che se utilizzi unità a stato solido (SSD), rende la memoria meno importante. Il tempo di accesso alla memoria dinamica ad accesso casuale (DRAM) è dell'ordine dei nanosecondi, il tempo di accesso dell'SSD è dell'ordine dei microsecondi e il tempo di accesso al disco rigido è dell'ordine dei millisecondi, quindi gli SSD hanno ancora molta strada da fare per recuperare con memoria.
MongoDB utilizza file mappati in memoria (MMF) per mappare il database in memoria. I dati vengono periodicamente scaricati sul disco (ovviamente il meccanismo è molto più complicato, ma questo è un argomento per un altro post).
Una volta che il tuo server MongoDB è attivo e funzionante, è importante monitorare e comprendere l'utilizzo della memoria. Per monitorare i nostri server MongoDB, puoi utilizzare ScaleGrid MongoDB Monitoring Console per visualizzare metriche dettagliate sulle tue prestazioni. Esegui alcuni carichi di lavoro di esempio e stabilisci una linea di base in modo da poter capire quando qualcosa non funziona normalmente. Ecco quattro contatori importanti che ti aiuteranno a monitorare l'utilizzo della memoria di MongoDB:
-
Memoria
Questi sono in realtà tre contatori in un grafico:
-
Memoria residente
Questa è la quantità effettiva di memoria fisica utilizzata dal processo MongoDB.
-
Memoria mappata
Questa è la quantità di memoria virtuale utilizzata dall'avanzamento di MongoDB per mappare il database in memoria. Questa sarà in genere la dimensione del tuo database.
-
Memoria virtuale
Questo include la memoria virtuale per l'intero processo MongoDB. Se hai attivato il journaling, in genere sarà il doppio della tua memoria mappata.
-
-
Memoria virtuale non mappata
Questa è la quantità di memoria virtuale utilizzata per la contabilità dei dati e non per la mappatura dei file di dati. Ad esempio, ogni connessione consuma una certa quantità di memoria. Di solito questo contatore dovrebbe essere abbastanza basso, in genere inferiore a 1 GB.
-
Errori di pagina
Questo è il numero di errori di pagina hardware/secondo. Ovviamente vuoi che questo numero sia il più basso possibile.
-
Errore di pagina difficile
Viene attivato quando la pagina in questione non è nella memoria fisica e deve essere recuperata dal disco.
-
Errore di pagina morbida
Ciò si verifica quando la pagina è residente da qualche altra parte in memoria o è in uno stato di transizione.
-
-
B-tree (Index Miss)
Un errore di indice è due volte più inefficiente, in quanto provoca due letture del disco, una per leggere la voce dell'indice e un'altra per leggere il documento. Il contatore dell'albero B tiene traccia del numero di errori nell'indice. Questo è un altro posto in cui vorrai stabilire una linea di base per individuare eventuali schemi insoliti. Usa il comando .explain() per controllare i piani di query per le tue query comuni.
Un altro aspetto importante della gestione della memoria in MongoDB è comprendere il tuo "set di lavoro". Nel nostro prossimo post, esamineremo come determinare il working set per il tuo database.