Сервис работал стабильно годами, а после одного, казалось бы, безобидного изменения в инфраструктуре — переезда на pgBouncer в режиме transaction pooling — начал сыпать случайными ошибками вида «prepared statement does not exist» и «prepared statement already exists». Ошибки были нечастыми, не привязанными ни к нагрузке, ни к конкретному эндпоинту, и две недели команда искала гонку в своём коде вместо того, чтобы посмотреть, как транзакционный пулинг обращается с серверными подготовленными запросами.
Подробнее →