我在閱讀有關SQLAlchemy的連接池,默認爲5個連接,默認情況下溢出爲10.當連接池耗盡時會發生什麼?
如果超過緩存連接的數量,會發生什麼情況?隨後的請求將排隊,直到空閒連接變爲可用或將創建一個不進入池的新連接?
另外,當池已經「溢出」到默認的最大值10時,未使用的連接會發生什麼?這些連接在默認時間後是否斷開連接(與標準池一樣),還是比標準池更激進?
我在閱讀有關SQLAlchemy的連接池,默認爲5個連接,默認情況下溢出爲10.當連接池耗盡時會發生什麼?
如果超過緩存連接的數量,會發生什麼情況?隨後的請求將排隊,直到空閒連接變爲可用或將創建一個不進入池的新連接?
另外,當池已經「溢出」到默認的最大值10時,未使用的連接會發生什麼?這些連接在默認時間後是否斷開連接(與標準池一樣),還是比標準池更激進?
您正在閱讀有關QueuePool的信息,它管理數據庫連接以獲得更好的性能。它通過保持打開的空閒連接來做到這一點,以防以後再使用它們。它將保持打開的連接數是pool_size = 5(默認值)。如果您打開第六個連接,則只要該連接處於空閒狀態,隊列中的其中一個連接就會關閉。如果沒有空閒,QueuePool將打開更多的,最多max_overflow = 10(默認)。任何更多,你會得到一個錯誤。 但是這兩個參數都是可配置的。設置pool_size = 0可以有無限的開放連接。 The source is here
當簽出的連接數達到大小
pool_size
設置,附加的連接將返回到這個限制。 當這些附加連接返回到池時,它們將被斷開並丟棄。然後,池將允許的同時連接總數爲pool_size + max_overflow
,池允許的「休眠」連接總數爲pool_size
。
所以,溢出的連接比正常休眠的連接更加積極。
如果你真的看的QueuePool._do_get()
來源,你會看到,它提出了一個TimeoutError
當連接數等於池的大小+溢出,並返回到connect()
被稱爲後不久池中沒有連接。
pool_size = -1 for unlimited。 – zzzeek 2012-04-15 21:47:33
嗯,在鏈接到文檔,看看QueuePool .__ init__,文檔字符串說「''pool_size''可以設置爲0來表示沒有大小限制」 – 2012-04-16 04:40:25
哦,你是對的我在看pool_recycle – zzzeek 2012-04-16 19:21:44