sql >> Databáze >  >> NoSQL >> Redis

Jak analyzovat a optimalizovat využití paměti v Redis

Redis je úložiště dat v paměti, což znamená, že celý soubor dat je uložen v paměti (RAM). I když je to skvělé pro výkon, když velikost dat začne růst, je třeba přidat stále více paměti RAM, aby se všechna tato data udržela. To se může rychle stát neúměrně drahé a než se nadějete, náklady na server začnou raketově růst, takže se budete obávat, zda vám Redis dokáže škálovat nákladově efektivním způsobem.

To je samozřejmě běžný problém s jakoukoli databází, ale více bolí v případě in-memory databází, jako je Redis, protože RAM je dražší než sekundární úložiště, jako jsou pevné disky a SSD. Musíme si však pamatovat, že Redis není určen k ukládání terabajtů dat pro vaši aplikaci. Spíše je určen k tomu, aby se používal konkrétně k ukládání dat, která je třeba číst (a v menší míře i zapisovat) velmi vysokou rychlostí, zatímco zbytek vašich dat může sedět v tradičních databázích zálohovaných na disku. Za tímto účelem se Redis nejčastěji používá jako mezipaměť, která uchovává pouze nejaktivnější data s vysokými požadavky na propustnost čtení/zápisu (předpokládejme výsledkové tabulky a chatové zprávy v reálném čase). Hlavním viníkem nadměrného využití paměti u Redis je tedy chování aplikace. Vaše aplikace může ukládat nepotřebná data, která nemají prospěch z toho, že jsou v Redis, nebo dokonce zcela nadbytečná data, tj. data, která nebyla nikdy použita k žádnému účelu, jako byl tento uživatel.

Abychom diagnostikovali problémy s nadměrným využitím paměti, samozřejmě potřebujeme způsob, jak zjistit, které klíče využívají nejvíce paměti, abychom mohli začít uvažovat a pochopit, jaké chování aplikace způsobuje problém. Pamatujte, že kořenem všeho zla je předčasná optimalizace a Redis není výjimkou. Nezbytně potřebujeme vidět paměťové charakteristiky naší datové sady, abychom vůbec začali přemýšlet o tom, kde je problém a jak jej můžeme vyřešit. Níže prozkoumáme některé z dostupných možností, jak nahlédnout do našich dat Redis a najít oblasti, které mohou těžit z optimalizace na úrovni aplikace.

Příkaz MEMORY USAGE

Tento příhodně pojmenovaný příkaz je dostupný od Redis 4.0.0 a je prvním krokem k ladění problémů s pamětí pomocí Redis. Z dokumentů:

Příkaz MEMORY USAGE hlásí počet bajtů, které klíč a jeho hodnota vyžadují k uložení do paměti RAM. Hlášené využití je celková alokace paměti pro data a administrativní režii, kterou klíč jeho hodnota vyžaduje.

Zde je příklad:

MEMORY USAGE users_by_reputation
(integer) 2923419

Vrátí se jednoduché celé číslo představující počet bajtů použitých pro uložení klíče, hodnoty a vnitřní režie. Pro rychlé zjištění využití paměti konkrétního klíče to není jednodušší než toto.

Dvě možné nevýhody jsou:

  1. Tento příkaz je dostupný pouze ve verzi Redis 4.0.0 a vyšší. Toto vylučuje většinu poskytovatelů cloudu.
  2. Informuje pouze o paměti, kterou používá jedna klávesa, takže pokud předem nevíte, která klávesa nebo klávesy způsobují problém, má tento příkaz velmi omezenou použitelnost.

nástroje redis-rdb

redis-rdb-tools je šikovný malý nástroj příkazového řádku, který přesahuje skromné ​​MEMORY USAGE příkaz, o kterém jsme hovořili výše. Jedná se o populární a výkonný nástroj pro profilování paměti vytvořený speciálně pro Redis, který analyzuje soubor Redis dump (.rdb) a generuje podrobný profil paměti pro každý klíč ve výpisu, včetně podrobností, jako je použitá paměť, typ dat, počet prvků, atd. Umožňuje také filtrovat klíče, které se zpracovávají, takže můžete volitelně spustit analýzu konkrétního klíče nebo podmnožiny klíčů, které odpovídají konkrétnímu vzoru. Výstupem analýzy je CSV soubor se sloupci pro klíč, použitou paměť, datový typ, počet prvků atd.

Tento nástroj je tak skvělý, protože na rozdíl od MEMORY USAGE příkaz, který funguje pouze na jediném klíči, tento nástroj analyzuje celou datovou sadu a výsledek vyplivne ve formátu CSV, což znamená, že jej můžete načíst do jakékoli databáze SQL a provádět jakékoli dotazy, které chcete, třídit a filtrovat, jak chcete , s veškerou silou SQL, která vám poskytuje skvělý přehled o nákladech na paměť vašich dat. Jako bonus, pokud používáte verze Redis starší než 4.0.0, můžete tento nástroj stále používat k analýze jednotlivých klíčů, pokud chcete, protože tento nástroj funguje tak, že analyzuje binární výpis, který vytváří Redis, místo toho, abyste se spoléhali na Redis hlásit využití paměti. Na druhou stranu tento rozdíl v přístupu znamená, že vypočtené využití paměti je spíše odhadem než přesným číslem, jak je uvedeno v dokumentaci projektu. To však ve skutečnosti není problém, když je naším cílem identifikovat problémy s využitím paměti, protože nás více zajímají relativní velikosti klíčů a identifikace klíčů, které využívají podstatně více paměti, než by měly používat, takže pár bajtů sem nebo tam je opravdu irelevantní.

RDBTools

RDBTools je webový nástroj, který nabízí několik nástrojů pro správu a optimalizaci Redis, s hlavním zaměřením na optimalizaci paměti. Zrodil se z projektu redis-rdb-tools s otevřeným zdrojovým kódem popsaného výše. Díky tomu můžeme bez námahy analyzovat využití paměti našeho serveru Redis pouhým ukázáním na naši instanci a kliknutím na „Analyzovat“. Nástroj stáhne výpis ze spuštěné instance a analyzuje jej a nabídne vám úhledné uživatelské rozhraní pro filtrování a řazení klíčů na základě různých parametrů, jako je využití paměti, typ dat, kódování, počet prvků atd., podobně jako příkazový řádek. nástroj, ale bez jakékoli ruční práce spojené s vytvářením výpisu, generováním profilu paměti, nastavením databáze, importem profilu, psaním a spouštěním dotazů atd.

Kromě toho RDBTools také generuje několik tabulek a grafů z paměťového profilu, což vám umožní ještě lepší vhled do vašich dat, spolu s doporučeními pro optimalizaci konfigurace vašeho serveru Redis na základě průmyslových standardů a let zkušeností s optimalizací Redis, abyste vytlačili ještě větší úsporu paměti. Kromě optimalizace paměti existuje řada dalších funkcí užitečných pro každého, kdo používá Redis, jako je vestavěné bohaté CLI, konfigurační editor s vloženou dokumentací, bohatý vizualizér živých dat atd.

RDBTools je k dispozici jako docker image, dostupný v docker centru a lze jej spustit na vašem vlastním počítači, takže se nemusíte obávat úniku citlivých dat. Zkušební verze je k dispozici zdarma navždy s určitými omezeními použití. Další informace o různých dostupných placených plánech naleznete na stránce s cenami.

Závěr

Nedostatek paměti je nevyhnutelný problém při používání databází v paměti, jako je Redis. Jako u všech problémů s optimalizací je prvním krokem správná diagnóza problému. Je důležité odolat pokušení rychle dělat ukvapené závěry na základě neověřených hypotéz. „Měř, měř, měř“ je název hry, pokud jde o optimalizaci, a existují různé metody a nástroje pro získání náhledu na vaše problémy s pamětí Redis. Který z nich je nejlepší závisí na vašich konkrétních potřebách a na tom, kde se v procesu vývoje nacházíte. Pro někoho, kdo právě začíná používat Redis, může pro začátek stačit hlídání jednotlivých kláves, zatímco pro náročné uživatele Redis má určitě smysl použít vyhrazený nástroj GUI se všemi zvonky a píšťalkami, aby si později ušetřili bolest. Ať už se rozhodnete jakkoli, vždy se ujistěte, že rozumíte kořenům svého problému, než se ho pokusíte vyřešit, a pamatujte, že pokud máte problémy s pamětí s Redis, pravděpodobně používáte více paměti, než skutečně potřebujete.


  1. Jak implementovat funkci časového limitu pubsub redis?

  2. Chyba křížového slotu Redis

  3. Agregace MongoDB:Jak získat celkový počet záznamů?

  4. Rate-Limit an API (jarní MVC)