2016-11-23 3 views
2

Я создаю json API, используя express (ну, может быть, он переместится на koa). Я храню свои данные в базе данных PostgreSQL, и я использую pg-promise для извлечения данных из него (async/await через babel).DB Профилирование запросов в 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 потребляет. (Не обещание времени живет от построения до разрешения, что может быть достигнуто за счет двух временных меток, но фактическое время, затрачиваемое сервером БД на обработку запроса).

Возможно ли это? Если да, то как?

+0

Что вы ищете в PostgreSQL, называется [EXPLAIN] (https://www.postgresql.org/docs/9.5/static/sql-explain.html), который вам нужно выполнить напрямую, лучше всего через 'pgAdmin 'UI;) –

ответ

1

Как вы сказали сами, есть два способа профилирования времени выполнения в вашем случае:

  • время от вас вызова метода pg-promise для получения результата назад
  • времени он принимает для выполнения запроса сервера

первых из них является самым легким сделать с помощью метода result, который решает с Result объектом, обладающим свойством duration.

И второе требует прямого выполнения EXPLAIN, как правило, с помощью инструмента pgAdmin, который поставляется с каждой установкой PostgreSQL, или вы можете использовать терминал psql.

+0

Благодарим за обращение к методу' result'. Как я мог пропустить это? Недостатком является несовместимость с такими методами, как 'one' и' oneOrNone', но это терпимо. Также свойство 'duration' кажется недокументированным (https://github.com/brianc/node-postgres/wiki/Query#result-object); я надеюсь, что он не исчезнет в будущих выпусках :) –

+1

Эй, спасибо, что принесли такую ​​большую библиотеку человечеству :) –

+1

Свойство 'duration' задокументировано в [API] (http: // vitaly-t .github.io/pg-prom/Database.html # .result): 'разрешается с исходным объектом Result, расширенным с длительностью свойства - длительностью запроса в миллисекундах.';) И нет, я не удаляю его в будущем релизы;) –

Смежные вопросы