From 9b82911aa8635aa0b9150d357f25a6b1e2f7f388 Mon Sep 17 00:00:00 2001 From: GuillaumeRenouvin Date: Wed, 8 Aug 2018 16:17:22 +0200 Subject: [PATCH 1/2] [MO] How to log your queries duration with Knex --- SUMMARY.MD | 1 + .../log-queries-durations-with-knex.mo.md | 60 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 performance/backend/log-queries-durations-with-knex.mo.md diff --git a/SUMMARY.MD b/SUMMARY.MD index e9d1d08..090dae2 100644 --- a/SUMMARY.MD +++ b/SUMMARY.MD @@ -118,6 +118,7 @@ - [1. Cache your routes using varnish](/performance/backend/cache-routes-using-varnish.mo.md) - [2. Serve images as static files](/performance/backend/serve-images-as-static-files.mo) - [3. Minimize your number of SQL queries](/performance/backend/minimize-number-sql-queries.mo.md) + - [4. Log queries durations with Knex](/performance/backend/log-queries-durations-with-knex.mo.md) - Front - 1. Pure components **-> [To do]** - Have you a mean of keeping the performance under control? diff --git a/performance/backend/log-queries-durations-with-knex.mo.md b/performance/backend/log-queries-durations-with-knex.mo.md new file mode 100644 index 0000000..bed921a --- /dev/null +++ b/performance/backend/log-queries-durations-with-knex.mo.md @@ -0,0 +1,60 @@ +# [MO] How to log your queries durations with Knex (~10) + +## Owner: [Guillaume Renouvin](https://github.com/GuillaumeRenouvin) +## Creation date: August, 1st 2018 +## Update date: August, 1st 2018 + +## Context +- You want to log your database requests durations using Knex query builder + +## Prerequisites +- Have Knex installed + +## Steps + +### Log your queries informations (~5min) +- After your Knex instantiation add listeners on each query, query response and query errors +```javascript +db.on('query', query => { + console.log(query.sql); +}) + .on('query-response', (response, query) => { + console.log(query.sql); + }) + .on('query-error', err => { + console.log(err); + }); +``` +> Check: Launch your server, call an API route and you should see your queries on the logs + +### Log query duration (~5min) +- Blabla + ```javascript +import now from 'performance-now'; + +const durations = {}; + +knex + .on('query', query => { + times[uid] = { + query, + startTime: now(), + }; + }) + .on('query-response', (response, query) => { + times[query.__knexQueryUid].endTime = now(); + + console.log(query.sql, ',', `[${query.bindings ? query.bindings.join(',') : ''}]`); + console.log( + `Time: ${( + times[query.__knexQueryUid].endTime - times[query.__knexQueryUid].startTime + ).toFixed(3)} ms\n` + ); + delete times[uid]; + }); + + ``` +> Check: Launch your server, call an API route and you should see your queries durations on the logs + +### Sources +- [Timing Your Queries in Knex.js for Node.js](https://spin.atomicobject.com/2017/03/27/timing-queries-knexjs-nodejs/) From 223801d0da406d05488c741b30f3c2c3d75e6930 Mon Sep 17 00:00:00 2001 From: GuillaumeRenouvin Date: Fri, 17 Aug 2018 10:26:45 +0200 Subject: [PATCH 2/2] fix scripts and remove blabla --- .../backend/log-queries-durations-with-knex.mo.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/performance/backend/log-queries-durations-with-knex.mo.md b/performance/backend/log-queries-durations-with-knex.mo.md index bed921a..733d9a5 100644 --- a/performance/backend/log-queries-durations-with-knex.mo.md +++ b/performance/backend/log-queries-durations-with-knex.mo.md @@ -16,7 +16,7 @@ - After your Knex instantiation add listeners on each query, query response and query errors ```javascript db.on('query', query => { - console.log(query.sql); + console.log(query.sql); }) .on('query-response', (response, query) => { console.log(query.sql); @@ -28,29 +28,29 @@ db.on('query', query => { > Check: Launch your server, call an API route and you should see your queries on the logs ### Log query duration (~5min) -- Blabla - ```javascript + +```javascript import now from 'performance-now'; const durations = {}; knex .on('query', query => { - times[uid] = { + durations[query.__knexQueryUid] = { query, startTime: now(), }; }) .on('query-response', (response, query) => { - times[query.__knexQueryUid].endTime = now(); + durations[query.__knexQueryUid].endTime = now(); console.log(query.sql, ',', `[${query.bindings ? query.bindings.join(',') : ''}]`); console.log( `Time: ${( - times[query.__knexQueryUid].endTime - times[query.__knexQueryUid].startTime + durations[query.__knexQueryUid].endTime - durations[query.__knexQueryUid].startTime ).toFixed(3)} ms\n` ); - delete times[uid]; + delete durations[uid]; }); ```