我有一个模糊的内存,如果查询使用未编入索引的字段,MongoDB将向其日志输出一条消息,但是我无法在本地重现(使用一个公认的小数据集),也没有为它找到任何文档
我想象的东西还是有这样的特征?如果是,是否有人可以链接到文档?
答案 0 :(得分:5)
您需要打开分析以从mongodb获取有意义的日志 - 将分析设置为1就足够了。
然后,您可以使用日志中的任意数量的搜索来查找未编入索引的查询,例如:
grep nscanned /path/to/mongodb.log | grep -v "nscanned:1 " | grep -v "nscanned:0 "
原始推文,我发现了这一点:https://twitter.com/#!/eonwhite/status/21498320559
您可以详细了解日志输出的含义in mongo's docs
如果nscanned远高于nredurned,则数据库正在扫描许多对象以查找目标对象。考虑创建一个索引来改善这一点。
答案 1 :(得分:4)
您可能会想到notablescan
parameter和configuration option。但是,它不是警告或记录功能。相反,它会导致服务器在发出没有有用索引的查询时抛出错误(强制服务器扫描整个集合)。
答案 2 :(得分:3)
也许你指的是“解释”功能?
请参阅此链接:http://www.mongodb.org/display/DOCS/Explain
基本上,您可以告诉Mongo在运行查询时为您提供额外的数据,该数据包括有关是否使用索引的详细信息。
答案 3 :(得分:0)
AFAIK在日志中或其他任何地方都没有直接的迹象。间接缺少索引可能会导致这些日志条目:
warning: ClientCursor::yield can't unlock b/c of recursive lock
- 通常发生在findAndModify
。query db.coll nscanned:656204 reslen:20 5305ms
- 使用大量扫描文档进行查询速度慢。如果相应的查询执行得足够快,上述任何一项都不会显示。