Причину зависань знайшов профіль, а не збіг у часі
Внутрішній аналітичний дашборд зависав до двох хвилин і перезапускався. За добу зависання скоротилось із 83 до 28 секунд, а план прибирає його повністю.
Контекст. Дашборд, на якому бізнес щодня приймає рішення, рахує показники по ~250 тис. записів за 24 місяці. Одного дня він почав зависати на хвилину-дві й перезапускатися. Команда цілу добу працювала з інструментом, який падав.
Що пішло не так у реакції. Першою версією стала фіча, яку змерджили за кілька хвилин до перших помилок. Її відкотили й назвали причиною, хоча нічого не відтворили. Друга AI-сесія «підтвердила» це з тих самих логів. Після відкату зависання тривали далі.
Що я зробив.
- Зняв CPU-профіль продакшену. 73 секунди зі 100 займала робота, яку повторювали для кожного з 24 місяців, хоча від місяця вона не залежала. Ще 37 секунд забирало збирання сміття.
- У той самий день виправив головне: ця робота тепер виконується один раз на перерахунок. 83 → 28 секунд, контейнер більше не вмирає.
- Запропонував два структурні рішення: винести обчислення в окремий потік із власним кешем і зберігати закриті місяці в базі з версією формули. Друге прибирає ~90% роботи на кожному перерахунку.
- Додав процесні запобіжники: заборону мерджів під час інциденту, тест продуктивності на реальному обсязі даних, алерти на довгі зависання.
Висновок. Два AI-агенти, які читають одні й ті самі логи, дають один доказ, а не два. Профіль має бути першим кроком, а не останнім.