2013-04-16 43 views
4

有沒有辦法增加ActiveRecord的連接超時?如何增加ActiveRecord連接超時?

我不斷收到這個錯誤,當我有超過25個線程與5

(ActiveRecord的:: ConnectionTimeoutError)「無法獲得5秒內一個數據庫連接池的大小(等待5.000144774秒) 。最大池大小目前是3;考慮增加它。「

如果沒有辦法增加連接超時,那麼確保線程儘可能快地使用連接的最佳方法是什麼?

回答

1

您可以在database.yml中添加

pool: 5 

您還可以設置checkout_timeout價值,但我不建議更換,因爲你的應用程序可能需要更多秒鐘回答這個問題。如果錯誤在系統處於很多請求的情況下拋出,那麼最好給出更多可能的同時連接,而不是讓每個請求等待更長的時間來完成。

+0

「pool」更改連接池的大小,而不是連接獲取超時 – barbolo

+0

@barbolo錯誤提示「最大池大小當前爲3;考慮增加it' – fotanus

-1

在你的數據庫配置(例如config/database.yml)。你可以設置連接超時,以秒爲每一個數據庫連接:

例如,連接超時設置爲30秒:

production: 
    host: HOST 
    port: 5432 
    connect_timeout: 30 
    ... 

默認連接超時似乎爲60秒,儘管,這個值可能取決於你使用的適配器(如PostgreSQL的適配器)。

+0

您鏈接到提到了'checkout_timeout',而不是一個'connect_timeout'的文檔,以及它到底是什麼,它說這是 - 長碼將如何迫不及待地想從AR的連接池的連接。這可能或不可能是OP想要的,不確定。將checkout_timeout設置爲60秒,如果您等待60秒阻止以從池中獲取連接,您需要池中的更多連接或對數據庫訪問模式進行重新架構,可能永遠不會有充分的理由將checkout_timeout設置爲60秒。 – jrochkind

2

根據docs則應該在你的數據庫配置文件中的「checkout_timeout」選項。

checkout_timeout:秒數到框和等待放棄和提高超時錯誤(默認5秒)之前的連接 。