Обнаружил, что cочетание activerecord и тредов вредно для здоровья.
В activerecord все взаимодействие с базой данных внутри процесса проходит через пятиэтажную систему блокировок. Они используются для кеша prepared statements и прочих вещей, которые тебе на хуй не обосрались. Неряшливый профайлинг показал, что в ожидании лока треды проводят по 5% времени. Но это ерунда. Беда в том, что эти блокировки иногда как-то так стакаются, что тред просыпается уже через 5-15 минут, когда соединение уже прибито по idle_in_transaction_timeout. У меня это происходит в 1 случае из 7 000 000 на сильно загруженном сервере.
Activerecord — это безнадежно переусложненная хуйня. Не берите activerecord. Что брать — пока не знаю.