有什么简单的方法来看看哪些mongodb索引正在使用?

我们已经在我们的一个mongodb集合上积累了大量的索引,如果可能的话删除其中的一些将是一件好事。 然而,很难知道应用程序正在使用哪些索引,哪些(如果有的话)现在已经过时。

有谁知道任何工具/技术来分析哪些索引正在使用?

编辑:Mongo v3.0.5

您可以在个别查询上使用query.explain()来返回该查询的查询计划。 你可以在这里进一步了解。 https://docs.mongodb.com/manual/reference/method/cursor.explain/

其他的事情你可能想看看:

在serverStatus的输出中:

scanned scanAndOrder 

在collStats的输出中:

 totalIndexSize indexSizes 

在dbStats的输出中:

 dbStats.indexes dbStats.indexSize 

不幸的是,MongoDB 3.0没有直接的方法来识别未使用的索引。

通过引入$ indexStats,MongoDB 3.2的确改进了这一点,它显示了索引访问: https ://docs.mongodb.com/manual/reference/operator/aggregation/indexStats/

几点build议:

  • 尝试确定任何可能是前缀的索引,因为这些索引可能是多余的。 请记住,索引的sorting可能很重要

  • 正如Jacob所说,使用解释计划可以帮助识别查询是否正在使用索引。 PlanCache.getPlansByQuery()将通过显示数据库当前为特定查询模式caching哪些查询计划进行扩展: https : //docs.mongodb.com/v3.0/reference/method/PlanCache.getPlansByQuery/#PlanCache。 getPlansByQuery