【问题标题】:NodeJS MySQL: measure query execution timeNodeJS MySQL:测量查询执行时间
【发布时间】:2014-11-26 06:42:46
【问题描述】:

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

为此,我想实时了解我的每个查询需要多长时间,并在应用内进行管理,而不是通过外部分析。

我在 PHP 中看到了在查询之前和之后记录时间的示例 (even phpMyAdmin does this),但这在 NodeJS 或任何异步运行查询的东西中都不起作用。

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

作为参考,我使用这个模块来查询 MySQL 数据库:https://github.com/felixge/node-mysql/

【问题讨论】:

    标签: mysql node.js optimization execution-time node-mysql


    【解决方案1】:

    一种选择是在查询之前加上时间戳,在查询之后加上时间戳,然后检查差异,如下所示:

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

    【讨论】:

    • 这种方法的问题在于,查询不一定会在您调用connection.query 函数后立即执行,因此duration 包含了NodeJS 在执行其他操作之前花费的时间,直到查询完成。实际执行
    • 确实如此。但是,如果您真的想更密切地监控它,您可以修改 node-mysql 的源代码。只需移动到 node_modules 文件夹并编辑触发查询的文件部分并等待它返回。它可能在这个文件中:github.com/felixge/node-mysql/blob/master/lib/protocol/… 这仍然包括 nodejs 和 mysql 之间的延迟,但与大多数小型响应集的查询执行时间相比,它可以忽略不计。
    • 你不能用console.timeLog()
    • @SrinathKamath 是的,你确实可以。它是在 Node v10.7.0 中添加的。在我写完这个答案 4 年后发布
    • 另外,如果您需要对持续时间进行一些计算,我不确定 timeLog 在这里是否有用,因为它只会打印出来。性能 API 可能很有用,但也带来了它自己的复杂性。
    【解决方案2】:

    如果您使用的是rest api,那么您可以使用邮递员。在邮递员中运行查询,然后在部分的中间右侧查找时间:如附图所示。

    【讨论】:

      【解决方案3】:
      console.time('100-elements');
      for (let i = 0; i < 100; i++) {}
      console.timeEnd('100-elements');
      // prints 100-elements: 225.438ms
      

      标签必须是唯一的,并且与开始和结束时间相同

      在 nodejs 中运行良好。

      这里是documentation on nodejs

      【讨论】:

        猜你喜欢
        • 2013-09-01
        • 1970-01-01
        • 2011-10-08
        • 2017-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-11
        • 2020-11-15
        相关资源
        最近更新 更多