Подтвердить что ты не робот

Как найти текущий размер пула подключений на герою

У нас есть приложение rails 3.2 (.11) с множеством динамиков, работающих на стеке бамбука heroku, подключающихся к серверу RDS MySQL. Кажется, что есть некоторые проблемы с нашими текущими соединениями с базой данных, поэтому мы пытаемся отлаживать то, сколько соединений каждый динамик разворачивается. Я знаю, что могу установить размер пула соединений в конфигурации DATABASE_URL на heroku, но не могу понять, сколько соединений в настоящее время используется по умолчанию.

Два основных вопроса:

1) Как узнать размер пула соединений, который используется героем?

2) Есть ли какая-либо причина, по которой дино потребуется размер пула соединений больше 1? Я понимаю, что рельсы могут выполнять только один запрос за раз, поэтому одно соединение с базой данных должно быть всем, что необходимо, насколько я могу видеть.

4b9b3361

Ответ 1

Чтобы проверить размер пула, запустите консоль heroku run rails c и выполните:

ActiveRecord::Base.connection_pool.size

Некоторые веб-серверы, такие как Puma, являются многопоточными, поэтому размер пула БД имеет значение. Вы также можете запустить многопоточный рабочий, такой как Sidekiq, который также будет зависеть от размера пула.

Обратите внимание, что Heroku будет игнорировать ваш файл database.yml. Чтобы установить размер пула, вы можете добавить ?pool=25 Pool ?pool=25 к DATABASE_URL в настройках вашего приложения heroku.

Ответ 2

Эта информация доступна через интерфейс в Rails https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_handling.rb#L98-L106, который находится в Rails 3 +

ActiveRecord::Base.connection_config
# => {:adapter=>"postgresql", :encoding=>"utf8", :pool=>5, :host=>"localhost", :database=>"triage_development"}

Вы можете использовать это, чтобы получить текущий размер пула без необходимости оценивать или полагаться на существование неэкспонированной переменной экземпляра, однако в rails 3 он может возвращать nil, если он явно не установлен

ActiveRecord::Base.connection_config[:pool]
# => 5