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

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

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

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

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

2 ответа

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

ActiveRecord::Base.connection_pool.instance_eval { @size }

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

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


Эта информация доступна через интерфейс в 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

licensed under cc by-sa 3.0 with attribution.