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).
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.
- Jak nietrudno się zatem domyślić – najważniejszą zmianą jest wyłączenie schematów [↩]
Dodaj komentarz