Redis: Pokaż rozmiar / rozmiar bazy danych dla kluczy


88

Wydaje się, że moja instancja redis staje się bardzo duża i chciałbym dowiedzieć się, która z wielu baz danych, które tam mam, zużywa, ile pamięci. INFOPolecenie Redis pokazuje mi tylko całkowity rozmiar i liczbę kluczy na bazę danych, co nie daje mi zbyt wielu informacji ... Dlatego wszelkie narzędzia / pomysły, które dają mi więcej informacji podczas monitorowania serwera redis, byłyby mile widziane.

Dokumentacja Redis nie pokazuje mi żadnych poleceń, które mogą zwrócić zajętą ​​pamięć niektórych kluczy, więc myślę, że jeśli jakikolwiek błędny kod napisałby dużo "śmieci" do redis, może to być naprawdę trudne do znalezienia ...

Odpowiedzi:


113

A więc moje rozwiązanie własnego problemu: po redis-clidłuższej zabawie odkryłem, że DEBUG OBJECT <key>ujawnia coś w serializedlengthrodzaju klucza, co w rzeczywistości było czymś, czego szukałem ...

W przypadku całej bazy danych musisz zagregować wszystkie wartości, dla KEYS *których nie powinno być zbyt trudne w przypadku wybranego języka skryptowego ...

Złe jest to, że redis.io tak naprawdę nie ma wielu informacji DEBUG OBJECT.


1
Czy serializowana długość to rozmiar całego obiektu w bajtach?
— rafian

18
@BernhardVallant, dzięki za odpowiedź. Poszedłem dalej i napisałem szybki skrypt, który drukuje wszystkie klucze i ich rozmiary w formacie czytelnym dla człowieka. Pomyślałem, że się podzielę. :) gist.github.com/epicserve/5699837
— Brent O'Connor

13
Wartość serializedlength nie dotyczy rozmiaru pamięci! Jest to rozmiar, jaki zajęłyby obiekty podczas zapisywania do pliku RDB na dysku. Sprawdź kod źródłowy: github.com/antirez/redis/blob/… i github.com/antirez/redis/blob/…
— Hugo Tavares

wydaje się, że nie ma sposobu na uzyskanie rozmiaru klucza, wartości lub klucza-wartości w pamięci (nie rozmiaru zrzuconego na dysk)
— Avner Barr

4
Do Twojej wiadomości: nie kłopocz się próbowaniem czegokolwiek z DEBUG na AWS ElastiCache Redis, docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/… . Nawet znaleziono redis-cli
— bigkeys utknęłyby w martwym punkcie


40

MEMORY USAGE key polecenie podaje liczbę bajtów potrzebnych do przechowywania klucza i jego wartości w pamięci RAM.

Zgłoszone użycie to suma alokacji pamięci dla danych i narzutów administracyjnych, których wymaga klucz jego wartość (źródłowa dokumentacja redis)


11
może być używana tylko wersja> 4.0
— teik

15

Spójrz na ten projekt, który wyświetla kilka interesujących statystyk dotyczących przestrzeni kluczy w oparciu o wyrażenia regularne i prefiksy. Używa DEBUG OBJECTpolecenia i skanuje bazę danych, identyfikując grupy kluczy i szacując procent zajmowanego miejsca.

https://github.com/snmaynard/redis-audit

Wynik wygląda następująco:

Summary  

---------------------------------------------------+--------------+-------------------+---------------------------------------------------  
Key                                                | Memory Usage | Expiry Proportion | Last Access Time                                    
---------------------------------------------------+--------------+-------------------+---------------------------------------------------  
notification_3109439                               | 88.14%       | 0.0%              | 2 minutes                               
user_profile_3897016                               | 11.86%       | 99.98%            | 20 seconds  
---------------------------------------------------+--------------+-------------------+---------------------------------------------------  

Lub ten: https://github.com/sripathikrishnan/redis-rdb-tools, który przeprowadza pełną analizę całej przestrzeni kluczy, analizując plik dump.rdb offline. Ten też działa dobrze. Może podać średni / minimalny / maksymalny rozmiar wpisów w twojej bazie danych, a nawet zrobi to na podstawie prefiksu.


8

Próbkowanie kluczy Redis i grupowanie ich według typu może być bardzo przydatne. Salvatore napisał narzędzie o nazwie redis-sampler, które wydaje około 10000 RANDOMKEYpoleceń, po których następuje TYPEodzyskane klucze. W ciągu kilku sekund lub minut powinieneś uzyskać dość dokładny obraz rozkładu typów kluczy.

Napisałem rozszerzenie (niestety nie nigdzie open-source, ponieważ jest związane z pracą), które dodaje trochę introspekcji nazw kluczy za pomocą wyrażeń regularnych, które dają wyobrażenie o tym, jakiego rodzaju klucze aplikacji (zgodnie z dowolną strukturą nazewnictwa) using), są przechowywane w Redis. W połączeniu z bardziej ogólnym wyjściem redis-sampler, powinno to dać bardzo dobre wyobrażenie o tym, co się dzieje.


7
Tks, właściwie pomogło mi bardziej niżredis-cli --bigkeys
— nmat

4

Być może możesz przeprowadzić introspekcję w pliku db. Protokół jest stosunkowo prosty (ale nie jest dobrze udokumentowany), więc możesz napisać dla niego parser, który określi, które klucze zajmują dużo miejsca.


Nowe sugestie:

Czy próbowałeś używać, MONITORaby zobaczyć, co jest napisane, na żywo? Być może uda Ci się znaleźć problem z danymi w ruchu.


Wydaje się to interesujące, ale mimo to próbuję znaleźć łatwy sposób monitorowania zużycia pamięci redis na serwerze ... Zbadanie zrzutu wydaje mi się bardziej praktyczne do debugowania, nie wspominając o tym, że jest ich kilka koncerty teraz!
— Bernhard Vallant

Powinieneś zapytać listę mailingową redis. Naprawdę interesuje mnie usłyszenie „najlepszej” odpowiedzi na to pytanie.
— Donald Miner

Cóż, już próbowałem INFOi MONITOR, ale może głównym problemem jest to, że kiedy nie oglądałem, redis urósł naprawdę ...
— Bernhard Vallant

Ok, wysłałem to na ich listę mailingową, ale znalazłem odpowiedź również na własną rękę ... Zobacz poniżej!
— Bernhard Vallant

re. introspekcja w pliku db - napisałem skrypt do analizowania plików dump.rdb i wypisywania pliku csv raportującego przybliżoną pamięć używaną przez każdy klucz. Zobacz github.com/sripathikrishnan/redis-rdb-tools
— Sripathi Krishnan


1

Zwykle wolę metodę próbkowania kluczy do rozwiązywania takich scenariuszy.

redis-cli -p 6379 -n numer_db --bigkeys

Na przykład:-

redis-cli -p 6370 -n 0 --bigkeys


Dlaczego jest to metoda „próbkowania klucza”? Uważam, że jest to bardzo ograniczone, ponieważ pokazuje tylko wierzchołek góry lodowej.
— MrR

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.