【问题标题】:DB Query profiling in Node.jsNode.js 中的数据库查询分析
【发布时间】:2017-04-06 21:24:38
【问题描述】:

我正在使用express 构建一个json API(好吧,也许会移至koa)。我将数据存储在 PostgreSQL 数据库中,并使用 pg-promise 从中获取数据(async/await via babel)。

我对 node.js 完全陌生,在那个环境中我找不到任何关于性能测量的信息。

具体来说:

module.exports.get_hierarchy = async function () {
    const rows = await postgres.any('SELECT id, parent, title, permission FROM heading');

    var result = [];
    // some black magic goes here...

    return result;
}

我想知道(以编程方式如果可能SELECT 消耗了多少时间。 (不是promise从构建到解析的时间,可以通过两个时间戳来实现,而是DB服务器处理查询所消耗的实际时间。

这可以实现吗?如果有,怎么做?

【问题讨论】:

  • 您在 PostgreSQL 中查找的内容称为 EXPLAIN,您需要直接执行,最好是通过 pgAdmin UI ;)

标签: node.js postgresql asynchronous profiling pg-promise


【解决方案1】:

正如您自己提到的,有两种方法可以在您的案例中分析执行时间:

  • 从调用pg-promise 的方法到返回结果的时间
  • 服务器执行查询所需的时间

第一个是最容易做到的,使用方法result,它使用具有duration属性的Result对象解析。

第二个需要直接执行EXPLAIN,通常通过每个PostgreSQL安装附带的pgAdmin工具,或者你可以使用psql终端。

【讨论】:

  • 感谢您指向result 方法。我怎么能错过呢?缺点是与oneoneOrNone 等方法不兼容,但可以忍受。 duration 属性似乎也没有记录(github.com/brianc/node-postgres/wiki/Query#result-object);我希望它不会在未来的版本中消失:)
  • 嘿,谢谢你为人类带来了这么棒的图书馆:)
  • 属性duration 记录在API: resolves with the original Result object, extended with property duration - query duration in milliseconds. ;) 不,我不会在未来的版本中删除它;)
猜你喜欢
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多