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

a64a0gku  于 2023-10-19  发布在  其他
关注(0)|答案(3)|浏览(130)

我们有一个rails 3.2(.11)应用程序,其中有许多dynos运行在heroku bamboo堆栈上,连接到MySQL RDS服务器。我们当前的数据库连接似乎有一些问题,所以我们正在尝试调试每个dyno到底有多少连接。我知道我可以在heroku上的DATABASE_URL配置中设置连接池的大小,但似乎找不到默认情况下当前使用的连接数。
两个主要问题:
1)我怎样才能找到heroku使用的连接池的大小?
2)为什么dyno需要一个大于1的连接池?我的理解是,rails一次只能执行一个请求,所以据我所知,一个数据库连接应该是所有需要的。

tktrz96b

tktrz96b1#

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

ActiveRecord::Base.connection_pool.size

一些Web服务器(如Puma)是多线程的,因此DB池的大小很重要。您还可以运行多线程工作线程,如Sidekiq,这也会受到池大小的影响。
注意Heroku会忽略你的database.yml文件。要设置池大小,您可以在heroku应用程序的配置中将?pool=25附加到DATABASE_URL。

xv8emn3q

xv8emn3q2#

这些信息可以通过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"}

你可以使用它来获取当前池的大小,而不需要eval或者依赖于未公开的示例变量的存在,但是在Rails 3中,如果没有显式设置,它可能会返回nil

ActiveRecord::Base.connection_config[:pool]
# => 5
k4ymrczo

k4ymrczo3#

你需要的是。

ActiveRecord::Base.connection_pool.stat

它会回来的。

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

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

相关问题