Натолкнулся на то же самое, и вот что, я думаю, происходит:
Каждый раз, когда создается новое соединение, он выполняет запросы начальной загрузки, о которых вы упоминали выше. Предполагая, что новый процесс не порожден, необходимо создать новое соединение, так как ActiveRecord перезапустил существующие соединения.
По умолчанию ConnectionPool::Reaper
отключит все соединения, которые простаивали более 5 минут. , См .: https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html
Если ваш API не получает никаких запросов в течение 5 минут, и все соединения повторяются, следующий запрос должен будет создать новое соединение и, следовательно, выполнить запросы.
Как уменьшить число инициирующих соединений?
Вы можете установить idle_timeout
из 0
в database.yml
. Это помешает ActiveRecord повторять соединения, но потенциально может вызвать проблемы в зависимости от того, сколько процессов запущено и какое у вас значение PG max_connections
.
Есть ли способ кэшировать запросы?
Есть закрытая проблема, которая говорит об этом, но не похоже, что это можно кэшировать сегодня. https://github.com/rails/rails/issues/35311