30

我在 mongo shell 中执行以下 mongodb 命令

db.coll.aggregate(...)

我看到了结果列表。但是可以看到查询执行时间吗?聚合查询的解释方法是否有任何等效功能。

4

5 回答 5

36
var before = new Date()
#aggregation query
var after = new Date()
execution_mills = after - before
于 2012-12-24T13:47:56.230 回答
15

您可以向文件中添加一个time函数.mongorc.js(在您的主目录中):

function time(command) {
    const t1 = new Date();
    const result = command();
    const t2 = new Date();
    print("time: " + (t2 - t1) + "ms");
    return result; 
}

然后你可以像这样使用它:

time(() => db.coll.aggregate(...))

警告

这种方法没有给出相关的结果db.collection.find()

于 2016-12-09T10:16:50.663 回答
12

我看到在 mongodb 中可以使用这两个命令:

  • db.setProfilingLevel(2)

  • 因此查询后您可以使用 db.system.profile.find() 查看查询执行时间和其他

于 2012-12-29T18:05:17.860 回答
9

或者您可以安装出色的mongo-hacker,它会自动为每个查询计时、执行查询、pretty()对输出进行着色、对键进行排序等等:

在此处输入图像描述

于 2014-04-29T09:05:46.123 回答
8

我会写一个答案来更好地解释这一点。

基本上,聚合框架还没有 explain() 功能:https ://jira.mongodb.org/browse/SERVER-4504

然而,有一种方法可以衡量客户端,但并非没有缺点:

  • 您没有测量数据库
  • 您正在测量应用程序
  • 关于中间部分的未知数太多,无法获得准确的读数,即您不能说 MongoDB 服务器制定文档结果、序列化、通过网络发送、de 花费了 0.04 毫秒- 由应用程序序列化,然后存储到哈希中,允许您从总数中减去该总和以获得聚合基准。

但是话虽如此,您可以通过在与mongos/相同的服务器上的 MongoDB 控制台中执行此操作来获得稍微准确的结果mongod。这将在中间创建很少的内容,仍然太多但足以获得您可以大致信任的读数。因此,您可以在该位置使用@Zagorulkin 的答案。

于 2012-12-24T14:20:08.807 回答