Django ORM 和 PostgreSQL 连接限制

Posted

技术标签:

【中文标题】Django ORM 和 PostgreSQL 连接限制【英文标题】:Django ORM and PostgreSQL connection limits 【发布时间】:2011-03-04 05:44:55 【问题描述】:

我正在 Postgresql 8.1.21 上运行一个 Django 项目(使用 Django 1.1.1、Python2.5、psycopg2、Apache2 和 mod_wsgi 3.2)。我们最近遇到了这个可爱的错误:

OperationalError: FATAL: connection limit exceeded for non-superusers

我不是第一个反对这个的人。关于这个错误有很多讨论,特别是 psycopg,但其中大部分集中在旧版本的 Django 和/或提供涉及编辑 Django 本身的代码的解决方案。我还没有找到关于如何解决 Django ORM(或 psycopg,在这种情况下真正负责)问题的简洁解释。

只需在每个视图的末尾添加connection.close() 就能解决这个问题吗?更好的是,有没有人最终解决了这个问题并解决了这个错误?

编辑:我们后来将 Postgresql 的限制提高到 500 个连接;这可以防止错误出现,而是用过多的内存使用来代替它。

【问题讨论】:

【参考方案1】:

这可能是由其他原因引起的。例如,以某种方式配置 Apache/mod_wsgi,理论上它可以接受比数据库本身可以同时接受的更多的并发请求。您是否检查过您的 Apache/mod_wsgi 配置并将最大客户端的限制与 PostgreSQL 的限制进行比较,以确保尚未完成类似的操作。显然,这假设您已经设法在 Apache 中达到了该限制,并且还取决于任何数据库连接池的设置方式。

【讨论】:

我听起来很迟钝,但您是指 WSGIDaemonProcess 的最大请求数设置,还是 Apache 的 MaxClient? 这真的取决于你是使用mod_wsgi的嵌入模式还是守护模式。我猜不出你在跑什么,所以不得不概括一下。 谢谢,这是有道理的。我注意到即使将数据库的连接限制设置为高于 MaxClients 限制(目前在嵌入式模式下运行),数据库(ORM/psycopg)仍然保持连接打开。很高兴知道;我认为在这种情况下,错误仍然导致 ORM(?) 没有关闭这些连接。

以上是关于Django ORM 和 PostgreSQL 连接限制的主要内容,如果未能解决你的问题,请参考以下文章

在 django ORM 中使用 postgresql 窗口函数的干净方法?

如何在 Django ORM 中映射 PostgreSQL 数组字段

如何使用 Odoo 中的 ORM 连接到 PostgreSQL 中的另一个不同数据库?

如何在 Django ORM 中更改 PostgreSQL 的默认空排序行为

将 Django 连接到 PostgreSQL 数据库 (GeoDjango)

如何将Django ORM连接到mongo atlas?