Что такое профилирование SQL-запросов и какие инструменты для этого используются?

«Что такое профилирование SQL-запросов и какие инструменты для этого используются?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Профилирование SQL-запросов — это процесс анализа выполнения запросов к базе данных для выявления узких мест по производительности (медленные запросы, высокие затраты CPU/I/O).

Цели профилирования:

  1. Найти самые ресурсоемкие запросы.
  2. Проанализировать план выполнения (execution plan).
  3. Выявить недостающие индексы.
  4. Обнаружить блокировки (deadlocks) и проблемы с параллельным доступом.

Основные инструменты и методы:

  • Встроенные средства СУБД:
    • PostgreSQL: EXPLAIN ANALYZE, pg_stat_statements, лог медленных запросов.
    • MySQL: EXPLAIN, SHOW PROFILES, Performance Schema, лог медленных запросов (slow_query_log).
  • Мониторинговые системы: Datadog, New Relic, Prometheus с экспортерами для БД.
  • Профилировщики приложений: Интеграция с APM (Application Performance Monitoring), например, в Spring Boot Actuator с Micrometer.

Пример анализа плана выполнения в PostgreSQL:

EXPLAIN ANALYZE
SELECT * FROM orders WHERE customer_id = 123 AND status = 'SHIPPED';

Результат покажет тип сканирования (Seq Scan, Index Scan), стоимость, время и использование индексов, что позволит оптимизировать запрос или добавить составной индекс (customer_id, status).