2016-11-23 5 views
2

expressを使用してjson APIを構築しています(おそらくkoaに移動します)。私はPostgreSQLデータベースに自分のデータを保存していますが、pg-promiseを使ってデータを取得しています(async/await via babel)。Node.jsのDBクエリープロファイリング

私は全く新しい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消費を知りたいです。 (2つのタイムスタンプを取ることによって達成できるが、DBサーバーがクエリを処理するために実際に費やす時間は、構築から解決までの時間の約束ではない)。

これを達成できますか?もしそうなら、どうですか?

+0

PostgreSQLで探しているものは、[EXPLAIN](https://www.postgresql.org/docs/9.5/static/sql-explain.html)と呼ばれ、直接実行する必要があります。最も適切なものは 'pgAdmin 'UI;) –

答えて

1

あなたはそれを自分で述べたように、あなたのケースで実行時間をプロファイリングするには2つの方法があります:

  • はあなたがpg-promiseのメソッドを呼び出してから、結果を得るまでの時間バック
  • にかかる時間サーバー

最初の1でクエリを実行するためには、プロパティdurationを持ってResultオブジェクトを解決する方法resultを、使用して行うのが最も簡単です。

EXPLAINを直接実行する必要があります。通常は、PostgreSQLのすべてのインストールに付属するpgAdminツールを使用するか、psql terminalを使用できます。

+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-promise/Database.html#.result): 'プロパティの継続時間で拡張された元のResultオブジェクトで解決する - ミリ秒単位のクエリの持続時間;;)そして、いいえ、私は将来それを削除しませんリリース;) –