Вопрос с собеседования · Базы данных

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

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

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

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

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

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования