Как понять, почему запрос тормозит?

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
9,456
Реакции
1,549
Credits
33,195
Как понять, почему запрос тормозит?

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

Вот что я делаю первым делом:

1. Включаю EXPLAIN (ANALYZE)
Это ваш лучший друг. Не EXPLAIN, а именно ANALYZE, чтобы получить реальные значения времени, а не план на бумаге.

2. Смотрю на узлы с наибольшим временем
Часто виновник — Seq Scan по большой таблице или Nested Loop с миллионами итераций.

3. Ищу несработавшие индексы
Был ли Index Scan или Index Only Scan? Если нет — стоит проверить, почему не сработал индекс. Может, фильтр не селективный?

4. Проверяю фильтрацию и сортировку
ORDER BY может убить всё. Особенно если не по индексу.

5. Думаю про статистику
ANALYZE делали недавно? PostgreSQL может строить плохой план, если у него устаревшие данные.


Если ты часто отлаживаешь SQL — советую поставить Для просмотра ссылки Войди или Зарегистрируйся или использовать Для просмотра ссылки Войди или Зарегистрируйся. Они визуализируют планы и сразу показывают узкие места.

Коллеги рассказывайте, а как вы ищите узкие места в запросах? Есть свой лайфхак?