2016-11-23 71 views
2

我正在使用express构建一个json API(可能会转到koa)。我将数据存储在PostgreSQL数据库中,并使用pg-promise从中取数据(通过babel的async/await)。Node.js中的数据库查询分析

我对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消耗。 (不是承诺从构建到解决的时间,这可以通过获取两个时间戳来实现,而是由DB服务器用来处理查询的实际时间)。

这可以实现吗?如果是这样,怎么样?

+0

你在PostgreSQL中找到的是你需要直接执行的[EXPLAIN](https://www.postgresql.org/docs/9.5/static/sql-explain.html),最好是通过'pgAdmin 'UI;) –

回答

1

正如你提到这个问题,有两种方法来分析执行时间,你的情况:

  • 从你打电话的pg-promise的方法来获得结果返回
  • 时所花费的时间由服务器

第一种是最容易做通过使用方法result,其与具有属性durationResult对象解析来执行查询。

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

+0

感谢您指向'result'方法。我怎么会想念它?缺点是与'one'和'oneOrNone'等方法不兼容,但它是可以忍受的。也''持续时间'财产似乎没有记录(https://github.com/brianc/node-postgres/wiki/Query#result-object);我希望它不会在未来的版本中消失:) –

+1

嘿,谢谢你为人类带来这么好的图书馆:) –

+1

属性'持续时间'记录在[API](http:// vitaly-t .github.io/pg-promise/Database.html#.result):'用原始结果对象解决,扩展了属性持续时间 - 以毫秒为单位的查询持续时间。“;)否,我不会在将来删除它发布;) –