MongoDB警告查询未使用索引

4

我模糊地记得,如果一个查询使用了未索引的字段,MongoDB将在其日志中输出一条消息,但是我无法在本地重现这个问题(尽管数据集很小),也没有找到任何相关文档。

我是错觉还是确实有这样的功能?如果是,有人能提供文档链接吗?

4个回答

5

您需要开启性能分析,才能从MongoDB中获得有意义的日志 - 将性能分析设置为1即可。

然后,您可以使用任何搜索方式在日志中查找未索引查询,例如:

grep nscanned /path/to/mongodb.log | grep -v "nscanned:1 " | grep -v "nscanned:0 "

我在下面的原始推文中发现了这个信息:https://twitter.com/#!/eonwhite/status/21498320559

你可以在mongo的文档中了解更多关于日志输出意义的内容。

如果nscanned比nreturned高得多,那么数据库正在扫描许多对象以查找目标对象。考虑创建索引来改善此问题。


1
除此之外,请查看http://www.mongodb.org/display/DOCS/Database+Profiler#DatabaseProfiler-ViewingtheData - 它解释了您可以在分析器中查看的各种数据。 --slowms选项可用于降低查询被认为是缓慢的阈值,以让您查看更多未使用索引的操作。 - Adam Comerford

4
您可能会想到notablescan 参数配置选项。但是,它不是一个警告或日志记录功能。相反,它会导致服务器在进行没有有用索引的查询(强制服务器扫描整个集合)时抛出错误。

3
也许你指的是“解释”功能? 请查看这个链接:http://www.mongodb.org/display/DOCS/Explain 基本上,你可以告诉Mongo在运行查询时提供额外的数据,包括有关是否使用了索引的详细信息。

0

据我所知,在日志或其他任何地方都没有直接的迹象。间接缺失索引可能会导致这些日志条目:

  • warning: ClientCursor::yield can't unlock b/c of recursive lock - 通常发生在 findAndModify
  • query db.coll nscanned:656204 reslen:20 5305ms - 大量扫描文档的慢查询。

如果相应的查询足够快,则以上两者都不会出现。


"5305毫秒" 对我来说看起来是一个缓慢/未索引的查询的明显迹象 =) - AD7six

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接