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%.

Kategorie: Inne Bazy

Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl