Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NodeJS-MySQL:测量查询执行时间_Mysql_Node.js_Optimization_Execution Time_Node Mysql - Fatal编程技术网

NodeJS-MySQL:测量查询执行时间

NodeJS-MySQL:测量查询执行时间,mysql,node.js,optimization,execution-time,node-mysql,Mysql,Node.js,Optimization,Execution Time,Node Mysql,我在一个共享的托管平台上,希望限制我的应用程序中的查询,这样,如果在一个可变的时间段内,总执行时间超过一定数量,那么我可以让应用程序冷却下来,然后稍后继续 要做到这一点,我想知道我的每个查询实时需要多长时间,并在应用程序中管理它,而不是通过外部分析它 我在PHP中看到过一些例子,其中时间记录在查询()之前和之后,但这在NodeJS或异步运行查询的任何东西中都不起作用 所以问题是:我将如何在NodeJS中获取查询的实际执行时间 作为参考,我使用这个模块来查询MySQL数据库:一个选项就是在查询之前

我在一个共享的托管平台上,希望限制我的应用程序中的查询,这样,如果在一个可变的时间段内,总执行时间超过一定数量,那么我可以让应用程序冷却下来,然后稍后继续

要做到这一点,我想知道我的每个查询实时需要多长时间,并在应用程序中管理它,而不是通过外部分析它

我在PHP中看到过一些例子,其中时间记录在查询()之前和之后,但这在NodeJS或异步运行查询的任何东西中都不起作用

所以问题是:我将如何在NodeJS中获取查询的实际执行时间


作为参考,我使用这个模块来查询MySQL数据库:

一个选项就是在查询之前加上时间戳,在查询之后加上时间戳,并检查如下差异:

// 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;
});

如果您使用的是RESTAPI,那么就可以使用postman。在postman中运行查询,然后查找时间:如所附图像中所示,位于部分的右中部。

console.Time('100-elements');
对于(设i=0;i<100;i++){}
控制台。时间结束(“100个元素”);
//打印100个元素:225.438ms
标签必须是唯一的,并且与开始和结束时间相同

在nodejs中工作良好


这里是

这种方法的问题是,查询不一定在调用
connection.query
函数时立即执行,因此
持续时间
包括节点在实际执行查询之前所花费的时间。但是,如果您真的想更密切地监视它,您可以修改节点mysql的源代码。只需移动到node_modules文件夹,编辑触发查询的文件部分,然后等待查询返回。它可能在这个文件中:这仍然包括nodejs和mysql之间的延迟,但是与小响应集的大多数查询执行时间相比,它可以忽略不计。你不能使用
console.timeLog()
@SrinathKamath是的,你确实可以。它是在节点v10.7.0中添加的。它是在我写这个答案4年后发布的。我也不确定timeLog在这里是否有用,如果你需要对持续时间做一些计算,因为它只打印出来。性能API可能很有用,但也带来了自身的复杂性。
console.time('100-elements');
for (let i = 0; i < 100; i++) {}
console.timeEnd('100-elements');
// prints 100-elements: 225.438ms