доступность и нагрузка, использование ресурсов, работа InnoDB, медленные запросы и блокировки.
Ниже приведены главные метрики Prometheus (mysqld_exporter), которые обязательно нужно выводить на дашборд, и их критические пороги.
---
1. Доступность и подключения
mysql_up— статус доступности MariaDB (1— работает,0— база упала).mysql_global_status_threads_connected— текущее количество активных клиентов.mysql_global_variables_max_connections— лимит подключений.- *Формула утилизации пул-подключений:*
(threads_connected / max_connections) * 100 - *Что смотреть:* Если значение превышает 80–85%, база скоро начнет отклонять новые соединения с ошибкой
Too many connections.
mysql_global_status_threads_running— количество потоков, выполняющих запрос *прямо сейчас*.- *Что смотреть:* В норме значение не должно превышать количество CPU-ядер сервера. Резкий спайк говорит об «аварии» или зависших блокировках.
---
2. Производительность (QPS / TPS)
rate(mysql_global_status_questions[5m])— количество запросов в секунду (QPS).rate(mysql_global_status_commands_total[5m])— разбивка запросов по типам (select,insert,update,delete).- *Что смотреть:* Помогает понять профиль нагрузки (Read-Heavy или Write-Heavy) и отследить аномальные всплески трафика.
---
3. Буферный пул InnoDB (InnoDB Buffer Pool)
Буферный пул — главный элемент кэширования MariaDB.
mysql_global_status_buffer_pool_reads/mysql_global_status_buffer_pool_read_requests- *Формула Cache Hit Ratio (эффективность кэша):*
$$100 - \left( \frac{\text{rate}(\text{buffer\_pool\_reads}[5m])}{\text{rate}(\text{buffer\_pool\_read\_requests}[5m])} \times 100 \right)$$
* *Что смотреть:* Значение **Cache Hit Ratio должно быть \(> 99\%\)**. Если оно падает ниже 95%, оперативной памяти не хватает для рабочей выборки (Working Set), и MariaDB постоянно читает данные с диска.
mysql_global_status_innodb_buffer_pool_pages_dirty— количество «грязных» страниц в памяти, которые ещё не скинуты на диск.- *Что смотреть:* Если показатель стабильно высок, дисковая подсистема не успевает сбрасывать данные.
---
4. Медленные запросы и блокировки (Slow Queries & Locks)
rate(mysql_global_status_slow_queries[5m])— динамика роста медленных запросов.- *Что смотреть:* Любой рост графика сигнализирует о неоптимизированных SQL-запросах или отсутствии индексов.
mysql_global_status_innodb_row_lock_waits— количество ожиданий разблокировки строк.mysql_global_status_innodb_row_lock_time_avg— среднее время ожидания блокировки строки (в мс).- *Что смотреть:* Рост этих показателей указывает на транзакции, которые блокируют таблицы/строки и выстраивают очереди из других запросов.
---
5. Дисковый ввод-вывод и лог транзакций (Redo Log)
rate(mysql_global_status_innodb_data_written[5m])/rate(mysql_global_status_innodb_data_read[5m])— объем чтения и записи на диск за секунду.mysql_global_status_innodb_os_log_pending_writes— очереди на запись в Redo Log.- *Что смотреть:* Значение больше
0говорит об упирании в IOPS/пропускную способность диска.
---
Готовые ID дашбордов для импорта в Grafana
Чтобы не собирать дашборд вручную, импортируйте готовые комьюнити-панели (в Grafana: Dashboards -> Import):
1. 7362 (*MySQL / MariaDB Overview*) — базовый сбалансированный дашборд.
2. 14057 (*MySQL Full*) — детализированный дашборд с глубокой аналитикой InnoDB и потоков.
******
Вот готовые PromQL-выражения с оптимальными параметрами усреднения и защиты от дивизии на ноль (деления на 0).
---
1. % задействованных подключений (Connection Pool Usage)
Вычисляет процент используемых клиентских подключений от установленного лимита max_connections.
(
mysql_global_status_threads_connected
/
mysql_global_variables_max_connections
) * 100
- Единицы измерения в Grafana:
Percent (0-100)илиpercent (0.0-1.0)*(если убрать* 100)*. - Порог для предупреждений: $> 80\%$.
---
2. QPS (Queries Per Second)
Общее количество выполняемых базой данных SQL-запросов в секунду.
rate(mysql_global_status_questions[5m])
- Единицы измерения в Grafana:
ops/sec(short:ops). - Альтернатива (все команды): Если
questionsне учитывает подготовленные стейтменты (prepared statements) в вашей сборке, используйте:
sum(rate(mysql_global_status_commands_total[5m]))
---
3. InnoDB Buffer Pool Hit Ratio (Эффективность кэша)
Процент запросов к данным, успешно прочитанных из оперативной памяти (буферного пула), а не с диска.
(
1 - (
rate(mysql_global_status_buffer_pool_reads[5m])
/
clamp_min(rate(mysql_global_status_buffer_pool_read_requests[5m]), 1)
)
) * 100
- Единицы измерения в Grafana:
Percent (0-100). - Особенности: Функция
clamp_min(..., 1)исключает ошибку деления на ноль при отсутствии нагрузки на БД. - Целевое значение: $> 99\%$. Падение ниже 95% указывает на нехватку
innodb_buffer_pool_size.
---
Дополнительные полезные выражения для этого же дашборда
- Thread Concurrency (Running vs Connected):
- Активно выполняют запросы:
mysql_global_status_threads_running - Все подключенные:
mysql_global_status_threads_connected
- Slow Queries Rate (Рост медленных запросов в секунду):
rate(mysql_global_status_slow_queries[5m])
- InnoDB Dirty Pages Ratio (% "грязных" страниц в памяти):
(
mysql_global_status_buffer_pool_pages_dirty
/
mysql_global_status_buffer_pool_pages_total
) * 100