我们有一个rails 3.2(.11)应用程序,其中有许多dynos在heroku bamboo stack上运行,连接到MySQL RDS服务器。我们当前的数据库连接似乎存在一些问题,因此我们正在尝试调试每个测功机正在启动的连接数。我知道我可以在 heroku 上的DATABASE_URL
配置中设置连接池的大小,但似乎无法找出当前默认正在使用的连接数。
两个主要问题:
1) 如何找到 heroku 使用的连接池的大小?
2) 测功机需要大于 1 的连接池大小有什么原因吗?我的理解是,rails 一次只能执行 1 个请求,因此据我所知,应该只需要一个数据库连接。
要检查池大小,请启动 heroku 控制台heroku run rails c
,然后运行:
ActiveRecord::Base.connection_pool.size
一些 Web 服务器(如 Puma)是多线程的,因此数据库池的大小很重要。您还可以运行多线程工作线程,例如 Sidekiq,这也将受到池大小的影响。
请注意,Heroku 将忽略您的 database.yml 文件。要设置池大小,您可以将?pool=25
附加到 heroku 应用程序配置中的DATABASE_URL。
获得,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