在postgresql日志文件中,我发现消息:
startup process (PID 1886772) was terminated by signal 9: Killed
虽然重新启动服务后,postgresql 数据库开始正常运行。但是,连续两天,服务因上述错误停止了三次。我试图查看 OOM 是否是罪魁祸首,但在日志文件dmesg
中找不到任何条目。kern.log
最后重新启动了数据库服务器。我不知道它是否能正常工作。我需要知道这个问题的原因,从而找到解决办法。
答案1
当您看到一条terminated by signal 9
消息时,这意味着服务器内存不足,必须做出决定:终止消耗所有内存的应用程序或完全崩溃。如果有机会,大多数服务器操作系统都会选择继续运行。
出现此错误后您应该立即看到如下内容:
DETAIL: Failed process was running: SELECT {rest of SQL query}
这将让你具体了解哪个SQL 查询是导致问题的原因,或者只是促成了问题。由于最近多次发生这种情况,这可能是 SQL 查询试图执行过多操作以超出可用资源范围的结果。
最终,您面前有三个选择:
- 重写导致服务器崩溃的 SQL 查询。⇢
我从事数据库工作已有 25 年以上。95% 的性能问题都是由人(或 ORM)而不是服务器造成的。 - 添加一些交换空间,给系统一点喘息的空间。⇢
这通常是一个不错的暂时的如果服务器是您本地拥有的,并且您需要一点时间来研究内存问题的最佳解决方案。 - 添加更多 RAM。⇢
如果您使用的是云实例,那么这意味着要升级到下一层。如果您使用的是本地硬件,请尽可能多地安装。高性能数据库才是快乐的数据库。