Порядок разбора медленного запроса
Вопрос
Расставь шаги разбора медленного запроса на проде в правильном порядке.
Попробуйте сами
Расставьте шаги по порядку стрелками.
- 1Выбрать исправление: индекс, переписанный запрос или обновлённая статистика
- 2Снова снять план и убедиться, что узкое место ушло
- 3Найти запрос с наибольшим суммарным временем в
pg_stat_statements - 4Снять
EXPLAIN (ANALYZE, BUFFERS)с реальными параметрами на реплике или копии - 5Выкатить и сверить метрики запроса в
pg_stat_statementsпосле релиза - 6Найти узел, где уходит больше всего времени, и сравнить оценки строк с фактом
Показать ответ и разбор
Коротко
Правильный порядок
- 1Найти запрос с наибольшим суммарным временем в
pg_stat_statements - 2Снять
EXPLAIN (ANALYZE, BUFFERS)с реальными параметрами на реплике или копии - 3Найти узел, где уходит больше всего времени, и сравнить оценки строк с фактом
- 4Выбрать исправление: индекс, переписанный запрос или обновлённая статистика
- 5Снова снять план и убедиться, что узкое место ушло
- 6Выкатить и сверить метрики запроса в
pg_stat_statementsпосле релиза
Разбор
Сначала выбирают, что чинить: суммарное время в pg_stat_statements показывает, какой запрос реально нагружает базу (частый запрос на 5 мс может стоить больше редкого на 2 секунды). Затем план с фактическими цифрами, причём на реалистичных данных и параметрах: на пустой dev-базе план другой. В плане ищут самый дорогой узел и расхождения оценок с фактом, они указывают на причину. Исправление проверяют повторным планом и только потом выкатывают, а после релиза сверяют метрики.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Узлы плана и что они делают
Следующий вопрос
Перепиши подзапрос в SELECT на JOIN с GROUP BY