Получить доступ

После массовой загрузки данных запросы, работавшие быстро, резко замедлились, хотя индексы на месте. Наиболее вероятная причина?

MiddleОптимизация запросовPostgreSQL
Ещё спрашивают так:
  • Почему после загрузки данных запросы стали медленными?
Коротко

Планировщик стоимостный: он опирается на статистику (число строк, распределение значений). После массовой загрузки она устарела — оценки неверны, выбирается плохой план.

  • Лечение: ANALYZE таблица после больших загрузок
  • Autovacuum обновит статистику позже, но не сразу
  • Признак в EXPLAIN ANALYZE: оценка rows сильно отличается от фактической

А ещё Для коррелированных колонок — расширенная статистика (CREATE STATISTICS)

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Оценка числа строк определяет выбор способа соединения и доступа. Если статистика говорит о тысяче строк, а их стало десять миллионов, планировщик выберет вложенные циклы там, где нужно хеш-соединение, и запрос замедлится на порядки. Автоматический сбор статистики обычно есть, но он срабатывает по порогу и с задержкой — после массовой загрузки её собирают явно. Смежные причины того же класса: раздувание таблицы из-за накопившихся мёртвых версий строк и индексы, которые полезно перестроить после большой загрузки. Диагностика одна и та же — сравнить в фактическом плане оценку и реальность.

Что хотят услышать

  • Роль статистики в выборе плана.
  • ANALYZE как исправление.
  • Как увидеть проблему в плане.

Частые ошибки

  • Начинать с добавления индексов, не посмотрев план.
  • Забывать про статистику после массовых операций и миграций.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Устарела статистика распределения данных, и планировщик строит планы по неверным оценкам — нужен пересбор статистики
  • ✗Индексы автоматически удаляются при массовой вставке
  • ✗Превышен лимит соединений
  • ✗Требуется перезапуск СУБД для применения индексов

Что спросят дальше

  • Как автоматический сбор статистики решает, когда сработать?
  • Что такое раздувание таблицы и почему оно замедляет чтение?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем