Случай с прода: блокировка в PostgreSQL
Реальный инцидент компании, где AutoDevOps работает на проде. Имена пользователей, представлений и адреса заменены; номера процессов, время и тип ожидания — как в источнике.
- Условия
Аналитический отдел: PostgreSQL на железном сервере, отчёты BI-сервера (Tableau) читают материализованные представления. Блокировки в PostgreSQL напрямую влияют на нагрузку BI-сервера. AutoDevOps — на ВМ компании, к базе — под учёткой только на чтение.
- Сигнал
Детектор мастера по коннектору PostgreSQL: две сессии ждут блокировку дольше минуты. Правила в Alertmanager для этого не понадобилось.
- Отчёт
-
Через 18 секунд после сигнала, один вызов инструмента —
pg_activity, $0,07 на модель. Уверенность модели — высокая.Подтверждено: сессия
83209около 6 минут выполняетREFRESH MATERIALIZED VIEW public.mv_daily_reportи держит блокировку представления; два читающих запроса ждут её около 2 минут.Роль pid Пользователь Ожидание Длится Запрос Держит 83209 etl_user — 00:05:59 REFRESH MATERIALIZED VIEW public.mv_daily_report; Ждёт 83316 analyst Lock / relation 00:01:58 SELECT … FROM mv_daily_report … Ждёт 83320 bi_service (Tableau) Lock / relation 00:02:01 SELECT … FROM mv_daily_report … Что делать — из отчёта:
- дождаться окончания
REFRESHи проверить длительность по pid83209; - проверить, можно ли перейти на
REFRESH MATERIALIZED VIEW CONCURRENTLY(нужен уникальный индекс) или запускать обновление в нерабочее время; - проверить, почему обновление идёт дольше 6 минут, и оптимизировать запрос представления.
Отменить сессию агент не предлагал: решение остаётся за инженером.
- дождаться окончания
- Подтверждение
Инженер отметил вывод агента как «верно». Сигнал погас сам примерно через 30 минут — это не доказательство устранения причины, а конец ожидания.
- Результат
Вручную путь идёт от симптома: сначала видно, что отчёты в Tableau подвисают, потом — что дело в PostgreSQL, и только потом инженер идёт в
psqlискать, кто кого держит. Здесь сигнал пришёл от самой базы, и цепочка «кто держит — кто ждёт» с запросом и временем была готова через 18 секунд. Оценка инженера команды: такой разбор вручную — около 15 минут и 5–15 команд. Это оценка, а не замер.