gpt4 book ai didi

postgresql - SequelizeConnectionAcquireTimeoutError 无处不在

转载 作者:行者123 更新时间:2023-12-03 22:19:01 25 4
gpt4 key购买 nike

我们突然开始收到 SequelizeConnectionAcquireTimeoutError 2或3周前的日志,我不知道我能做些什么了。
所以显然有一个连接池,当它已满时,之后的所有操作都会超时,因为他们无法获得一个。因此,我将配置更改为:

  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 会怎样?反正不阻止吗?该错误通常会被垃圾邮件发送数小时,直到我早上重新启动服务器
我们不运行任何复杂的查询,它真的是 super 基本的 REST 风格的东西,到处都有一些连接。我已经研究了唯一复杂的事务驱动的代码块,我很确定它完成了事务。在 try/catch 和函数结束时,我们通过以下方式确保事务不会永远闲置:
if (transaction && !transaction.finished) {
await transaction.rollback()
}
这是正确的还是不是我们认为的那样?
对于有同样问题的人:有这个 github 问题可能会有所帮助,并且得到了很多评论 https://github.com/sequelize/sequelize/issues/10858
Sequelize v6.3.5

更新: dialectOptions 什么也没做,我尝试像这样手动设置这些东西:
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 个连接会保留该设置,这意味着每个新连接都会获得默认值

最佳答案

pg模块也必须更新以支持 statement_timeoutidle_in_transaction_session_timeout方言选项。它们现在应用于所有连接。
我通过将这两个设置记录到我们的一个 api 端点中的控制台来验证这一点:

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,我想这将有助于找出哪些查询或事务被卡住了。抛出的错误的属性。
但是, native 驱动程序不支持它(参见 https://github.com/brianc/node-postgres/pull/2323 ),所以 native的 Sequelize 选项设置为 false现在。

关于postgresql - SequelizeConnectionAcquireTimeoutError 无处不在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66760244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com