如何确定数据库的连接限制应该是什么?

时间:2011-01-18 21:40:48

标签: python database sqlalchemy pylons connection-pooling

在我的组织中,PostgreSQL数据库是根据策略创建的,具有20个连接限制。当多个应用程序在使用连接池时,这往往会很难交互,因为许多应用程序打开了它们的全套连接并使它们空闲。

只要有多个应用程序与数据库联系,我们就会出现连接,就像您期望的那样。

汇集行为在这里是一件新事物;到目前为止,我们通过基于Web的数据库网关(?!)序列化对它们的访问或者根本不汇集任何内容来管理池化连接。因此,我不得不一遍又一遍地解释(从字面上看,一个人在整个项目过程中的5张故障单)如何汇集。

我想要的是以下之一:

  1. 增加与数据库的可用连接数量以便与游戏池保持良好关系的可靠,无可争议的理由。
    如果是这样,什么是安全限制?有没有理由将限制保持在20?

  2. 我错了,我们应该减少池的大小或完全消除它们。

  3. 对于它的价值,以下是游戏中的组件。如果配置其中一个是相关的,请权衡:

    DB:PostgreSQL 8.2。不,我们不会将其升级为其中的一部分。
    Web服务器:Python 2.7,Pylons 1.0,SQLAlchemy 0.6.5,psycopg2

    • 这很复杂,因为系统的某些方面使用SQLAlchemy ORM使用手动配置的引擎访问数据,而其他方面使用由我的一个伙伴写入的不同引擎工厂(Still sqlalchemy)访问数据与旧的PHP API匹配的对象。

    Task runner:Python 2.7,celery 2.1.4,SQLAlchemy 0.6.5,psycopg2

1 个答案:

答案 0 :(得分:2)

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

现在,您要处理的并发HTTP请求数应随着a)服务器上的负载而扩展,以及b)您可用的CPU数量。如果一切顺利,每个请求都将占用CPU时间(在Web服务器,应用程序服务器或数据库服务器中),这意味着您无法同时处理比CPU更多的请求。实际上,并非一切顺利:某些请求会在某个时刻等待IO,而不会占用任何CPU。因此,与CPU相比,可以同时处理更多的请求。

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

因此,我的建议是应对限制,并确保没有太多空闲连接(与您实际同时处理的请求数相比)。