【问题标题】:psql seems to timeout with long queriespsql 似乎因长查询而超时
【发布时间】:2013-05-01 08:31:30
【问题描述】:

我正在将大约 80GB 的数据批量复制到 postgres 中。

\copy my_table FROM '/path/csv_file.csv' csv DELIMITER ','

在提交事务之前,我收到以下错误。

服务器意外关闭连接 这可能意味着服务器异常终止 在处理请求之前或期间。

在 PostgreSQL 日志中:

LOG:server process (PID 21122) was terminated by signal 9: Killed
LOG:terminating any other active server processes
WARNING:terminating connection because of crash of another server process
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.
HINT: In a moment you should be able to reconnect to the database and repeat your command. 

【问题讨论】:

  • 副本是在本地主机上运行还是通过远程连接运行?我会说您亲自看到后端崩溃。检查 PostgreSQL 错误日志以获取详细信息。如果您的work_memmaintenance_work_mem 非常高,那么您可能内存不足?或者,也许您的磁盘空间不足——尽管这通常会产生更好的错误。还有,确切的 PostgreSQL 版本是什么?
  • 版本为8.4.11。我在远程机器上运行它。我已经 ssh'd 进入盒子,但我使用的是“屏幕”。我确实在日志中看到了这一点“考虑增加配置参数“checkpoint_segments””
  • 澄清一下,psql 与数据库在同一台机器上运行?它对您来说是否远程并不重要,只要它对psql 客户端是否远程即可;如果您使用psqllocalhost 上的数据库通信,则不会是网络问题。
  • 在日志中查找客户端断开连接的点;搜索FATALPANIC 级别的消息。
  • LOG:服务器进程(PID 21122)被信号 9 终止:已终止 LOG:终止任何其他活动服务器进程 警告:由于另一个服务器进程崩溃而终止连接 详细信息:邮局主管已命令此服务器回滚当前事务并退出的进程,因为使用另一个服务器进程异常退出并且可能损坏了共享内存。提示:稍后您应该能够重新连接到数据库并重复您的命令。

标签: postgresql postgresql-9.2 psql


【解决方案1】:

您的后端进程收到信号 9 (SIGKILL)。在以下情况下可能会发生这种情况:

  • 有人手动发送kill -9
  • 在某些情况下设置了一个cron作业来发送kill -9(非常不安全,不要这样做);或
  • Linux 内存不足 (OOM) 杀手触发并终止进程。

在后一种情况下,您将在内核的 dmesg 输出中看到 OOM 杀手活动的报告。我希望这就是你会在你的案例中看到的。

PostgreSQL 服务器应该配置为没有虚拟内存过度使用,这样 OOM 杀手就不会运行,并且 PostgreSQL 可以自己处理内存不足的情况。见the PostgreSQL documentation on Linux memory overcommit

单独的问题“为什么要使用这么多内存”仍然存在。回答这个问题需要更多地了解您的设置:服务器有多少 RAM,有多少空闲,您的 work_memmaintenance_work_mem 设置是什么等等。这不是一个非常有趣的问题,直到您升级到当前的 PostgreSQL 8.4 补丁版本以确保问题不是已经修复的问题。

【讨论】:

  • 升级到 postgres 9.1 成功了,似乎是 8.4 的问题。再次感谢克雷格的帮助。
  • @MattE 或旧的 8.4 补丁发布问题。您通常应该尝试跟上补丁,例如应该真的运行 8.4.17 而不是 8.4.11。这对于安全性、性能、可靠性等很重要。
猜你喜欢
  • 2018-10-19
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 2011-11-13
  • 2012-07-31
  • 1970-01-01
相关资源
最近更新 更多