如何查找 MongoDB 索引统计信息

Vis*_*pak 8 index mongodb

有什么办法可以弄清楚所有索引都缓存到 RAM 中了吗?我想知道各个索引的页面相关统计信息(命中数和未命中数)

Ada*_*m C 9

您可以从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 个索引,默认_idindexme,两者都有 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)