有什么办法可以弄清楚所有索引都缓存到 RAM 中了吗?我想知道各个索引的页面相关统计信息(命中数和未命中数)
您可以从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")
}
}
Run Code Online (Sandbox Code Playgroud)
然后运行几个发现来启动操作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")
}
}
Run Code Online (Sandbox Code Playgroud)