14

Ludzie,Wyjaśnij wzór zużycia pamięci w Amazon RDS/Mysql?

Czy ktoś może wyjaśnić ten wzór zużycia pamięci na Amazon RDS z systemem Mysql? Na tym wykresie zaktualizowałem do db.m2.2xlarge, z 34 GB dostępnej pamięci, o 03:30. Przełączanie można zobaczyć bardzo wyraźnie. Gdy klienci zaczynają łączyć się i uderzać w tę instancję, pamięć Freeable spada gwałtownie do 5 GB, gdzie jest teraz zawieszona. Podczas mojej poprzedniej aktualizacji między rozmiarami instancji DB, widziałem ten sam wzorzec, aż wolna pamięć spadła do nieco poniżej 1 GB i unosiła się tam przez czas nieokreślony.

Co to jest za przykład między 03:30 a 07:30? Dlaczego nie uwalnia nieużywanej pamięci, gdy staje się dostępna? Sądzę, że spodziewałbym się, że ten wykres będzie kształtem fali, odpowiadającym wzorom użytkowania i ruchu, a kształtowi wykładniczemu, i wykładniczemu, co sugeruje, że jest to bardzo leniwy i/lub złamany algorytm zbierania śmieci.

Należy również zauważyć, że około 2/3 operacji DB to zapisy i 1/3 są odczytywane, a przed DB jest około 2 GB memcache.

memory consumption amazon rds mysql

Odpowiedz

13

MySQL utrzymuje cache ostatnio używanych tabel, zapytań i wyników w pamięci, w celu powrotu szybsze rezultaty. Na przykład, jeśli zapytasz "wybierz * z firmy, gdzie id = 1" od klienta milion razy, tylko pierwsze zapytanie musi przejść na dysk, następne 999,999 pojawi się bezpośrednio z pamięci podręcznej RAM. Nie ma powodu, aby MySQL wygasał w pamięci podręcznej, dopóki nie będzie wiedział, że potrzebuje więcej pamięci, więc zachowuje rzeczy do momentu zwolnienia pamięci RAM w celu wykonania innej pracy lub częściej używanych wyników.

Nie twierdzę, że jestem ekspertem - Rozumiem, że optymalizacja pamięci podręcznej zapytań DB jest bardzo złożoną i głęboką nauką. Programiści Oracle, Microsoft i inni spędzili lata i lata pracując nad najlepszym sposobem zarządzania pamięcią podręczną, więc trudno przewidzieć z zewnątrz.