MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Monitoraggio dell'utilizzo della memoria di MongoDB

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:

  1. Memoria

    Questi sono in realtà tre contatori in un grafico:

    1. Memoria residente

      Questa è la quantità effettiva di memoria fisica utilizzata dal processo MongoDB.

    2. 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.

    3. 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.

  2. 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.

  3. 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.

  4. 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.