2010-06-15 85 views
2

我在Postgresql 8.1.21上运行Django项目(使用Django 1.1.1,Python2.5,psycopg2,Apache2和mod_wsgi 3.2)。我们最近遇到了这个可爱的错误:Django ORM和PostgreSQL连接限制

OperationalError: FATAL: connection limit exceeded for non-superusers

我不反对这种跑起来的第一人。关于这个错误有很多讨论,特别是psycopg,但是其中大部分都是关于Django的老版本,并且/或者提供了涉及编辑的解决方案来在Django本身进行编码。我还没有找到关于如何解决Django ORM(或psycopg,在这种情况下真正负责任的问题)离开Postgre连接问题的简洁解释。

只需在每个视图的末尾添加connection.close()解决此问题?更好的是,有谁最终解决了这个问题,并踢了这个错误的屁股?

编辑:我们稍后将Postgresql的限制上限为500个连接;这防止了出现错误,但用过多的内存使用来替换它。

回答

1

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

+0

我会听起来很呆板,但是你指的是WSGIDaemonProcess的最大请求设置,还是Apache的MaxClient? – bennylope 2010-06-16 00:55:48

+0

这真的取决于您是使用mod_wsgi的嵌入模式还是守护进程模式。我不能猜测你正在运行什么,所以不得不推广。 – 2010-06-16 02:47:17

+0

谢谢,这很有道理。我注意到,即使将数据库的连接限制设置为高于MaxClients限制(现在以嵌入模式运行)之后,数据库(ORM/psycopg)仍然保持连接打开状态。这绝对是很好的知道;我认为在这种情况下,错误仍然导致ORM(?)不关闭这些连接。 – bennylope 2010-06-16 14:59:11