Как диагностировать медленный запрос к БД
Python
Middle
Без компании
Как диагностировать медленный запрос к БД
Ответы
Для диагностики медленных запросов к БД можно использовать несколько подходов:
- **Логирование медленных запросов**
Включить slow query log в СУБД (например, в MySQL: `slow_query_log = 1`, `long_query_time = 1`). Это записывает все запросы, выполняющиеся дольше указанного времени.
- **EXPLAIN запросов**
Анализировать план выполнения запроса с помощью `EXPLAIN`:
```
cursor.execute("EXPLAIN SELECT * FROM users WHERE age > 30")
print(cursor.fetchall())
```
Покажет индексы, типы соединений и потенциальные узкие места.
- **Профилирование**
Использовать встроенные инструменты профилирования:
```
import cProfile
pr = cProfile.Profile()
pr.enable()
# выполнение запроса
pr.disable()
pr.print_stats(sort='time')
```
- **ORM-специфичные инструменты**
Например, в Django: `DEBUG=True` показывает все запросы и их время, а `django-debug-toolbar` дает детальную информацию.
- **Мониторинг БД**
Использовать инструменты типа pgBadger для PostgreSQL или Performance Schema в MySQL.
Оптимизация обычно начинается с добавления недостающих индексов, переписывания сложных запросов и уменьшения количества запросов (например, через select_related/prefetch_related в Django).