Django ORM和PostgreSQL连接限制

3
我正在使用Django 1.1.1、Python 2.5、psycopg2和Apache2 with mod_wsgi 3.2在PostgreSQL 8.1.21上运行项目。我们最近遇到了这个错误:
OperationalError: FATAL: connection limit exceeded for non-superusers
我并不是第一个遇到这个问题的人。关于这个错误有很多讨论,特别是与psycopg相关的讨论,但其中大部分集中在旧版本的Django上,或者提供修改Django代码的解决方案。我尚未找到简洁的解释来解决Django ORM(或在这种情况下真正负责的psycopg)保留打开的Postgre连接的问题。
仅仅在每个视图的末尾添加connection.close()能解决这个问题吗?更好的办法是,有没有人已经确定地解决了这个问题并消除了这个错误的影响?
编辑:我们后来将PostgreSQL的限制提高到500个连接;这可以防止错误出现,但会导致过多的内存使用。
1个回答

1
这可能是由其他原因引起的。例如,以一种理论上可以接受比数据库本身同时能够接受的更多并发请求的方式配置Apache/mod_wsgi。您是否已经审查了您的Apache/mod_wsgi配置,并将最大客户端限制与PostgreSQL进行了比较,以确保没有做出类似于此类的操作。显然,这假定您已经成功地达到了Apache的限制,并且还取决于如何设置任何数据库连接池。

我可能听起来有点迟钝,但你是在指WSGIDaemonProcess的maximum-requests设置还是Apache的MaxClient? - bennylope
这实际上取决于您是使用mod_wsgi的嵌入模式还是守护进程模式。我无法猜测您正在运行什么,所以必须概括地说明。 - Graham Dumpleton
谢谢,这很有道理。我注意到数据库(ORM/psycopg)即使将DB的连接限制设置为MaxClients限制以上(现在运行在嵌入式模式下),仍然会保留连接。这绝对是一个好消息;我认为在这种情况下,错误仍然导致ORM(?)没有关闭这些连接。 - bennylope

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