【发布时间】:2018-08-11 02:04:08
【问题描述】:
在过去的几天里,我开始在生产中看到来自 Postgres (with node-postgres) 的 read ETIMEDOUT 错误,我很难找到问题的根源。
我不确定问题是数据库无法处理连接,还是无法从池中获取连接,更不用说写入套接字了。
我根本无法在开发中重新创建错误(我也无法在生产中可靠地重新创建)。但是 Postgres 错误日志中没有显示任何内容。
这是池配置:
pool: {
max: 50,
min: 0,
idle: 20000,
acquire: 20000
}
据我所知,上个月我们同时拥有的最大连接数是 8,因此池永远不会耗尽。
Postgres 是否有任何类型的可配置查询超时,可以对其进行调整以确保长时间运行的查询不会导致这些超时?虽然仅供参考,但有时这些情况会发生在微小的插入或单行读取中。
我相当确定ETIMEDOUT 是系统错误,而不是高级 JavaScript 驱动程序抛出的错误。底层套接字的超时在哪里定义?
【问题讨论】:
-
可能是防火墙之类的网络问题。 PostgreSQL 日志中有对应的条目吗?
-
@LaurenzAlbe 我认为这不太可能是防火墙问题,因为 99.9% 的查询都不会失败。我们目前也没有设置 Postgres 来记录单个查询,所以很遗憾,我无法匹配它们。
标签: node.js postgresql node-postgres