sql >> Database >  >> NoSQL >> MongoDB

MongoDB-geheugengebruik bijhouden

Inzicht in het geheugengebruik van MongoDB is cruciaal voor een goede MongoDB-hostingervaring. Voor de beste prestaties is het absoluut noodzakelijk om uw werkset in het geheugen te bewaren. Ik heb een paar suggesties gezien dat als je solid-state schijven (SSD) gebruikt, het geheugen minder belangrijk wordt. Dynamic Random Access Memory (DRAM) toegangstijd is in de orde van nanoseconden, SSD toegangstijd is in de orde van microseconden, en harde schijf toegangstijd is in de orde van milliseconden - dus SSD's hebben nog een manier om in te halen met geheugen.

MongoDB gebruikt Memory Mapped Files (MMF) om de database in het geheugen in te delen. Gegevens worden periodiek naar de schijf gespoeld (uiteraard is het mechanisme een stuk ingewikkelder, maar dat is een onderwerp voor een ander bericht).

Zodra uw MongoDB-server actief is, is het belangrijk om het geheugengebruik te controleren en te begrijpen. Om onze MongoDB-servers te bewaken, kunt u de ScaleGrid MongoDB Monitoring Console gebruiken om gedetailleerde statistieken over uw prestaties te bekijken. Voer enkele voorbeeldworkloads uit en stel een basislijn vast, zodat u kunt begrijpen wanneer iets niet normaal werkt. Hier zijn vier belangrijke tellers die u zullen helpen uw MongoDB-geheugengebruik te controleren:

  1. Geheugen

    Dit zijn eigenlijk drie tellers in één grafiek:

    1. Ingezeten geheugen

      Dit is de werkelijke hoeveelheid fysiek geheugen die wordt gebruikt door het MongoDB-proces.

    2. Toegewezen geheugen

      Dit is de hoeveelheid virtueel geheugen die door de MongoDB-voortgang wordt gebruikt om uw database in het geheugen toe te wijzen. Dit is meestal de grootte van uw database.

    3. Virtueel geheugen

      Dit omvat het virtuele geheugen voor het hele MongoDB-proces. Als je logboeken hebt ingeschakeld, is dit meestal twee keer zo groot als je toegewezen geheugen.

  2. Niet-toegewezen virtueel geheugen

    Dit is de hoeveelheid virtueel geheugen die wordt gebruikt voor boekhoudgegevens en niet voor het in kaart brengen van de gegevensbestanden. Elke verbinding verbruikt bijvoorbeeld een bepaalde hoeveelheid geheugen. Gewoonlijk zou deze teller redelijk laag moeten zijn - meestal minder dan 1 GB.

  3. Paginafouten

    Dit is het aantal harde paginafouten/seconde. U wilt natuurlijk dat dit aantal zo laag mogelijk is.

    • Harde paginafout

      Dit wordt geactiveerd wanneer de betreffende pagina zich niet in het fysieke geheugen bevindt en van de schijf moet worden opgehaald.

    • Zachte paginafout

      Dit gebeurt wanneer de pagina zich ergens anders in het geheugen bevindt of zich in een overgangsstatus bevindt.

  4. B-tree (Index Miss)

    Een indexmisser is twee keer zo inefficiënt, omdat het twee schijflezingen veroorzaakt, een om het indexitem te lezen en een andere om het document te lezen. De B-tree-teller houdt het aantal indexmissers bij. Dit is een andere plaats waar u een basislijn wilt vaststellen om ongebruikelijke patronen te herkennen. Gebruik de opdracht .explain() om de queryplannen voor uw veelvoorkomende vragen te controleren.

Een ander belangrijk aspect van geheugenbeheer in MongoDB is het begrijpen van uw 'werkset'. In ons volgende bericht zullen we onderzoeken hoe we de werkset voor uw database kunnen bepalen.


  1. Redis Publiceren/abonneren

  2. Configuratiesjablonen voor uw databases beheren met ClusterControl

  3. Jest en Redis (probleem met unit-tests met databasecache)

  4. Unicode inkapselen van redis