Sequelize:TimeoutError:ResourceRequest 超时
Posted
技术标签:
【中文标题】Sequelize:TimeoutError:ResourceRequest 超时【英文标题】:Sequelize: TimeoutError: ResourceRequest timed out 【发布时间】:2018-01-29 20:40:07 【问题描述】:在节点 6.11 和 Sequelize 4.5.0 上运行的我的 Express 应用程序有时会抛出 TimeoutError: ResourceRequest timed out
,在不应该特别昂贵的操作上。我们说的是 5 行写入,每行单独执行。
该数据库是一个 Amazon RDS mysql 实例,在连接到我们用 Ruby 编写并使用 ActiveRecord 作为 ORM 的第二个 API 时没有显示任何问题。
我不知道如何开始诊断问题,对我接下来应该做什么有什么想法吗?
【问题讨论】:
数据有多大?让我们看看相关的sequelize代码和SHOW CREATE TABLE
。
根据documentation page,您可能正在处理死锁。您能否在此处发布您的查询以保持顺序?
使用 mysql 连接池代替。
【参考方案1】:
我认为我是最有资格回答这个问题的人。
无论我如何调整配置,这个问题曾经让我的生活陷入困境。
所以这个问题有两个解决方案第一个是设置池配置像这样
pool:
max: 50,
min: 0,
acquire: 1200000,
idle: 1000000,
这将再次解决您现在的问题,但是当您的负载增加时,您将再次开始收到错误。
回到第二个解决方案,您可以真正查看表架构或针对该表运行的查询。如果您遇到这些问题,则意味着您的查询没有得到优化,这需要比正常时间长得多的时间 最好的办法是在列上使用索引,你永远不会遇到这个问题
【讨论】:
【参考方案2】:对于仍在使用 Sequelize v4 的用户,v4.44.1 可能已修复此问题。
见公关:https://github.com/sequelize/sequelize/pull/11140
查看问题:https://github.com/sequelize/sequelize/issues/11139
【讨论】:
【参考方案3】:我在使用消耗大量时间的查询进行续集时遇到了同样的问题。 基于 github 问题 (https://github.com/sequelize/sequelize/issues/8133#issuecomment-359993057),我的解决方法是增加获取时间。 当我实例化一个新的续集时,我会执行以下操作:
const sequelize = new Sequelize(
config.get("dbConfig.dbName"),
config.get("dbConfig.user"),
config.get("dbConfig.password"),
dialect: "mysql",
operatorsAliases: false,
host: config.get("dbConfig.host"),
pool:
max: 100,
min: 0,
idle: 200000,
// @note https://github.com/sequelize/sequelize/issues/8133#issuecomment-359993057
acquire: 1000000,
);
【讨论】:
【参考方案4】:这个解决方案对我有用:
pool:
max: 100,
min: 0,
// @note https://github.com/sequelize/sequelize/issues/8133#issuecomment-359993057
acquire: 100*1000,
【讨论】:
欢迎来到 Stack Overflow。虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。 How to Answer以上是关于Sequelize:TimeoutError:ResourceRequest 超时的主要内容,如果未能解决你的问题,请参考以下文章
在循环TimeoutError中启动多个select查询时出现错误:ResourceRequest超时