Ответ
Анализ производительности запросов — многоуровневый процесс. Вот ключевые инструменты и методы:
1. Анализ плана выполнения (SQL-уровень)
EXPLAIN/EXPLAIN ANALYZE(PostgreSQL, MySQL) — главный инструмент. Показывает план запроса, стоимость, предсказанные и фактические строки, используемые индексы.EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 123 AND status = 'SHIPPED';- На что смотреть: Полные сканирования таблиц (
Seq Scan), отсутствие индексов, дорогие операции (хеш-соединения, сортировки).
- На что смотреть: Полные сканирования таблиц (
- Database-specific tools:
pg_stat_statements(PostgreSQL), Slow Query Log (MySQL), Query Store (SQL Server).
2. Профилирование на уровне приложения (Java)
- Hibernate Statistics: Включается через
hibernate.generate_statistics=true. Помогает выявить проблемы N+1, количество запросов, время кэша. - JDBC-прокси (p6spy): Логирует все SQL-запросы с параметрами и временем выполнения.
- APM-инструменты (Datadog, New Relic, Jaeger): Трассируют запросы от контроллера до БД, показывают узкие места.
3. Бенчмаркинг и нагрузочное тестирование
- JMH (Java Microbenchmark Harness): Для точного измерения производительности изолированных участков кода, включая DAO-слои.
- Gatling / JMeter: Для имитации реальной нагрузки и проверки производительности запросов под давлением.
Типичный workflow: 1) Выявить медленный запрос через лог/APM, 2) Проанализировать план через EXPLAIN, 3) Оптимизировать (добавить индекс, переписать запрос), 4) Проверить результат под нагрузкой.