首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SequelizeConnectionAcquireTimeoutError从天而降

SequelizeConnectionAcquireTimeoutError从天而降
EN

Stack Overflow用户
提问于 2021-03-23 17:15:11
回答 1查看 308关注 0票数 1

两三个星期前,我们突然开始获取SequelizeConnectionAcquireTimeoutError日志,我不知道我还能做些什么。

因此,显然有一个连接池,当连接池满时,所有操作都会超时,因为它们无法获得一个连接池。因此,我将配置更改为:

代码语言:javascript
运行
复制
  dialectOptions: {
    statement_timeout: 60000,
    idle_in_transaction_session_timeout: 60000
  },

  pool: {
    min: 0,
    max: 10,  // increased from 5
  },

我将数据库服务器(AWS RDS)从1核升级到2核,并将postgres v9升级到v12

但它仍然在发生。而且有太多的事情要进行,无法快速找出哪个查询可能会被卡住,这一点由于它出现的随机性而变得更加困难。dialectOptions怎么能不阻止这种情况呢?在我早上重新启动服务器之前,这个错误通常会被垃圾邮件发送几个小时

我们不运行任何复杂的查询,这是非常基本的REST风格的东西,这里和那里有一些连接。我已经研究了唯一复杂的事务驱动的代码块,我非常确定它完成了事务。在try/catch中,在我们的函数结束时,我们通过以下方式确保事务不会永远空闲:

代码语言:javascript
运行
复制
if (transaction && !transaction.finished) {
  await transaction.rollback()
}

这是正确的,还是不是我们认为的那样?

对于有同样问题的人: github的问题可能会有所帮助,并得到了很多评论https://github.com/sequelize/sequelize/issues/10858

Sequelize v6.3.5

更新: dialectOptions什么也没做,我试着像这样手动设置:

代码语言:javascript
运行
复制
await Sequelize.query("SET statement_timeout = '1ms';")
await Sequelize.query("SET idle_in_transaction_session_timeout = '1ms';")
console.log('statement_timeout', await Sequelize.query('SHOW statement_timeout;'))
console.log('idle_in_transaction_session_timeout', await Sequelize.query('SHOW idle_in_transaction_session_timeout;'))

但不久之后,它又被重置为0。在我们的代码中,除了上面的代码行和dialectOptions之外,其他地方都没有使用这些设置。

如果将连接池设置为恰好1个连接,则会保留该设置,这意味着每个新连接都将取默认值

EN

回答 1

Stack Overflow用户

发布于 2021-03-23 19:28:54

为了支持statement_timeoutidle_in_transaction_session_timeout dialectOptions,还必须更新pg模块。它们现在应用于所有连接。

我通过将这两个设置记录到其中一个api端点的控制台来验证这一点:

代码语言:javascript
运行
复制
console.log('statement_timeout', await Sequelize.query('SHOW statement_timeout;'))
console.log('idle_in_transaction_session_timeout', await Sequelize.query('SHOW idle_in_transaction_session_timeout;'))

它以前会一直记录0(默认,禁用)。此外,将超时设置为1ms可以正确地取消查询。我猜这将有助于找出哪些查询或事务被阻塞,这要归功于抛出错误的sql属性。

但是,本机驱动程序不支持它(参见https://github.com/brianc/node-postgres/pull/2323),因此Sequelize选项的native现在被设置为false

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66760244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档