2

我正在使用大约 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. 
4

1 回答 1

13

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

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

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

PostgreSQL 服务器应该配置为没有虚拟内存过度使用,这样 OOM 杀手就不会运行,并且 PostgreSQL 可以自己处理内存不足的情况。请参阅有关 Linux 内存过量使用的 PostgreSQL 文档

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

于 2013-05-08T00:12:59.707 回答