🛠️ Запрос в PostgreSQL вчера выполнялся за 300 мс, а сегодня — 40 секунд.
Первая реакция: «Нужен индекс». Иногда это верно. Но новый индекс без диагностики может не устранить причину и добавить нагрузку на запись и сопровождение базы.
Что проверить до изменения схемы:
• План выполнения Изменился ли путь выполнения и объём обрабатываемых строк? Полный проход по таблице не всегда ошибка: всё зависит от данных и фильтра. • Оценки и статистика Если при проверке с фактическим выполнением планировщик ожидал сотни строк, а обработаны миллионы, проверьте статистику и распределение данных. После массовых изменений статистика могла не успеть обновиться. • Рост данных Запрос мог не «сломаться» — данных стало больше, и прежняя логика перестала соответствовать нагрузке. • Блокировки и ожидания Запрос может не столько считать, сколько ждать блокировку или другое событие ожидания. • Изменения SQL Новый JOIN, фильтр, сортировка, выражение в WHERE или SELECT * могут заметно изменить стоимость выполнения.
Типичная ошибка — добавлять индекс вслепую. Сначала выясните, что изменилось, и только потом меняйте схему.
Сохраните чек-лист для первичной диагностики PostgreSQL.
На курсах УКЦ ФОРС такие ситуации разбираются на практике: планы запросов, индексы, статистика, блокировки и диагностика производительности.
🔹🔹🔹🔹