几乎每天一次,我会在控制台中出现超时,例如:
7:1:36 PM kernel: Areca RAID volume scsi command timeout (target=0 lun=0)
这恰好对应于所有 postgres 进程挂起的时间。
我不愿意终止 pids,因为这往往会导致一切崩溃。无论如何要复活这些过程?我什至无法在终端中打开一个新的 postgres 窗口。
另外,有没有办法让 postgres 更能容忍这种超时?我的系统:
- Mac Pro (2013) 12 核 X 64GB
- 操作系统 10.10.4
- Postgres 9.4.4
我用于表空间的驱动器(其中 4 个)是:
- 槟榔 8050 T2
- 每个都有 8 个 1TB OWC Mercury Electra 6G SSD,采用 RAID 0 配置。
您很可能有一个或多个故障磁盘,或故障 RAID 控制器。这将是迁移到另一台主机的好时机。
另外,跨八个磁盘的 RAID 0?那是自找麻烦。
在这种情况下,PostgreSQL 将等待对内核的系统调用,如 a
pwrite()
或fsync()
类似的。PostgreSQL 不能容忍或不能容忍您的 raid 控制器问题。它只是耐心地等待,直到内核完成 PostgreSQL 要求它做的事情并将控制权返回给 PostgreSQL。这正是应该发生的事情。问题是控制器没有响应,所以系统调用永远不会返回。您应该能够使用strace
or确认这一点ps
(尽管我不确定 OS X 上的确切选项)。