[英]Rails 3 DB connection pool - connections not closing
Stack是Rails 3 / Postgres + mongrel。 我最近不得不增加连接池,因为其中一个杂种上的命中总是超时。 我推断,每个运行3个mongrels +一个delayed_job,我需要池中的6个连接(它被设置为5)。 我在database.yml中将此值增加到10并且它解决了超时问题,现在虽然当我监视PG中的连接时我看到了这种情况;
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.