Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Мониторинг и диагностика производительности
monitoring_diagnostics

Мониторинг и диагностика производительности

Slow query log, Performance Schema, sys schema, анализ проблем производительности

Мониторинг и диагностика производительности

Без мониторинга вы не узнаете, что индексы деградировали, пока пользователи не начнут жаловаться. Системный подход к диагностике — основа стабильной работы.

#Slow Query Log

Лог медленных запросов — первый источник информации о проблемах:

-- Включение slow query log SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; -- запросы дольше 1 секунды SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log'; -- Логировать запросы без индексов (даже если быстрые) SET GLOBAL log_queries_not_using_indexes = 'ON';

Постоянная настройка (my.cnf):

[mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 1 log_queries_not_using_indexes = 1

Анализ slow query log:

# Встроенная утилита — топ-10 медленных запросов mysqldumpslow -s t -t 10 /var/log/mysql/slow.log # Percona Toolkit — детальный анализ pt-query-digest /var/log/mysql/slow.log

pt-query-digest показывает:

  • Процентиль времени выполнения (p95, p99)
  • Примеры запросов с худшим временем
  • Анализ индексов (использовался ли оптимальный индекс)
  • Trend — как менялось время выполнения

#Performance Schema

Performance Schema — встроенная подсистема мониторинга с детальными метриками:

-- Проверка статуса SHOW VARIABLES LIKE 'performance_schema'; -- ON — включена (по умолчанию в MySQL 5.6+)

Использование индексов:

-- Статистика по каждому индексу SELECT object_schema AS db_name, object_name AS table_name, index_name, count_read, count_write, count_fetch, count_insert, count_update, count_delete FROM performance_schema.table_io_waits_summary_by_index_usage WHERE object_schema = 'your_db' ORDER BY count_read DESC;

Неиспользуемые индексы:

-- Через sys schema (удобное представление) SELECT * FROM sys.schema_unused_indexes WHERE object_schema = 'your_db';

Топ таблиц по I/O:

-- Наибольшее время ожидания I/O SELECT * FROM sys.io_global_tables_by_wait_latency LIMIT 10;

#sys Schema

sys Schema — набор представлений поверх Performance Schema для удобного анализа:

-- Топ медленных запросов SELECT * FROM sys.statement_analysis ORDER BY avg_latency DESC LIMIT 10; -- Таблицы с наибольшим количеством full scan SELECT * FROM sys.schema_tables_with_full_table_scans; -- Индексы с наибольшим количеством записи SELECT * FROM sys.schema_index_statistics ORDER BY rows_selected DESC LIMIT 10; -- Автогенерированные рекомендации по индексам SELECT * FROM sys.schema_table_lock_waits LIMIT 10;

#EXPLAIN ANALYZE в продакшене

EXPLAIN ANALYZE — основной инструмент диагностики конкретного запроса:

-- Фактическое выполнение с метриками EXPLAIN ANALYZE SELECT o.id, o.total, u.name FROM orders o JOIN users u ON o.user_id = u.id WHERE o.created_at > '2024-01-01' ORDER BY o.total DESC LIMIT 100;

Ключевые метрики для анализа:

  • actual time — реальное время (startup..total)
  • rows — реальное количество прочитанных строк
  • loops — количество итераций
  • cost — оценка стоимости оптимизатора

Сравнение с EXPLAIN: если rows в EXPLAIN значительно отличается от actual rows в ANALYZE — статистика устарела.

#Комплексная стратегия мониторинга

Уровень 1: Alerting (реальное время)

  • Slow queries rate > порога
  • Buffer pool hit ratio < 99%
  • Replication lag > порога
  • CPU/Memory utilization > 80%

Уровень 2: Ежедневный обзор

  • Топ-10 медленных запросов (pt-query-digest)
  • Новые запросы без индексов
  • Изменение размера ключевых таблиц

Уровень 3: Еженедельный анализ

  • EXPLAIN ANALYZE проблемных запросов
  • Статистика использования индексов — кандидаты на удаление
  • Фрагментация таблиц — кандидаты на OPTIMIZE

Уровень 4: Ежеквартальный аудит

  • Ревью всех индексов: удалить неиспользуемые, добавить недостающие
  • Анализ growth rate таблиц — планирование масштабирования
  • Тестирование планов Disaster Recovery

#Практический пример диагностики

Симптом: API endpoint отвечает 5+ секунд (ранее 50 мс)

Шаг 1: Найти проблемный запрос
-- Проверить slow query log
pt-query-digest /var/log/mysql/slow.log | grep -A 20 "SELECT.*orders"

Шаг 2: Проанализировать план выполнения
EXPLAIN ANALYZE <проблемный запрос>;

Шаг 3: Определить причину
-- type: ALL на orders → нет индекса
-- rows: 5000000 → full table scan 5 млн строк
-- Extra: Using filesort → сортировка без индекса

Шаг 4: Создать индекс
CREATE INDEX idx_orders_user_created ON orders(user_id, created_at);

Шаг 5: Проверить результат
EXPLAIN ANALYZE <тот же запрос>;
-- Сравниваем время: было 5000 мс → стало 50 мс

#Инструменты

ИнструментНазначение
Slow query logЛогирование медленных запросов
mysqldumpslowБазовый анализ slow log
pt-query-digestДетальный анализ slow log
Performance SchemaДетальные метрики I/O, блокировок
sys SchemaУдобные представления для анализа
EXPLAIN / EXPLAIN ANALYZEПлан выполнения конкретного запроса
Prometheus + GrafanaВизуализация метрик, alerting