一种查找针对MongoDB服务器的最常见查询的方法

时间:2017-12-13 17:32:45

标签: mongodb profiling

是否有一种简单的方法可以在一段时间内(例如几个小时)对我的MongoDB服务器识别N(例如10个)最常见的查询?

有一种相当简单的方法可以找到慢速查询。还有几种方法可以查找当前正在运行的查询,但我有兴趣能够查看最常见的查询。

1 个答案:

答案 0 :(得分:1)

从技术上讲,这是可能的,但您需要启用profiler,这会降低您的申请速度。

db.setProfilingLevel(2)

针对一个特定数据库的所有查询都将被记录并存储在 system.profile 集合中。每个查询都将表示为如下文档:

{
            "op" : "query",
            "ns" : "test.test",
            "command" : {
                    "find" : "test",
                    "filter" : {

                    },
                    "$db" : "test"
            },
            //...
            "ts" : ISODate("2017-12-14T07:09:10.538Z"),
    }

我删除了一些不太重要的属性。由于它是常规的mongodb集合,因此您可以使用聚合框架和$ group命令。例如:

db.system.profile.aggregate(
[
    {
        $match: {
            "op": "query"
        }
    },
    {   
        $group: {
            _id: "$command",
            total: { $sum: 1 }
        }
    },
    {
        $sort: { 
            "total" : -1
        }
    },
    {
        $limit: 10
    }
])

显然,您可以根据需要轻松调整此聚合,例如添加 ts 过滤。