我正在尝试查找聚合查询的执行时间。查询如下所示:
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()的查询是否是测量执行的正确查询。你能帮我看看我将如何衡量执行时间。
答案 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
请在日志中查看查询操作结束。这将是您的执行时间,而不会迭代光标。