MongoDB聚合查询的执行时间

时间:2016-03-24 01:01:38

标签: mongodb profiling database

我正在尝试查找聚合查询的执行时间。查询如下所示:

 db.table.aggregate([{$sort: {count:-1}}]);

它通过count desc对100K文档进行排序。命令行没有显示所有记录,所以我做了以下代码:

 db.table.aggregate([{$sort: {count:-1}}]).toArray();

我做过db.setProfilingLevel(2);

当我运行第一个查询并执行:

 db.system.profile.find((),{millis:1});
 I get millis : 18

当我运行第二个查询并从个人资料

中查找时间时
 I get millis:18 , millis:87 , millis: 81 ... millis:75, millis:35. I get 12 different execution times.

我想知道我是否想要正确地测量聚合的执行时间,我通过count desc命令整个集合。什么是正确的方法。带有.toArray()的查询是否是测量执行的正确查询。你能帮我看看我将如何衡量执行时间。

1 个答案:

答案 0 :(得分:0)

尝试将查询日志级别更改为1.这样可以减少大量混乱。现在执行您的聚合查询,并在日志文件中针对您的查询查找protocol:op_command xxxms

在我的情况下,我正在执行

var cursor = db.doc.aggregate([{$sort:{_id:-1}},{$group:{_id:null, count:{$sum:1}}}]);

此查询返回游标,其日志条目显示为

2016-03-24T00:00:52.590-0400 I COMMAND  [conn7] command test.doc command:
aggregate { aggregate: "doc", pipeline: [ { $sort: { _id: -1.0 } },
{ $group: { _id: null, count: { $sum: 1.0 } } } ], cursor: {} }
keyUpdates:0 writeConflicts:0 numYields:5431 reslen:127 locks:{ 
Global: { acquireCount: { r: 10934 } }, Database: { acquireCount: 
{ r: 5467 } }, Collection: { acquireCount: { r: 5467 } } } protocol:op_command 1497ms

请在日志中查看查询操作结束。这将是您的执行时间,而不会迭代光标。