我该如何确定我的数据库连接限制应该是多少?

3
在我们的组织中,由于政策原因,PostgreSQL数据库的连接数限制为20。当多个应用程序使用连接池时,这往往会产生问题,因为其中许多应用程序打开了其全部连接套件并将它们保持空闲状态。
一旦有超过几个应用程序与数据库联系,我们就会用尽连接,正如您所期望的那样。
池化行为是一个新事物;直到现在,我们通过通过基于Web的DB网关(?!)串行访问来管理池化连接,或者根本不进行池化。因此,我必须一遍又一遍地解释(字面上,一个人在项目期间提交了5个故障单),池化是如何工作的。
我想要以下之一:
1.提供一个坚实、无可辩驳的理由,以增加可用连接数,以便与池协作。如果是这样,安全限制是多少?是否有理由将限制保持在20?
2.提供一个理由,说明我错了,我们应该减少池的大小或完全消除它们。
值得一提的是,以下是参与其中的组件。如果其中一个配置方式相关,请发表意见:
DB:PostgreSQL 8.2。不,我们不会在此过程中升级它。
Web服务器:Python 2.7、Pylons 1.0、SQLAlchemy 0.6.5、psycopg2
这复杂性还受到一个事实的影响,即系统的某些方面使用SQLAlchemy ORM使用手动配置的引擎访问数据,而其他方面使用一个由我的一位同事编写、将连接包装在与旧PHP API匹配的对象中的不同引擎工厂(仍然是SQLAlchemy)访问数据。
任务运行器:Python 2.7、celery 2.1.4、SQLAlchemy 0.6.5、psycopg2

我认为这个问题最好在serverfault.com上得到解答。 - David
1个回答

2

我认为要求每个并发活动一个连接是合理的,并且可以假设并发的HTTP请求是同时执行的。

现在,你想要处理的并发HTTP请求的数量应该随着a)服务器负载和b)可用CPU数量的增加而扩展。如果一切顺利,每个请求将在某个地方消耗CPU时间(在Web服务器、应用程序服务器或数据库服务器中),这意味着你不能同时处理更多的请求比你拥有的CPU数量。实际上,情况并不总是那么顺利:某些请求会在某个时候等待IO,并且不会消耗任何CPU。所以,处理比你拥有的CPU数量更多的请求是可以的。

尽管如此,假设你有4个CPU,允许20个并发请求已经是相当大的负载了。我宁愿限制HTTP请求而不是增加可以同时处理的请求数量。如果你发现单个请求需要多个连接,那么你的应用程序存在缺陷。

因此,我的建议是应对限制,并确保空闲连接的数量不要太多(与你实际处理的请求数量相比)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接