2012-04-03 82 views
8

我在閱讀有關SQLAlchemy的連接池,默認爲5個連接,默認情況下溢出爲10.當連接池耗盡時會發生什麼?

如果超過緩存連接的數量,會發生什麼情況?隨後的請求將排隊,直到空閒連接變爲可用或將創建一個不進入池的新連接?

另外,當池已經「溢出」到默認的最大值10時,未使用的連接會發生什麼?這些連接在默認時間後是否斷開連接(與標準池一樣),還是比標準池更激進?

回答

13

您正在閱讀有關QueuePool的信息,它管理數據庫連接以獲得更好的性能。它通過保持打開的空閒連接來做到這一點,以防以後再使用它們。它將保持打開的連接數是pool_size = 5(默認值)。如果您打開第六個連接,則只要該連接處於空閒狀態,隊列中的其中一個連接就會關閉。如果沒有空閒,QueuePool將打開更多的,最多max_overflow = 10(默認)。任何更多,你會得到一個錯誤。 但是這兩個參數都是可配置的。設置pool_size = 0可以有無限的開放連接。 The source is here

+0

pool_size = -1 for unlimited。 – zzzeek 2012-04-15 21:47:33

+1

嗯,在鏈接到文檔,看看QueuePool .__ init__,文檔字符串說「''pool_size''可以設置爲0來表示沒有大小限制」 – 2012-04-16 04:40:25

+0

哦,你是對的我在看pool_recycle – zzzeek 2012-04-16 19:21:44

4

SQLAlchemy docs

當簽出的連接數達到大小pool_size設置,附加的連接將返回到這個限制。 當這些附加連接返回到池時,它們將被斷開並丟棄。然後,池將允許的同時連接總數爲pool_size + max_overflow,池允許的「休眠」連接總數爲pool_size

所以,溢出的連接比正常休眠的連接更加積極。

如果你真的看的QueuePool._do_get()來源,你會看到,它提出了一個TimeoutError當連接數等於池的大小+溢出,並返回到connect()被稱爲後不久池中沒有連接。

相關問題