Sequelize:TimeoutError:ResourceRequest超时

时间:2017-08-21 17:32:17

标签: mysql node.js sequelize.js

使用Sequelize 4.5.0在节点6.11上运行的My Express应用程序有时会抛出TimeoutError: ResourceRequest timed out,这些操作应该不会特别昂贵。我们正在谈论5行写入,每行都是单独执行的。

该数据库是一个Amazon RDS MySQL实例,连接到我们用Ruby编写的第二个API并且使用ActiveRecord作为ORM时没有显示任何问题。

我不确定如何开始诊断问题,关于我接下来该做什么的任何想法?

4 个答案:

答案 0 :(得分:0)

此解决方案对我有用:

  pool: {
    max: 100,
    min: 0,
    // @note https://github.com/sequelize/sequelize/issues/8133#issuecomment-359993057
    acquire: 100*1000,
  }

答案 1 :(得分:0)

使用消耗大量时间的查询进行序列化时,我遇到了同样的问题。 基于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,
    }
  }
);

答案 2 :(得分:0)

对于仍在使用Sequelize v4的您来说,此问题可能已由v4.44.1解决。

请参见PR:https://github.com/sequelize/sequelize/pull/11140

请参阅问题:https://github.com/sequelize/sequelize/issues/11139

答案 3 :(得分:0)

我认为我是最有资格回答这个问题的人。

这个问题曾经使我的生活陷入困境,无论我如何调整配置。

因此,针对此问题有两种解决方案,第一种是设置类似于以下的池配置

pool: {
      max: 50,
      min: 0,
      acquire: 1200000,
      idle: 1000000,
    }

这再次可以解决您的问题,但是当负载增加时,您将再次开始获得错误。

回到第二种解决方案,您可以真正查看表架构或针对表运行的查询。如果遇到这些问题,则意味着您的查询没有经过优化,这比正常情况花费更长的时间 最好的选择是在列上使用索引,您将永远不会遇到这个问题