【问题标题】:Django ORM and PostgreSQL connection limitsDjango ORM 和 PostgreSQL 连接限制
【发布时间】: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 个连接;这可以防止错误出现,而是用过多的内存使用来代替它。

【问题讨论】:

    标签: python database django postgresql django-orm


    【解决方案1】:

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

    【讨论】:

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