如何在heroku上查找当前连接池大小

问题描述 投票:0回答:3

我们有一个 Rails 3.2(.11) 应用程序,其中有许多测功机在 Heroku 竹堆栈上运行,连接到 MySQL RDS 服务器。我们当前的数据库连接似乎存在一些问题,因此我们正在尝试准确调试每个测功机正在旋转的连接数。我知道我可以在 Heroku 上的

DATABASE_URL
配置中设置连接池的大小,但似乎无法找出当前默认使用的连接数。

两个主要问题:

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

2) dyno 是否需要连接池大小大于 1?我的理解是,rails 一次只能执行 1 个请求,因此据我所知,一个数据库连接就应该是所需要的。

ruby-on-rails-3 heroku ruby-on-rails-3.2
3个回答
57
投票

要检查池大小,请启动 Heroku 控制台

heroku run rails c
,然后运行:

ActiveRecord::Base.connection_pool.size

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

请注意,Heroku 将忽略您的database.yml 文件。要设置池大小,您可以将

?pool=25
附加到 heroku 应用程序配置中的 DATABASE_URL。


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

0
投票

您需要的是。

ActiveRecord::Base.connection_pool.stat

它会回来的。

{:size=>10, :connections=>3, :busy=>1, :dead=>0, :idle=>2, :waiting=>0, :checkout_timeout=>5.0}

如果您对多线程数据库工作感兴趣,请查看我的答案这里

© www.soinside.com 2019 - 2024. All rights reserved.