Ruby on rails Rails 3 DB连接池-连接未关闭
堆栈是Rails 3/Postgres+mongrel。我最近不得不增加连接池,因为对其中一个混血儿的点击总是超时。我推断,如果每个服务器上运行3个Mongrel+一个延迟的_作业,则池中需要6个连接,而设置为5。我在database.yml中将其增加到10,解决了超时问题,不过现在当我在PG中监视连接时,我看到了这种情况Ruby on rails Rails 3 DB连接池-连接未关闭,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,堆栈是Rails 3/Postgres+mongrel。我最近不得不增加连接池,因为对其中一个混血儿的点击总是超时。我推断,如果每个服务器上运行3个Mongrel+一个延迟的_作业,则池中需要6个连接,而设置为5。我在database.yml中将其增加到10,解决了超时问题,不过现在当我在PG中监视连接时,我看到了这种情况 SELECT datname,usename,procpid,client_addr,waiting,query_start,current_query FROM pg_st
SELECT datname,usename,procpid,client_addr,waiting,query_start,current_query FROM pg_stat_activity;
db1 | www-data | 8658 | | f | 2014-03-19 10:03:54.084825+00 | <IDLE>
db1 | www-data | 9071 | | f | 2014-03-19 09:58:42.306558+00 | <IDLE>
db1 | www-data | 8721 | | f | 2014-03-19 10:03:53.980691+00 | <IDLE>
db1 | www-data | 8722 | | f | 2014-03-19 10:03:53.874443+00 | <IDLE>
db1 | www-data | 8733 | | f | 2014-03-19 10:04:20.380137+00 | <IDLE>
db1 | www-data | 9080 | | f | 2014-03-19 10:00:54.157541+00 | <IDLE>
db1 | www-data | 10843 | | f | 2014-03-19 10:04:18.506355+00 | <IDLE>
#and so on and so on for more than 20 instances...
它屏蔽了多达20多个连接,并且似乎没有关闭它们。我假设,存在的仍然意味着它们是开放的,只是什么也不做。它看起来确实在上下波动,所以一些连接正在关闭
我以为rails/activerecord应该自动关闭连接,但事实似乎并非如此
我读对了吗?我在什么地方漏过水吗?可能是什么原因造成的?在控制器启动的操作之外使用ActiveRecord事务时,例如在延迟作业中,必须使用以下语法以确保连接返回到池
ActiveRecord::Base.connection_pool.with_connection do
#your code here
end
你是在使用sidekiq/delayed job之类的东西,还是在另一个线程中使用activerecord?我们确实有一个delayed_job,但是有三个混血儿,我希望每个实例有3个连接,每个delayed_job有3个连接,总共有6个活动连接,而不是20多个,如果是这样的话,那就相当令人不安了,并能解释为什么会这样。你知道的某个地方有没有消息来源证实了这一点,我在文档中找不到任何提及的地方——我们使用的是rails 3.2.2我读到过。通常不需要这样做的原因是,从池中获取连接并返回它们是由ActionController自动执行的