2014-04-15 40 views
0

在mod_wsgi的pylons1.0项目中使用postgresql9.1.9。postgresql的MemoryError 9.1.9

获取“内存不足错误”。

查询是约140万行,并在query.all()上崩溃。 用于过滤的列被编入索引。 在postgresql.conf中,shared_buffers = 24MB,max_connections = 100。

你可以请建议工作?

+0

'shared_buffers = 24MB'现在**非常低。但更重要的设置是'work_mem'。执行计划说什么?该错误消息是来自Postgres还是来自您的编程语言? Postgres日志文件是否显示任何错误?您是否意识到有4个可用于9.1.x的bug修复版本,您没有应用? –

+0

谢谢。我尝试将work_mem从1MB增加到5MB,然后再增加10MB。现在没有MemoryError,但两种情况下都需要1分钟。这是正常的,还是你提出更好的价值? – hrs

+0

http://wiki.postgresql.org/wiki/SlowQueryQuestions –

回答

1

查询约为140万行,并在query.all()上崩溃。

当你说崩溃:你的意思是python客户端可执行文件,或PostgreSQL服务器?

我强烈怀疑崩溃是在Python中。我会说你会立刻把所有的结果读到记忆中,而且他们不适合。

你需要做的是逐步读取查询结果,处理它们,并从内存中丢弃它们。在psycopg2中,可以通过迭代cursor对象或使用cursor.fetchone()来完成此操作。塔架应该提供类似的方法。

+0

这是一个python内存错误。所以我改变了Python代码。它解决了这个问题。谢谢 :) – hrs