24

我们有一个 rails 3.2(.11) 应用程序,在 heroku 竹栈上运行许多 dyno,连接到 MySQL RDS 服务器。我们当前的数据库连接似乎存在一些问题,因此我们正在尝试准确调试每个测功机正在旋转的连接数。我知道我可以在 heroku 的配置中设置连接池的大小DATABASE_URL,但似乎无法找出当前默认使用的连接数。

两个主要问题:

1)如何找到heroku使用的连接池的大小?

2) 测功机需要大于 1 的连接池大小有什么原因吗?我的理解是,rails 一次只能执行 1 个请求,所以据我所知,一个数据库连接应该是所需要的。

4

2 回答 2

54

要检查池大小,请启动 heroku 控制台heroku run rails c,然后运行:

ActiveRecord::Base.connection_pool.size

一些网络服务器(例如 Puma)是多线程的,因此数据库池的大小很重要。您还可以运行多线程工作程序,例如 Sidekiq,它也会受到池大小的影响。

请注意,Heroku 将忽略您的 database.yml 文件。要设置池大小,您可以附加?pool=25到 Heroku 应用程序配置中的 DATABASE_URL。

于 2013-02-01T23:26:36.000 回答
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
于 2014-07-24T19:11:13.957 回答