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

cmw*_*ght 22 heroku ruby-on-rails-3 ruby-on-rails-3.2

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

两个主要问题:

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

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

mpo*_*sot 44

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

ActiveRecord::Base.connection_pool.size
Run Code Online (Sandbox Code Playgroud)

一些像Puma这样的Web服务器是多线程的,因此数据库池大小很重要.您还可以运行Sidekiq等多线程工作程序,它也会受到池大小的影响.

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

  • 在4.2上你没有instance_eval,调用`ActiveRecord :: Base.connection_pool.size`工作正常. (4认同)
  • 从Rails 4.1开始,您可以根据[this heroku devcenter article](https://devcenter.heroku.com/articles/concurrency-and-database-connections#connection-)直接在`config/database.yml`中设置这些值.池). (2认同)

Sch*_*ems 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"}
Run Code Online (Sandbox Code Playgroud)

您可以使用它来获取当前池大小而无需评估或依赖于未公开的实例变量的存在,但是在rails 3中,如果未明确设置它可能返回nil

ActiveRecord::Base.connection_config[:pool]
# => 5
Run Code Online (Sandbox Code Playgroud)