Nie tak dawno zostałem poproszony o pomoc w zdiagnozowaniu problemu związanego z Zabbixem działającym w raz z bazą MySQL. Problem polegał na tym, że Zabbix strasznie „mulił” i miał ciągły zapis na dysk.
Po uruchomieniu z konsoli htop widzimy , że Zabbix nam wykonuje wyłącznie tylko zapis, brak odczytów na dysku, a ogólny „Usage” jest na poziomie 92-95%.
Po analizie i przekopaniu się przez dokumentację stwierdziłem, że weryfikacja i dwóch parametrów może znacząco usprawnić pracę.
- innodb_buffer_pool_size: ustaw na ~30–50% RAM (np. 4 GB przy 16GB RAM).
- innodb_flush_method:
O_DIRECT
(eliminuje podwójne bufory i skoki I/O).
Jak to sprawdzić. Najlepiej w konsoli wykonać zapytanie:
mysql> SHOW VARIABLES WHERE Variable_name IN
-> ('innodb_buffer_pool_size','innodb_redo_log_capacity','innodb_log_buffer_size');
W odpowiedzi dostaniemy:
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
| innodb_log_buffer_size | 16777216 |
| innodb_redo_log_capacity | 104857600 |
+--------------------------+-----------+
Od razu można zauważyć, że interesująca nas zmienna innodb_buffer_pool_size ma ustawioną wartość 128MB co jest stanowczo za mało i stąd biorą się problemy.
Jak dokonać zmiany?
Należy zmodyfikować /etc/mysql/mysql.conf.d/mysqld.cnf. Ale czy tak bezpośrednio?
Gdzie edytować (Ubuntu/Debian)
- Domyślny serwerowy:
/etc/mysql/mysql.conf.d/mysqld.cnf
- Rekomendacja: utwórz nowy plik, np.
/etc/mysql/conf.d/zabbix-tuning.cnf
(wszystko w sekcji[mysqld]
; ten plik będzie czytany po domyślnym i spokojnie nadpisze wartości).
Tworzymy nowy plik.
sudo nano /etc/mysql/conf.d/zabbix-tuning.cnf
tam w sekcji [mysqld] wpisujemy
[mysqld]
innodb_buffer_pool_size=4G
innodb_flush_method=O_DIRECT
Następnie należy zrestartować usługę mysql.
sudo systemctl restart mysql
sudo systemctl status mysql --no-pager
# log błędów, jeśli restart nie wstaje:
sudo journalctl -u mysql -e --no-pager
Po restarcie możemy ponownie wykonać zapytanie zwracające informacje o wielkości bufora. Powinno wynosić 4GB. Teraz możemy ponownie z konsoli uruchomić htop i zobaczyć, że Zabbix nam odżył. Teraz widać już o wiele mniejsze zapisy, pojawiły się odczyty a ogólny „Usage” jest na poziomie 10-20%.