2014-10-01 136 views
1

我在共享主機平臺上,想限制我的應用程序中的查詢,這樣如果總執行時間在可變時間段超過一定量,那麼我可以使應用程序冷靜下來,然後再恢復。NodeJS MySQL:度量查詢執行時間

要做到這一點,我想知道我的每個查詢需要多長時間,並在應用程序中進行管理,而不是通過對外進行分析。

我在PHP中查看過在查詢前後記錄時間的例子(even phpMyAdmin does this),但是這在NodeJS或異步運行查詢的任何東西中都不起作用。

所以問題是:我將如何去得到在NodeJS查詢的實際執行時間?

僅供參考我使用這個模塊來查詢MySQL數據庫:https://github.com/felixge/node-mysql/

回答

4

一種選擇就是在查詢後的查詢和時間戳之前,時間戳和檢查這樣的區別:

// get a timestamp before running the query 
var pre_query = new Date().getTime(); 
// run the job 
connection.query(query, function(err, rows, fields) { 
    // get a timestamp after running the query 
    var post_query = new Date().getTime(); 
    // calculate the duration in seconds 
    var duration = (post_query - pre_query)/1000; 
}); 
+2

的這種方法的問題在於,只要調用'connection.query'函數,查詢就不一定執行,所以'duration'包含NodeJS在執行查詢之前花費的時間,直到查詢被實際執行爲止 – 2015-01-24 18:34:08

+1

的確如此。但是,如果你真的想更密切地監控它,你可以修改node-mysql的源代碼。只需進入node_modules文件夾並編輯觸發查詢的文件部分並等待它返回。它可能在這個文件中:https://github.com/felixge/node-mysql/blob/master/lib/protocol/sequences/Query.js 這仍然包括nodejs和mysql之間的延遲,但它會與大多數小響應集的查詢執行時間相比,可以忽略不計。 – 2015-01-25 11:06:07