Jak zmniejszyć zużycie pamięci RAM przez MySQL/MariaDB

Bazy danych potrafią zająć olbrzymie ilości pamięci co często prowadzi do jej wyczerpania i korzystania ze swapu obniżając wydajność systemu. Jednak w przypadku baz MySQL bądź MariaDB można dość łatwo zredukować jej użycie.

Chesz przetestować działanie poniższych instrukcji, a nie masz dostępu do serwera Linuxowego? Po rejestacji na DigitalOcean otrzymasz 100 dolarów do wykorzystania w ciągu 60 dni, a z przyjaznym interfejsem uruchomisz ulubioną dystrybucję w ciągu paru minut.

Wpis został przygotowany i przetestowany pod systemem Centos 7 ale pod innymi wersjami Linuxa i Windowsem nie powinno być wielkich różnic. Ponadto dopisując coś do plików konfiguracyjnych dobrze wpisywać komentarz tłumaczący powód zmiany. Często po długim czasie wraca się do konkretnego serwera i takie komentarze są bardzo przydatne.
Z pustego i Salomon nie naleje, zatem jeżeli serwer ma za mało pamięci w porównaniu do rozmiaru baz bądź ilości usług które obsługuje lepiej rozważyć kupno czegoś mocniejszego.

Wyłączenie performance schema

Na początek najlepiej wyłączyć performance schema, które przydatne jest jedynie podczas debugowania problemów z bazą danych. W tym celu należy otworzyć plik my.cnf poleceniem sudo nano /etc/my.cnf (albo skorzystać z ulubionego edytora), a gdyby plik był w innym miejscu odnaleźć go poleceniem whereis my.cnf.

Kolejnym krokiem jest dopisanie w sekcji [mysqld] następujących linii:

# Wylaczenie performance schema by zredukowac uzycie ramu
performance_schema = off

Następnie można zapisać plik kombinacją klawiszy ctrl + o (oraz potwierdzenie klawiszem enter), a następnie zamknąć Nano za kombinacją ctrl + x. Później pozostaje restart demona poleceniem sudo service mysql restart lub sudo service mariadb restart.

Zmniejszenie innodb_buffer_pool_size

Następnie można zmniejszyć bufor silnika InnoDB. Także i w tym wypadku należy zmodyfikować sekcję [mysqld] pliku /etc/my.cnf dodając następujące linijki:

# Zmniejszenie wielkosci puli by oszczedzic pamiec
innodb_buffer_pool_size = 64M

Na koniec należy zapisać, zamknąć plik i zrestartować demona.