Django/Postgres在重复处理同一查询后性能恶化

Django/Postgres在重复处理同一查询后性能恶化,django,apache,postgresql,Django,Apache,Postgresql,我在Apache上运行Django。我有几台客户端计算机,它们应该调用urllib2.urlopen()并发送一些数据,我的服务器将处理这些数据并立即返回一个回复。然而,当我测试这个时,我发现了一个非常棘手的问题。我有一个客户端反复发送相同的数据进行处理。第一次大约需要20秒,第二次大约需要40秒,第三次出现504(网关超时)错误。如果我尝试发送数据,会随机弹出更多504个错误。我很确定这是Postgres的一个问题,因为处理信息的函数会进行许多数据库调用,但是,我不知道为什么Postgres的

我在Apache上运行Django。我有几台客户端计算机,它们应该调用urllib2.urlopen()并发送一些数据,我的服务器将处理这些数据并立即返回一个回复。然而,当我测试这个时,我发现了一个非常棘手的问题。我有一个客户端反复发送相同的数据进行处理。第一次大约需要20秒,第二次大约需要40秒,第三次出现504(网关超时)错误。如果我尝试发送数据,会随机弹出更多504个错误。我很确定这是Postgres的一个问题,因为处理信息的函数会进行许多数据库调用,但是,我不知道为什么Postgres的性能会下降这么多。我尝试过几种数据库优化技巧,包括:(http://stackoverflow.com/questions/1125504/django-persistent-database-connection),无济于事

提前谢谢


编辑:请求不会同时出现。它们是背靠背的,每个查询都涉及很多选择和连接,还有一些插入和更新。apache错误日志显示这只是一个简单的超时,处理客户端发布的数据的功能需要90秒以上。

您检查过apache错误日志吗?您是否设置了django
DEBUG=True
ADMINS=('email@addr.com”,)
这样您就可以得到关于问题实际原因的详细错误报告了?如果是这样,在这里粘贴一些信息怎么样

你为什么肯定是博士后?你做过诊断来得出这个结论吗?如果是,请让我们知道

您是否使用mod_wsgi运行apache?您为django应用程序分配了多少进程和线程

另外,处理第一个事务需要20秒,这是一个巨大的时间量。也许您可以向我们展示导致超时的视图代码。我们也许能在那里提供帮助


我真诚地怀疑,是博士后一个人造成了这个问题。它可能与应用程序代码或服务器配置有关。

如果它真的是Postgres,那么您应该在Postgres配置中打开慢速语句的日志记录,以找出哪条语句占用了这么多时间

这可以通过设置配置属性
log\u min\u duration
来实现

详情请参阅手册:

你说这个函数会进行“许多数据库调用”,所以我从一个非常小的数字开始,甚至0来记录所有语句的持续时间,然后你就可以识别出那些缓慢的语句

它也可能是发出的锁定。可能第一次调用没有正确结束其事务,后续调用在等待资源时会超时


您可以通过在第一次调用后检查系统视图
pg_locks
来验证这一点

请求是否同时发出?另外,您正在调用什么类型的查询,以及调用了多少次?