在 PostgreSQL 中,查询运行几分钟后连接丢失

4
我正在使用PostgreSQL 8.4和PostGIS 1.5,想要做的是从一个表中将数据插入到另一个表中(但不完全相同)。对于每一列,都会运行一些查询,并且共有50143行存储在该表中。但是查询非常耗费资源:查询运行几分钟后,连接就会断开。这通常会在查询执行21-22k MS后发生,然后我必须手动重新启动数据库管理系统。我应该如何解决这个问题?
错误信息如下:
 [Err] server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

此外,这是psql错误日志:
2013-07-03 05:33:06 AZOST HINT:  In a moment you should be able to reconnect to the database and repeat your command.
2013-07-03 05:33:06 AZOST WARNING:  terminating connection because of crash of another server process
2013-07-03 05:33:06 AZOST DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.

查看 PostgreSQL 日志是否有相关内容。 - Craig Ringer
往日志中再往前看,那只是真正错误的后果。此外,请使用“{}”(四个空格缩进)按钮,以便日志不会换行。 - Craig Ringer
此外,Linux 的内存超额提交是否已禁用?http://www.postgresql.org/docs/current/static/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT - Craig Ringer
在PostGIS中是否有连接或查询超时设置的地方? - Neil Neyman
1个回答

2

根据您的问题,我的猜测是您遇到了内存不足的问题。Craig建议关闭超额提交是个好主意。如果这是一个大查询,您还需要减少work_mem。这可能会减慢查询速度,但会释放内存。work_mem每次操作都是固定的,所以一个查询可以多次使用该设置。

另一个可能性是您遇到了PostgreSQL中C语言模块的某种错误。如果是这种情况,请尝试更新到最新版本的PostGIS等。


当我运行pg_restore时,我反复遇到这个错误,在将接收端(云机器,8GB->52GB)的内存增加后,错误没有再出现。我注意到在52GB机器上成功运行pg_restore时的峰值内存消耗大约为22GB。 - Mattias

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