簡體   English   中英

Rails 3 DB連接池 - 連接未關閉

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM