Эта страница является оригинальной документацией PmaControl. Она сохраняет практичную структуру индекса для работ по оптимизации MySQL, не копируя сторонний контент и не завися от внешнего продукта.
Цель
Health check MySQL проверяет эксплуатационное состояние сервера: доступность, запас по ресурсам, согласованность лимитов, отсутствие критичных сигналов и минимальное качество конфигурации.
Основные проверки
- Uptime и недавние перезапуски.
- Насыщение соединений относительно
max_connections. - Доля дисковых чтений из buffer pool.
- Временные таблицы, созданные на диске.
- Ошибки соединений и
Aborted_clients. - Долгие блокировки, deadlock-и и ожидающие запросы.
- Свободное место для datadir, binary logs и redo logs.
Базовый SQL
SHOW GLOBAL STATUS LIKE 'Uptime';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables';
SHOW ENGINE INNODB STATUS\G
Интерпретация
Health check не должен быть только красно-зеленым списком. Он должен объяснять влияние, приоритет и способ подтверждения диагноза.
Начните с идентификации и свежего снимка
Запишите имя узла, версию, роль, время наблюдения и влияние на приложение. Проверьте весь путь от приложения через прокси к базе: успешное SQL-соединение не доказывает доступность нужного узла записи для клиентов. Определите последний исправный период и сопоставьте перезапуски с развёртываниями, событиями узла и журналом ошибок.
SELECT NOW() AS observed_at, @@hostname AS hostname,
VERSION() AS server_version, @@global.read_only AS read_only;
SHOW GLOBAL VARIABLES WHERE Variable_name IN (
'max_connections', 'datadir', 'tmpdir', 'log_error'
);
SHOW GLOBAL STATUS WHERE Variable_name IN (
'Uptime', 'Threads_connected', 'Threads_running',
'Max_used_connections', 'Connection_errors_max_connections',
'Aborted_clients', 'Aborted_connects', 'Innodb_log_waits',
'Innodb_buffer_pool_reads', 'Innodb_buffer_pool_read_requests',
'Created_tmp_tables', 'Created_tmp_disk_tables'
);
Оценивайте темпы и нагрузку, а не отдельные суммы
Для растущих счётчиков используйте две выборки за один непрерывный интервал. Доля физических чтений = ΔInnodb_buffer_pool_reads / ΔInnodb_buffer_pool_read_requests при положительном знаменателе. Это чтения мимо буферного пула, а не оценка исправности диска; сравните также чтения в секунду и задержку хранилища. Max_used_connections — максимум после сброса, а Threads_connected — текущее значение. Спящие соединения и активная работа по-разному расходуют ресурсы.
Доля дисковых временных таблиц — лишь подсказка. Переполнение MySQL TempTable в отображаемые файлы не полностью отражается в Created_tmp_disk_tables; низкая доля не доказывает работу только в RAM. Рост прерванных соединений требует проверки приложения, тайм-аутов и сети до вывода о неисправности базы.
Проверьте транзакции, реплики и узел
SELECT trx_id, trx_state, trx_started, trx_mysql_thread_id,
trx_rows_locked, trx_rows_modified
FROM information_schema.innodb_trx
ORDER BY trx_started
LIMIT 20;
SHOW ENGINE INNODB STATUS\G
Старая транзакция может бездействовать, удерживая блокировки или задерживая очистку. До остановки определите владельца и бизнес-операцию: откат также занимает время. На реплике MySQL 8.0.22+ проверьте SHOW REPLICA STATUS\G: получение, применение, последние ошибки и отставание. MariaDB и старый MySQL используют команды и поля своей версии. Нулевое отставание не гарантирует свежесть: проверьте прикладную контрольную отметку и каждый канал.
df -h /var/lib/mysql
df -i /var/lib/mysql
vmstat 1 5
Замените пример пути фактическим datadir и проверьте отдельные разделы временных файлов и бинарных журналов. Оцените свободные байты, inode, задержку I/O, давление памяти и активный обмен со swap. Исключайте первый отчёт vmstat из интервальных сравнений. Подтвердите резервные копии успешным восстановлением, измеренным временем и требуемой точкой восстановления, а не только завершением задания.
Расставьте приоритеты
| Сигнал | Следующее действие |
|---|---|
| Недоступный узел записи или полный диск | Немедленное восстановление, сохранение свидетельств |
| Рост ошибок, ожиданий или отставания | Сопоставьте с текущим влиянием на клиентов |
| Исторический максимум без текущей нагрузки | Анализ тренда и запаса ресурсов |
Продолжение диагностики
- В оценке производительности запишите ответственного, свидетельства и дату проверки.