TGViewer
DevOps FM DevOps FM @devops_fm · 5.28K subscribers
Post #1005 1.77K

Forwarded from CORTEL

⭐️ Загадка зависшего Temporal UI. Часть 1 — расследование

Развернули Temporal (оркестратор workflow) в Docker и подключили две PostgreSQL-базы (основная и visibility).

Всё шло гладко. Через какое-то время от разработчиков прилетел запрос: «UI Temporal отдаёт 200 ОК, но ничего не грузит. Страница открывается, но данные не появляются.»

📍Проверили:
— Нагрузка на ноды в норме
— CPU/память без пиков, диски не забиты
— Алерты молчат.

Пробовали масштабировать Temporal и облегчить «тяжёлые» воркфлоу — без эффекта.
Подключили детальный мониторинг БД — и словили сюрприз: задержка отдельных запросов доходила до ~8 минут.

Копнули глубже: очередь соединений росла, а PgBouncer упирался в лимиты пула.
Это и оказался корень проблемы.

📍Что такое PgBouncer
— это лёгкий прокси для PostgreSQL, который управляет пулом соединений. Он ограничивает число одновременных коннектов от приложений, чтобы не положить базу. Когда пул переполнен, новые запросы встают в очередь и ждут свободного «слота». В этот момент UI кажется «зависшим»: страница уже вернула 200 ОК, но данных нет — запросы стоят в очереди на соединение.

Простая метафора
Запросы — пассажиры на остановке.
Пул соединений — парк автобусов с фиксированным числом машин(например 50).
База — конечная точка пути.
Пока все автобусы заняты, новые пассажиры стоят в очереди. Чем длиннее очередь, тем дольше UI «ничего не показывает».

Как это выглядит в архитектуре:

[Приложение / Temporal UI] → запросы → [PgBouncer] → очередь → [PostgreSQL]


📍Как мы подтвердили узкое место
— На дашбордах выросло время ответа БД и число «висящих» запросов
— В PgBouncer cl_active упёрся в лимит пула, а cl_waiting начал расти

Во второй части разберем:
— Подробный разбор: max_client_conn, default_pool_size, reserve_pool_size
— Что это такое и как работает — на аналогии с «автопарком» и очередью
— Как подобрать значения под вашу нагрузку и ограничения Postgres.

#заметкиИнженера
  • 👍 6
  • 🔥 4
  • ❤ 3
More from @devops_fm
  1. Sep 25, 2026Redis Streams vs Kafka 📝 Что выбрать для системы обработки событий: Redis Streams или Kaf…
  2. Sep 23, 2026Новостной дайджест от DevOps FM! Делимся свежими новостями и важными изменениями в мире De…
  3. Sep 21, 2026Nxs-anomaly — инструмент для алертинга и дежурств Когда алертов становится много, сама отп…
  4. Sep 18, 2026👩‍💻 Что нового в Kubernetes 1.37? Бодрый DevOps! В эту пятницу разбираем свежие материал…
  5. Sep 16, 2026В эфире DevOps FM – срединедельный дайджест новостей! ⏺В Forgejo обнаружили критическую уя…
  6. Sep 14, 2026Как дать командам доступ к метрикам Kubernetes и не открыть весь Prometheus? Всем DevOps!�…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →