有什么办法可以弄清所有索引都缓存到RAM了吗?我想知道各个索引与页面相关的统计信息(点击数和未命中数)
有什么办法可以弄清所有索引都缓存到RAM了吗?我想知道各个索引与页面相关的统计信息(点击数和未命中数)
Answers:
您可以从db.serverStatus()
命令中获取整体(实例范围内)的匹配信息,尤其是:
http://docs.mongodb.org/manual/reference/command/serverStatus/#serverStatus.indexCounters.hits http://docs.mongodb.org/manual/reference/command/serverStatus/#serverStatus.indexCounters.misses
这些数字是在整个过程的生命周期中可见的总数,因此,如果您想获得一个比率或查看一段时间内的趋势,则需要定期记录它们并相应地比较这些值。值得庆幸的是,如果您安装了MMS Monitoring,它将为您完成并绘制结果图表。
但是,目前没有按索引的统计信息。可以在此处找到相关功能请求,以进行跟踪和投票:
https://jira.mongodb.org/browse/SERVER-2227
更新:2016年1月
上面引用的统计信息已从服务器状态命令的输出中删除,因此不再可用。但是,引用的功能请求现已完成,并且在3.2版中以$indexStats
聚合运算符的形式提供(链接的文档还包含示例输出)。为了完整起见,这是我放在一起的一个示例:
在进行任何查询之前,我只有2个索引,默认索引_id
和indexme
,都具有0个操作:
> db.foo.aggregate( [ { $indexStats: { } } ] ).pretty()
{
"name" : "indexme_1",
"key" : {
"indexme" : 1
},
"host" : "localhost:27017",
"accesses" : {
"ops" : NumberLong(0),
"since" : ISODate("2016-01-12T19:03:01.358Z")
}
}
{
"name" : "_id_",
"key" : {
"_id" : 1
},
"host" : "localhost:27017",
"accesses" : {
"ops" : NumberLong(0),
"since" : ISODate("2016-01-12T18:59:24.292Z")
}
}
然后运行一些发现以增加操作indexme
并再次检查:
> db.timecheck.find({indexme: 33})
> db.timecheck.find({indexme: 55})
> db.timecheck.aggregate( [ { $indexStats: { } } ] ).pretty()
{
"name" : "indexme_1",
"key" : {
"indexme" : 1
},
"host" : "localhost:27017",
"accesses" : {
"ops" : NumberLong(2),
"since" : ISODate("2016-01-12T19:03:01.358Z")
}
}
{
"name" : "_id_",
"key" : {
"_id" : 1
},
"host" : "localhost:27017",
"accesses" : {
"ops" : NumberLong(0),
"since" : ISODate("2016-01-12T18:59:24.292Z")
}
}