2016-07-22 116 views
3

這是我之前發佈的有關SQLAlchemy中的數據庫連接池錯誤的question的後續行爲。爲什麼限制SQLAlchemy中的數據庫連接池大小?

按照SQLAlchemy的docssqlalchemy.pool.QueuePool.__init__()方法採用以下參數:

pool_size - 維持所述池的大小,缺省值爲5這 是最大連接數量將一直保持在 池中。請注意,池開始時沒有連接;一旦請求連接數 ,該連接數將保留 。 pool_size可以設置爲0來表示沒有大小限制;到 禁用池,改爲使用NullPool。

設置pool_size = 0有什麼缺點?限制連接池大小有什麼好處?只是爲了節省內存嗎?數據庫不應該關心大量未使用的連接是否打開,對嗎?

回答

4

不限制池大小的主要缺點是可能導致失控程序創建太多連接。

數據庫級別和操作系統級別對數據庫支持的連接數有實際的限制。每個連接也將使用額外的內存。限制池大小有助於保護數據庫免受程序中的錯誤或服務器上的惡意攻擊。這些中的任何一個都可能通過使用太多的連接或太多的內存而使數據庫服務器陷入停滯狀態。

根據正常的情況下,每個連接使用的額外內存應該不會太大,但最好將它限制爲您認爲可以同時使用的最大數量(也許加上幾個測量)。