Я использую Rails 5 на Heroku. Иногда я получаю ActiveRecord :: ConnectionTimeoutError и имею в виду сценарий, но не знаю, как соединения распределяются между потоками Rails.
Мои max_connections на моем Postgresis 800, и когда эти ошибки происходят, я не даже близко к максимальному увеличению.
Вот то, что я думаю, что происходит, но не совсем уверен, так что, может быть, «обсуждение этого» может помочь.
У меня есть RAILS_MAX_THREADS = 5, и я использую Puma , Мой пул базы данных также равен 5. На psql я заметил, что есть 4 долго выполняющихся запроса, выполнение которых занимает более 7 минут (не учитывая проблему длины запроса для этого сценария.) 4 запроса, которые первоначально выдавали Heroku тайм-аут запросов (максимум 30 секунд), и кажется, что Rails удерживает эти 4 длительных соединения, и теперь у меня осталось только 1 соединение.
Поскольку в это время начинает поступать куча запросов, я начинаю получать ActiveRecord :: ConnectionTimeoutError b / c. Доступно 5 потоков, но подключения связаны с 4 из них. занят и жду ответа.
Возможен ли подобный сценарий, я на правильном пути? Как соединения базы данных распределяются между потоками и потоками / запросами с истекшим временем ожидания?