Яндекс.Метрика
Постмортем

Инцидент с доступностью сервиса 27 марта 2026

Разбор причин и хронология инцидента с недоступностью сервиса 27 марта 2026 года.

Резюме инцидента

Дата и время27.03.2026, 09:44–12:59 (UTC+3)
ПричинаСервисное подключение к БД с открытой транзакцией заблокировало очистку накопленной истории изменений. При перезапуске сессии БД запустила массовую очистку, которая заняла все ресурсы и заблокировала пользовательские запросы
Уровень серьёзностиКритический
Продолжительность3 часа 15 минут полной недоступности
Пострадавшие системыВеб, Android, iOS — все платформы
Пострадавшие пользователиВсе пользователи
Последнее обновление28 марта 2026 — корневая причина установлена

Что произошло

27 марта 2026 с 09:44 до 12:59 (UTC+3) наш сервис был недоступен для пользователей на всех платформах — веб, Android и iOS. Некоторые пользователи кратковременно попадали в систему, но сессии обрывались.

Потери данных не произошло.

База данных вошла в деградированное состояние: время ответа на запросы резко возросло без соответствующего роста нагрузки. Ни добавление мощностей, ни снижение нагрузки не помогли — БД не смогла восстановиться самостоятельно. Сервис был восстановлен после перезагрузки базы данных.

Мы приносим извинения за этот инцидент. Ниже — хронология, анализ причин и меры, которые мы принимаем.


Хронология

Все отметки времени — UTC+3.

  • 09:44 – Мониторинг зафиксировал резкое увеличение времени ответа БД при нормальном уровне нагрузки. Начато расследование. Опубликовали факт начала в клиентских чатах, где были первые обращения.
  • ~09:50 – Сработал автоскейлинг, добавлены мощности — ситуация не улучшилась.
  • 09:54 – Пользователи уведомлены в официальном канале.
  • ~10:00 – Вручную добавлены дополнительные ресурсы — не помогло. Даже простые запросы выполнялись аномально долго.
  • 10:19 – Подтверждена серьёзная деградация. Дополнили вручную инцидент на статусной странице.
  • ~10:30 – Стало понятно, что проблема точно в самой БД. Попробовали снизить нагрузку, частично ограничив доступ к сервису — не повлияло.
  • ~10:30–11:58 – Пробовали стабилизировать БД и параллельно рассматривали вариант переключения на рабочую реплику БД, но приняли решение в пользу ребута, как более проверенного решения.
  • 11:58 – Запущена перезагрузка БД.
  • 12:59 – Перезагрузка завершена. Сервис восстановлен.

Цепочка причин

  1. Почему сервис стал недоступен? — БД перестала обрабатывать запросы в приемлемое время.
  2. Почему? — БД вошла в деградированное состояние без видимого роста нагрузки.
  3. Почему добавление мощностей и снижение нагрузки не помогли? — Проблема была не в нехватке ресурсов, а во внутреннем состоянии БД.
  4. Почему БД не восстановилась самостоятельно? — Предварительная гипотеза: потенциальный баг на уровне СУБД. Точная причина — предмет расследования.

Что мы делаем, чтобы это не повторилось

Точная причина деградации БД — предмет расследования. Но мы фокусируемся на архитектурных изменениях, которые сократят влияние и время восстановления независимо от причины.

Снижение влияния

  • Шардирование базы данных. Разделяем БД на независимые сегменты, чтобы аналогичная проблема затрагивала не всех пользователей и база могла быть быстрее восстановлена.

Ускорение восстановления

  • Отладка переключения на реплику. Переключение работает, но обратный возврат на основную БД был ещё в процессе отладки — из-за чего мы не применили этот вариант во время инцидента. Отрабатываем полный цикл и проводим учения.

Обновление от 28 марта 2026: корневая причина установлена

По результатам расследования мы установили наиболее вероятную причину деградации БД.

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

Когда сессию перезапустили, БД начала массовую очистку накопленных за несколько дней данных. Эта внутренняя операция заняла все доступные ресурсы и заблокировала нормальную обработку пользовательских запросов.

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

Дополнительные меры по итогам расследования

  • Запрет на долгоживущие сервисные сессии к продуктивной БД. Такие сессии больше не допускаются в рабочем процессе.
  • Ограничение времени жизни транзакций. Устанавливаем таймаут на уровне БД — транзакции, открытые дольше заданного порога, будут автоматически завершены.
  • Алерт на долгие транзакции. Добавляем мониторинг транзакций старше N минут — чтобы обнаруживать подобные ситуации до того, как они повлияют на сервис.