Optymalizacja zużycia RAM przez MySQL na serwerze

MySQL od wersji 5.6 ma domyślnie włączone1 performance_schema, które bardzo lubi konsumować RAM. Oczywiście poniekąd jest to dobre, bo czas dostępu się zmniejsza i jak to zauważył michal_s na kanale #wordpress-pl (@freenode.net), to „RAM jest wyłącznie po to, aby go używać„. Zgadzam się z tym w 100%. Jednakże w przypadku serwerów, na których mamy nieco mniejsze zaplecze, a baza zaczyna pochłaniać pamięć – pasuje coś z tym zrobić.

I tak w moim przypadku użycie RAMu przez MySQL (samego procesu MySQL) sięgało 600-700 MB, gdzie cały VPS posiada 1 GB. Dochodziło do sytuacji, gdzie ubijane były procesy, a sama baza się też wyłączała. Po niżej opisanych zabiegach zoptymalizowałem wykorzystanie pamięci do ~200 MB (ogółem, a nie samej bazy).

Nie jest to opis z serii „jestem pro wyjadaczem”, więc nie spodziewajcie się wodotrysków. Publikuję tutaj jedynie kilka zmian w domyślnej konfiguracji, które optymalizują wykorzystanie RAM.

Zmiana ustawień

W pliku /etc/my.cnf wprowadzamy następujące zmiany. Jeśli poszczególnych linii nie macie, dodajcie je. Jeśli są – wystarczy zmienić same parametry.

symbolic-links=0
performance_schema = off
thread-cache-size = 0
query-cache-size = 1M
join-buffer-size = 128K
read-buffer-size = 8K
read-rnd-buffer-size = 8K
sort-buffer-size = 32K
max-heap-table-size = 16K
tmp-table-size = 1K
max-connections = 10
key-buffer-size = 8M
innodb-buffer-pool-size = 5M

U mnie, różnica jest zauważalna gołym okiem. Przy czym ruch na blogu nie jest aż tak duży więc i generowanie (szybkość) strony nie spadło jakoś drastycznie.


  1. Jak nietrudno się zatem domyślić – najważniejszą zmianą jest wyłączenie schematów []
Ten wpis został opublikowany w kategorii Linux, Techniczne i oznaczony tagami , , , . Dodaj zakładkę do bezpośredniego odnośnika.

Jedna odpowiedź na „Optymalizacja zużycia RAM przez MySQL na serwerze

  1. Tristian pisze:

    Krótko i na temat, praktyczny wpis :)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*