Вступить в клуб →
сложнаявопросPostgreSQL, ORM и оптимизация запросов

Миграция с CREATE INDEX остановила запись в боевую таблицу на десять минут

В рабочее время выкатили релиз. В миграции есть шаг:

CREATE INDEX orders_status_idx ON orders (status);

В таблице около 40 млн строк. Через минуту после старта деплоя сервис начал отдавать таймауты на всех операциях создания и изменения заказов; чтение при этом работало. Через десять минут, когда миграция завершилась, всё восстановилось само.

Что произошло и как выкатывать такие изменения на боевой базе?

  • Проблема в объёме: на таблицах в десятки миллионов строк индексы создавать нельзя, нужна витрина
  • Обычный CREATE INDEX блокирует изменение таблицы до конца построения; на проде нужен CONCURRENTLY
  • Миграцию нужно было запускать из кода приложения при старте, а не отдельным шагом деплоя
  • Достаточно увеличить statement_timeout — тогда запросы на запись не будут отваливаться

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела