【问题标题】:Any easy way to tell if mongodb indexes are still being used or not?有什么简单的方法可以判断 mongodb 索引是否仍在使用?
【发布时间】:2012-09-03 13:21:28
【问题描述】:

随着我项目的代码不断发展,新的索引正在到位,我确信一些旧的索引不再需要。但是,在我删除它们以查看是否有任何速度变慢之前,我希望是否有更编程或分析的方式来确定是否正在使用索引。

我在 system.indexes 集合中看不到任何内容,但理想情况下,某处有一些关于索引访问的统计信息!是这样吗?

【问题讨论】:

  • 没有每个索引使用信息的直接指标(如 MongoDB 2.2.0)。有几个与 MongoDB 问题队列中的跟踪票相关的指标相关的建议:SERVER-5828

标签: mongodb indexing


【解决方案1】:

运行db.collection.find(...) 查询,并在末尾添加.explain()。这是查看查询运行情况的最有用的方法:http://www.mongodb.org/display/DOCS/Explain

您还可以打开分析,分析日志条目会为您提供每个分析查询的索引使用情况。不过,目前还没有任何汇总统计数据。特别是,它不会给你哪些索引没有被使用,只有正在使用的索引(对于每个查询)。 (编辑:我一定一直在想象——你必须从探查器获取查询,然后对其运行解释。手动有点痛苦。)http://www.mongodb.org/display/DOCS/Database+Profiler

更新: 刚从 mongolab 看到这个;看起来像一个有趣的新项目:http://blog.mongolab.com/2012/06/introducing-dex-the-index-bot/

更新: 我创建了一个脚本来通过探查器检查未使用的索引: https://github.com/wfreeman/indexalizer

【讨论】:

  • Dex 看起来很酷,但仍然没有让我知道哪些索引没有使用。不过要检查一下!所以听起来我应该先分析一段时间,然后看看哪些索引从未出现过。
  • 是的,分析可能是您最好的选择。事实上,我考虑过编写一个工具来自动完成这项工作——也许我应该再次打破它。
  • 好吧,我在一个脚本上花了几个小时……似乎在我相当简单的系统上工作。如果有帮助,请告诉我。
  • 写剧本真棒!我还注意到您输出的查询没有使用索引——整洁!不幸的是,explain.cursor 的脚本错误没有属性(shell):40
  • 嗯,我做了一个额外的检查以防止解释不返回游标。看看现在能不能用?
【解决方案2】:

是的,同意其他答案,使用 explain() 来执行查询应该会给我们信息,但是对于最新版本,我们可以尝试类似:

db.collection.aggregate([ { $indexStats: { } } ])

请查看以下链接以获取更多信息:

How do I check if an index is being used

https://docs.mongodb.com/manual/reference/operator/aggregation/indexStats/#pipe._S_indexStats

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多