是否有一种简单的方法可以在一段时间内(例如几个小时)对我的MongoDB服务器识别N(例如10个)最常见的查询?
有一种相当简单的方法可以找到慢速查询。还有几种方法可以查找当前正在运行的查询,但我有兴趣能够查看最常见的查询。
答案 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 过滤。