mongodb:如何查看aggregate命令的执行时间?

jjjwad0x  于 12个月前  发布在  Go
关注(0)|答案(6)|浏览(148)

我在mongo shell中执行followmongodb命令

db.coll.aggregate(...)

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

svmlkihl

svmlkihl1#

var before = new Date()
#aggregation query
var after = new Date()
execution_mills = after - before
qncylg1j

qncylg1j2#

您可以将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(),该方法没有给予相关结果

ljo96ir5

ljo96ir53#

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

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

lg40wkob4#

或者你可以安装优秀的mongo-hacker,它会自动计算每个查询的时间,pretty()会对它进行处理,对输出进行着色,对键进行排序,等等:

oyt4ldly

oyt4ldly5#

我会写一个答案来更好地解释这一点。
基本上,聚合框架还没有explain()功能:https://jira.mongodb.org/browse/SERVER-4504
然而,有一种方法可以衡量客户端,但并非没有其缺点:

  • 您不是在测量数据库
  • 您正在测量应用程序
  • 有太多的未知数之间的部分,以能够得到一个准确的阅读,iidoiee。你不能说MongoDB服务器制定文档结果,序列化,通过有线发送,应用程序反序列化,然后存储到散列中,允许您从总数中减去该总和以获得聚合基准。

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

mw3dktmi

mw3dktmi6#

是的,现在你可以在mongosh的聚合中使用explain()了。为此,您只需将以下内容添加到命令-> db.yourCollectionName.explain("executionStats").aggregate(<yourAggregationStages>)
然后您可以看到响应也包含所提供的聚合的执行统计信息。这是你会看到的格式:
executionStats: { executionSuccess: true, executionTimeMillis: '5.833', planningTimeMillis: '0.461', executionStages: { stage: 'SUBSCAN', nReturned: '1', executionTimeMillisEstimate: '5.124', ...

相关问题