调试Postgres ETIMEDOUT

时间:2018-03-02 19:38:38

标签: node.js postgresql node-postgres

在过去的几天里,我开始看到来自Postgres(with node-postgres)的生产中出现read ETIMEDOUT错误,而且我很难找到问题的根源。< / p>

我不确定问题是数据库是否无法处理连接,或者是否与无法从池中获取连接有关,更不用说写入套接字了。

我根本无法在开发中重新创建错误(我也无法在生产中可靠地重新创建)。但是,Postgres错误日志中没有任何内容显示出来。

这是池配置:

pool: { 
  max: 50, 
  min: 0, 
  idle: 20000, 
  acquire: 20000 
}

据我所知,上个月我们同时拥有的最大连接数为8,因此池永远不会耗尽。

Postgres是否有任何类型的可配置查询超时,可以调整以确保长时间运行的查询不会导致这些?虽然仅供参考,但有时会发生微小插入或单行读取。

我很确定ETIMEDOUT是系统错误,而不是高级JavaScript驱动程序引发的错误。底层套接字的超时定义在哪里?

1 个答案:

答案 0 :(得分:0)

  

Postgres是否有任何可配置的空闲超时,可以调整以确保长时间运行的查询不会导致这些超时?

空闲超时和查询超时是两个不同的事情。

空闲超时是指连接池在由于不使用而关闭之前在连接池中挂起的时间,并且是通过连接对象的属性idleTimeoutMillis配置的。

查询超时定义查询在超时之前可以运行多长时间,这正是您所需要的。它通过连接对象的属性statement_timeout进行配置。