Как диагностировать медленный запрос к БД

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).