当我使用django的查询集进行postgres查询时,只要查询没有返回超过几十个结果,它就会加载数据。但是,在较大的查询中,django会发出502错误的网关错误。知道为什么会这样,以及我如何解决它?我已经尝试了很多文档中列出的db优化内容,甚至根据特定的过滤参数对db进行了集群,但都无济于事。有没有其他人有类似的问题?你做了什么?
错误日志:
2015/08/01 20:00:13 [error] 20509#0: *725 upstream prematurely closed connection
while reading response header from upstream, client: 108.54.224.162,
server: 45.55.165.48, request: "POST /candidates/query/ HTTP/1.1",
upstream: "unix:/webapps/cruit/cruit/run/gunicorn.sock:/candidates/query/…;,
host: "45.55.165.48", referrer: "45.55.165.48/"
答案 0 :(得分:0)
Django在加载查询结果时可能会耗尽内存,因此在使用ORM对象时会这样做。您应该在查询执行期间以及502
之后立即检查您的内存使用情况 - 如果您的内存不足,您会看到尖峰和急剧下降。
如果是这种情况,您可以尝试使用my_queryset.values('value1', 'value2', ...)
加载较少的对象,实现分页或仅加载对象值,而不是为每个结果行创建ORM对象。