我们有一个rails 3.2(.11)应用程序,其中许多dynos在heroku bamboo堆栈上运行,连接到MySQL RDS服务器。我们当前的数据库连接似乎存在一些问题,因此我们正在尝试精确调试每个dyno正在旋转的连接数。我知道我可以在heroku的DATABASE_URL
配置中设置连接池的大小,但似乎无法确定默认情况下当前正在使用的连接数。
两个主要问题:
1)如何找到heroku使用的连接池的大小?
2)为什么dyno需要连接池大小大于1?我的理解是rails一次只能执行1个请求,因此就我所见,应该只需要一个数据库连接。
答案 0 :(得分:43)
要检查池大小,请启动heroku控制台heroku run rails c
,然后运行:
ActiveRecord::Base.connection_pool.instance_eval { @size }
某些Web服务器(如Puma)是多线程的,因此数据库池大小很重要。您还可以运行Sidekiq等多线程工作程序,它也会受到池大小的影响。
请注意,Heroku将忽略您的database.yml文件。要设置池大小,您可以将?pool=25
附加到heroku应用程序配置中的DATABASE_URL。
答案 1 :(得分:10)
此信息可通过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