2016-07-22 117 views
3

这是我之前发布的有关SQLAlchemy中的数据库连接池错误的question的后续行为。为什么限制SQLAlchemy中的数据库连接池大小?

按照SQLAlchemy的docssqlalchemy.pool.QueuePool.__init__()方法采用以下参数:

pool_size - 维持所述池的大小,缺省值为5这 是最大连接数量将一直保持在 池中。请注意,池开始时没有连接;一旦请求连接数 ,该连接数将保留 。 pool_size可以设置为0来表示没有大小限制;到 禁用池,改为使用NullPool。

设置pool_size = 0有什么缺点?限制连接池大小有什么好处?只是为了节省内存吗?数据库不应该关心大量未使用的连接是否打开,对吗?

回答

4

不限制池大小的主要缺点是可能导致失控程序创建太多连接。

数据库级别和操作系统级别对数据库支持的连接数有实际的限制。每个连接也将使用额外的内存。限制池大小有助于保护数据库免受程序中的错误或服务器上的恶意攻击。这些中的任何一个都可能通过使用太多的连接或太多的内存而使数据库服务器陷入停滞状态。

根据正常的情况下,每个连接使用的额外内存应该不会太大,但最好将它限制为您认为可以同时使用的最大数量(也许加上几个测量)。