2016-07-17 23 views
5

Oto moje pytanie: jak "mem_fragmentation_rateo" wpływa na wydajność w Redis?Redis: W jaki sposób "mem_fragmentation_ratio" wpływa na wydajność?

Zrobiłem pewne dochodzenie w stackoverflow i redis.io, ale nie mogłem naprawdę znaleźć jasnego wyjaśnienia na temat mojego pytania.

Jak również wyjaśnione w tym eBook https://www.datadoghq.com/wp-content/uploads/2013/09/Understanding-the-Top-5-Redis-Performance-Metrics.pdf na stronie # 16 „The mem_fragmentation_ratio metryczny daje stosunek pamięć używana widziany przez system operacyjny (used_memory_rss) do pamięci przydzielonej przez Redis (used_memory).”

Tak więc, jak wyjaśniono w http://redis.io/commands/INFO, "idealna wartość used_memory_rss powinna być tylko nieznacznie wyższa niż used_memory. Gdy używana rss >>, duża różnica oznacza fragmentację pamięci (wewnętrzną lub zewnętrzną), która może być oszacowana przez Sprawdzanie mem_fragmentation_ratio. Gdy jest użyte >> rss, oznacza to, że część pamięci Redis została zamieniona przez system operacyjny: oczekiwać pewnych znaczących opóźnień ".

Tak więc, gdy mamy wyższą "używaną_wartość" niż "używana_memoria_rss", negatywny wpływ na węzeł Redis jest jasny, ponieważ oznacza to, że Redis zaczął używać Zamień, a to wyraźnie nie jest dobre dla wydajności.

Ale co z sytuacją, w której mamy wyższą "used_memory_rss" niż "used_memory"? Powinno to prawdopodobnie oznaczać, że nasz alokator pamięci nie "odebrał" części pamięci przypisanej Redis w przeszłości i że Redis nie jest już używany (być może z powodu tymczasowego skoku). Nie mogę jednak zrozumieć, w jaki sposób może to negatywnie wpłynąć na wydajność Redis. Dlaczego czytam wiele postów w Internecie, gdzie ludzie są tak zaniepokojeni wysokim "mem_fragmentation_ratio"? Również w eBooku, o którym wspomniałem wcześniej, sugerują posiadanie "mem_fragmentation_rateo" między 1 a 1,5.

W tej sytuacji, kiedy mamy wyższą "used_memory_rss", czy naprawdę dotyczy to Redis? Czy powinniśmy się spodziewać pogorszenia wydajności Redisa z wysokim "mem_fragmentation_ratio"?

Postanowiłem zadać ci to pytanie, ponieważ szczerze myślę, że z wysokim "mem_fragmentation_ratio", możemy mieć problem "tylko" w systemie operacyjnym, który "może" cierpieć z powodu braku pamięci: system operacyjny może przydziela nową pamięć do nowych procesów. W każdym razie nie powinno to mieć bezpośredniego wpływu na Redis (chyba że OS zacznie zwalniać itd.).

Czy możesz wyjaśnić moje wątpliwości? Czy miałeś jakieś doświadczenie, kiedy doświadczyłeś wysokiego "mem_fragmentation_ratio" i zacząłeś zauważać pogorszenie wydajności Redisa?

Dziękuję

Odpowiedz

0

Nie jestem guru Redis, ale z mojego doświadczenia i dokumentacji przeczytałem, fragmentation_ratio nie wpływa na wydajność bezpośrednio. Ale zwiększa to zużycie pamięci. Gdy aplikacja dodaje nowe dane i dane nie wypełniają wolnych fragmentów w pamięci (gdy pęczki nowych danych są większe niż te fragmenty), pamięć ta pozostaje wolna. W ten sposób możesz zabraknąć pamięci szybciej, niż się spodziewasz.