[英]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.