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

Sporing af MongoDB-hukommelsesbrug

Forståelse af MongoDB-hukommelsesbrug er afgørende for en god MongoDB-hostingoplevelse. For den bedste ydeevne er det bydende nødvendigt at holde dit arbejdssæt i hukommelsen. Jeg har set et par forslag om, at hvis du bruger solid-state-drev (SSD), gør det hukommelsen mindre vigtig. Dynamic Random-Access Memory (DRAM)-adgangstid er i størrelsesordenen nanosekunder, SSD-adgangstiden er i størrelsesordenen mikrosekunder, og harddiskadgangstiden er i størrelsesordenen millisekunder – så SSD'er har stadig en vej at gå for at indhente med hukommelse.

MongoDB bruger hukommelseskortfiler (MMF) til at kortlægge databasen i hukommelsen. Data skylles med jævne mellemrum til disken (mekanismen er naturligvis meget mere kompliceret, men det er et emne for et andet indlæg).

Når din MongoDB-server er oppe og køre, er det vigtigt at overvåge og forstå hukommelsesforbruget. For at overvåge vores MongoDB-servere kan du bruge ScaleGrid MongoDB-overvågningskonsollen til at se detaljerede metrics om din ydeevne. Kør nogle eksempler på arbejdsbelastninger, og opret en baseline, så du kan forstå, når noget ikke fungerer normalt. Her er fire vigtige tællere, der hjælper dig med at overvåge dit MongoDB-hukommelsesforbrug:

  1. Hukommelse

    Dette er faktisk tre tællere i én graf:

    1. Resident Memory

      Dette er den faktiske mængde af den fysiske hukommelse, der bruges af MongoDB-processen.

    2. Kortlagt hukommelse

      Dette er mængden af ​​virtuel hukommelse, der bruges af MongoDB-fremskridtet til at kortlægge din database i hukommelsen. Dette vil typisk være størrelsen på din database.

    3. Virtuel hukommelse

      Dette inkluderer den virtuelle hukommelse for hele MongoDB-processen. Hvis du har slået journalføring til, vil dette typisk være dobbelt så stort som din tilknyttede hukommelse.

  2. Ikke-kortlagt virtuel hukommelse

    Dette er mængden af ​​virtuel hukommelse, der bruges til bogføringsdata og ikke til at kortlægge datafilerne. For eksempel bruger hver forbindelse en vis mængde hukommelse. Normalt skal denne tæller være ret lav – typisk mindre end 1 GB.

  3. Sidefejl

    Dette er antallet af hårde sidefejl/sekund. Det er klart, at du ønsker, at dette tal skal være så lavt som muligt.

    • Hård sidefejl

      Dette udløses, når den pågældende side ikke er i fysisk hukommelse og skal hentes fra disken.

    • Blød sidefejl

      Dette sker, når siden er hjemmehørende et andet sted i hukommelsen eller er i en overgangstilstand.

  4. B-træ (Indeks Miss)

    En indeksmiss er dobbelt så ineffektiv, da den forårsager to disklæsninger, en til at læse indeksposten og en anden til at læse dokumentet. B-trætælleren sporer antallet af indeksmisser. Dette er et andet sted, hvor du vil etablere en baseline for at få øje på usædvanlige mønstre. Brug kommandoen .explain() til at kontrollere forespørgselsplanerne for dine almindelige forespørgsler.

Et andet vigtigt aspekt af hukommelsesstyring i MongoDB er at forstå dit 'arbejdssæt'. I vores næste indlæg vil vi undersøge, hvordan du bestemmer arbejdssættet til din database.


  1. MongoDB-projektion af indlejrede arrays

  2. Flere Redis-forekomster

  3. Hvad er den mest tidseffektive måde at serialisere/deserialisere en datatabel til/fra Redis?

  4. Redis Keyspace-meddelelser med flushdb