我们遇到了一个问题,我们的 Postgres 9.0 服务器偶尔会锁定并终止我们的 Web 应用程序。重新启动 Postgres 即可解决该问题。
以下是我观察到的情况:
- 首先,一个 CPU 的使用率在几分钟内跃升至 100%
- 在此期间,磁盘操作降至~0
- 数据库操作降至 0(每秒块和元组数)
- 此期间的日志显示:
- 警告:工人启动时间过长;已取消
- 警告:工人启动时间过长;已取消
- 日志中没有查询(仅记录超过 200 毫秒的查询)
- 在之前或期间没有记录异常长时间运行的查询
- 然后第二个 CPU 跳到 100%
- Postgres 进程的数量从通常的 8-10 个增加到 20 个左右
- 与每秒 Postgres 块数的激增相匹配(约为正常情况下的两倍)
- 日志显示
- 日志:无法接受 SSL 连接:检测到 EOF
- 查询正在运行但速度很慢
- 重新启动 postgres 一切恢复正常
设置:
服务器:亚马逊 EC2 大型
Ubuntu 10.04.2 LTS
Postgres 9.0.3
专用数据库服务器
有人知道这是什么原因造成的吗?或者有人建议我还应该检查什么吗?
答案1
确保不会耗尽内存并导致磁盘抖动问题。
如果您有足够的开放内存,那么请直接进入 PostgreSQL 并查找有问题的查询。
SELECT * FROM pg_stat_activity;