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. INFO
Polecenie 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 ...
Rozwiązanie z komentarzy zasługuje na własną odpowiedź:
źródło
a
wartości 4 GB, ale nie pojawi się to w dużych kluczach. (to jest na gist.github.com/michael-grunder/9257326 i docs.redislabs.com/latest/ri/memory-optimizations/ ... )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)
źródło
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 OBJECT
polecenia 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:
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.
źródło
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
RANDOMKEY
poleceń, po których następujeTYPE
odzyskane 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.
źródło
redis-cli --bigkeys
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ć,
MONITOR
aby zobaczyć, co jest napisane, na żywo? Być może uda Ci się znaleźć problem z danymi w ruchu.źródło
INFO
iMONITOR
, ale może głównym problemem jest to, że kiedy nie oglądałem, redis urósł naprawdę ...Możesz użyć aplikacji .net https://github.com/abhiyx/RedisSizeCalculator do obliczenia rozmiaru klucza redis,
Prosimy o wyrażenie opinii na ten sam temat
źródło
Zwykle wolę metodę próbkowania kluczy do rozwiązywania takich scenariuszy.
Na przykład:-
źródło
Co powiesz na redis-cli, aby uzyskać KEYNAME | wc -c
źródło