sql >> Database teknologi >  >> NoSQL >> Redis

Sådan analyseres og optimeres hukommelsesforbrug i Redis

Redis er et datalager i hukommelsen, hvilket betyder, at hele datasættet er gemt i hukommelsen (RAM). Selvom dette er fantastisk til ydeevne, når størrelsen af ​​dataene begynder at vokse, skal der tilføjes mere og mere RAM for at holde alle disse data. Dette kan hurtigt blive uoverkommeligt dyrt, og før du ved af det, begynder serveromkostningerne at skyde i vejret, hvilket efterlader dig bekymret for, om Redis kan skalere for dig på en omkostningseffektiv måde.

Dette er selvfølgelig et almindeligt problem med enhver database, men gør mere ondt i tilfælde af in-memory databaser som Redis, da RAM er dyrere end sekundær lagring som harddiske og SSD'er. Vi skal dog huske, at Redis ikke er beregnet til at gemme terabyte af data til din applikation. Det er snarere meningen, at det skal bruges til specifikt at gemme de data, der skal læses (og i mindre grad skrives) med en meget høj hastighed, mens resten af ​​dine data kan sidde på diskstøttede traditionelle databaser. Til det formål bruges Redis oftest som en cache, der kun indeholder de mest aktive data med høje læse-/skrivegennemstrømningskrav (tænk på resultattavler og chatbeskeder i realtid). Derfor er hovedsynderen for overdreven hukommelsesbrug med Redis applikationsadfærd. Din applikation gemmer muligvis unødvendige data, som ikke har gavn af at være i Redis, eller endda fuldstændig overflødige data, dvs. data, der aldrig bliver brugt til noget formål, som denne bruger var.

For at diagnosticere problemer med overdreven hukommelsesbrug har vi naturligvis brug for en måde at finde ud af, hvilke nøgler der bruger mest hukommelse, så vi kan begynde at ræsonnere om og forstå, hvilken adfærd i applikationen der forårsager problemet. Husk, at for tidlig optimering er roden til alt ondt, og Redis er ingen undtagelse. Vi har absolut brug for synlighed i vores datasæts hukommelseskarakteristika for overhovedet at begynde at tænke på, hvor problemet ligger, og hvordan vi kan løse det. Nedenfor udforsker vi nogle af de tilgængelige muligheder for at kigge ind i vores Redis-data og finde de områder, der kan drage fordel af optimering på applikationsniveau.

Kommandoen MEMORY USAGE

Denne kommando med passende navn er tilgængelig siden Redis 4.0.0 og er det første skridt til at fejlfinde hukommelsesproblemer med Redis. Fra dokumenterne:

Kommandoen MEMORY USAGE rapporterer antallet af bytes, som en nøgle og dens værdi kræver for at blive lagret i RAM. Det rapporterede forbrug er summen af ​​hukommelsesallokeringer til data og administrative omkostninger, som en nøgle dens værdi kræver.

Her er et eksempel:

MEMORY USAGE users_by_reputation
(integer) 2923419

Et simpelt heltal, der repræsenterer antallet af bytes, der bruges til at lagre nøglen, værdien og interne omkostninger, returneres. For hurtigt at finde hukommelsesbrugen for en bestemt nøgle, bliver det ikke nemmere end dette.

To mulige ulemper er:

  1. Denne kommando er kun tilgængelig i Redis 4.0.0 og nyere. Dette udelukker de fleste cloud-udbydere.
  2. Den fortæller dig kun den hukommelse, der bruges af en enkelt nøgle, så medmindre du på forhånd ved, hvilken eller hvilke nøgler der forårsager problemet, har denne kommando meget begrænset anvendelighed.

redis-rdb-tools

redis-rdb-tools er et smart lille kommandolinjeværktøj, der rækker ud over den beskedne MEMORY USAGE kommando, vi diskuterede ovenfor. Det er et populært og kraftfuldt hukommelsesprofileringsværktøj bygget specifikt til Redis, der analyserer en Redis dump (.rdb) fil og genererer en detaljeret hukommelsesprofil for hver nøgle i dumpet, inklusive detaljer som den anvendte hukommelse, datatype, antal elementer, osv. Det giver dig også mulighed for at filtrere de nøgler, der behandles, så du eventuelt kan køre analysen på en bestemt nøgle eller et undersæt af nøgler, der matcher et bestemt mønster. Resultatet af analysen er en CSV-fil med kolonner for nøglen, brugt hukommelse, datatype, antal elementer osv.

Dette værktøj er så fantastisk, fordi i modsætning til MEMORY USAGE kommando, som kun virker på en enkelt tast, analyserer dette værktøj hele datasættet og spytter resultatet ud i CSV-format, hvilket betyder, at du kan indlæse det i enhver SQL-database og udføre de forespørgsler, du vil, sortere det og filtrere, som du ønsker. , med al kraften fra SQL, som giver dig stor indsigt i hukommelsesomkostningerne for dine data. Som en bonus, hvis du bruger Redis-versioner før 4.0.0, kan du stadig bruge dette værktøj til at analysere enkelte nøgler, hvis du ønsker det, da dette værktøj fungerer ved at parse det binære dump, som Redis producerer, i stedet for at stole på Redis for at rapportere hukommelsesforbrug. På bagsiden betyder denne forskel i tilgang, at det beregnede hukommelsesforbrug mere er et skøn end et nøjagtigt tal, som nævnt i projektets dokumentation. Dette er dog ikke rigtig et problem, når vores mål er at identificere problemer med hukommelsesforbrug, da vi er mere interesserede i relative størrelser af nøglerne og identificere nøgler, der bruger betydeligt mere hukommelse, som de burde bruge, så et par bytes her eller der er virkelig irrelevant.

RDBT-værktøjer

RDBTools er et webbaseret værktøj, der tilbyder flere værktøjer til at administrere og optimere Redis, med hovedfokus på hukommelsesoptimering. Det blev født ud af open source redis-rdb-tools-projektet diskuteret ovenfor. Med den kan vi ubesværet analysere vores Redis-servers hukommelsesbrug ved blot at pege på vores instans og klikke på "Analyser". Værktøjet downloader et dump fra den kørende instans og analyserer det og præsenterer dig for en smart brugergrænseflade til filtrering og sortering af dine nøgler baseret på forskellige parametre som hukommelsesforbrug, datatype, kodning, antal elementer osv., svarende til kommandolinjen værktøj, men uden den manuelle indsats, der er involveret i at tage et dump, generere hukommelsesprofilen, opsætte en database, importere profilen, skrive og køre forespørgsler osv.

Bortset fra det genererer RDBTools også adskillige diagrammer og grafer fra hukommelsesprofilen, hvilket giver dig endnu større indsigt i dine data sammen med anbefalinger til optimering af konfigurationen af ​​din Redis-server, baseret på industristandarder og mange års erfaring med at optimere Redis, for at presse ud endnu flere hukommelsesbesparelser. Udover hukommelsesoptimering er der et væld af andre funktioner, der er nyttige for alle, der bruger Redis, såsom en indbygget rig CLI, konfigurationseditor med inline-dokumentation, rig live-datavisualizer osv.

RDBTools er tilgængelig som et docker-billede, tilgængeligt i docker-hub og kan køres på din egen maskine, så der er ingen grund til at bekymre dig om at lække følsomme data. En prøveversion er tilgængelig gratis for evigt, med nogle brugsgrænser. Se prissiden for mere information om de forskellige tilgængelige betalte abonnementer.

Konklusion

At løbe tør for hukommelse er et uundgåeligt problem, når du bruger in-memory databaser som Redis. Som alle optimeringsproblemer er det første skridt at diagnosticere problemet korrekt. Det er vigtigt at modstå fristelsen til hurtigt at drage konklusioner baseret på ubekræftede hypoteser. “Measure, measure, measure” hedder spillet, når det kommer til optimering, og der findes forskellige metoder og værktøjer til at få indsigt i dine Redis hukommelsesproblemer. Hvilken der er bedst afhænger af dine specifikke behov, og hvor du er i udviklingsprocessen. For en person, der lige er begyndt at bruge Redis, kan det være nok at holde øje med individuelle taster til at starte, hvorimod det for tunge brugere af Redis helt sikkert giver mening at gå efter et dedikeret GUI-værktøj med alle klokker og fløjter for at spare smerte senere. Uanset hvad du vælger, skal du altid sørge for at forstå roden til dit problem, før du prøver at løse det, og husk, at hvis du har hukommelsesproblemer med Redis, bruger du sandsynligvis mere hukommelse, end du virkelig har brug for.


  1. MongoDB VÆLG ANTALGRUPPE EFTER

  2. MongoDB, fjern objekt fra array

  3. En oversigt over Percona Backup til MongoDB

  4. Hvordan eksporterer man samling til CSV i MongoDB?