【问题标题】:Nodejs application hangs on heavy requestsNodejs 应用程序因大量请求而挂起
【发布时间】:2017-09-26 08:09:06
【问题描述】:

我正在使用带有 pg-promise 的 Nodejs 快递服务器。我在数据库中有一些查询需要很长时间才能返回结果。对于此类查询,如果查询 pg-promise 查询需要更长的时间并且服务器返回错误,我将超时设置为 3 秒,这会导致承诺失败。但是,问题是如果我发送具有相同(繁重)查询的后续请求,应用程序将挂起并需要时间来开始处理新请求。它不会抛出任何错误,这就是它难以调试的原因。我想知道节点应用程序挂起的原因是什么?

【问题讨论】:

  • 不要在大型​​项目中使用 javascript!!!!
  • @HaykManasyan 这不是一个大项目。这只是对 db 的大查询,它获取许多行
  • 我很怀疑人们可以在没有看到您的代码的情况下帮助您。 node.js 没有理由因为长查询而“挂起”。事实上,我什至不知道“挂”的真正含义。如果您正在执行非常耗时的数据库查询,然后当您尝试执行多个查询时,负载太大,那么问题可能与您的数据库或您如何使用数据库有关,这两者都不是 node.js 。 js问题。您需要重新构建数据以便通过更快的查询来实现目标,或者您需要重新考虑您正在尝试做什么。
  • @NaufalKhalid 您可以使用explain 来定位您的问题。您应该了解您的问题是来自 DB 还是来自 Node.JS。 postgresql.org/docs/9.6/static/using-explain.html
  • 我知道查询很昂贵,因此,我使用 pg promise 设置超时,如果查询时间过长,则返回错误。这是一个示例代码:return db.any("select * from users") .then(x => { return x }) .timeout(3000) .error(err => { return err}) 从逻辑上讲,如果查询时间超过 3 秒,此代码应该返回错误。然而,应用程序需要更多时间来处理查询

标签: node.js postgresql express pg-promise


【解决方案1】:

每当有人一开始就提出查询执行时间过长的问题时,它总是指向对数据库服务开发和实现的基础知识的误解。

这些问题通常源于以下问题:

  • 糟糕的数据库设计,或缺乏必要的性能考虑
  • 错误的查询执行计划,即使用非常低效的查询逻辑
  • 连接池使用不当,即数据库连接问题
  • 以上组合

因此,当您尝试通过简短的问题描述来解决如此庞大的可能问题时,并且没有任何代码示例,您将永远不会得到任何有用的答案。它太宽泛了,需要涵盖太多与编写数据库服务有关的主题。

【讨论】:

  • 我同意你的看法。只是想快速破解一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多