1

我启用了分析模式 2(所有事件)。我的想法是编写一个脚本,它将遍历所有查询并执行解释计划,并查看是否有任何查询不使用索引。但是这是不可能的,因为我在 system.profile 中看不到任何排序信息。为什么这样?

谢谢

更新:

想象一下,您有一个用户集合。你已经在这个集合上创建了一个索引:user(name, createdAt)。现在我想找出一些按时间排序的用户。在 system.profile 中,查询的第二部分(排序/分页)不会被保存,但是了解使用了哪些排序操作非常重要,因为它会影响性能和索引选择。所以我的目的是创建一个脚本,它将遍历 system.profile 中的所有语句并执行解释计划并查看是否使用索引。如果没有,我可以在执行集成测试时自动捕获所有新的/不可靠的查询。

4

3 回答 3

0

您可以使用聚合框架对例如最慢的操作进行排序 db.system.profile.aggregate( { $sort : { millis : -1 }})

于 2013-01-29T16:36:57.403 回答
0

对不起大家。我找到了那个问题的答案。实际上 mongo 有它。它在查询元素中称为 orderby。我的错 :-)

于 2013-01-29T21:01:01.277 回答
0

为什么 10gen 选择不在 system.profile 中包含排序信息?

我建议如果您对该功能感兴趣,请在此处提出请求。(我找不到此功能的现有建议)。您可能会获得更多关于为什么它没有被包括在内的详细信息。

我可以看到它有时是多么有价值,尽管建议您比较nscanned 与 nreturned 以了解是否正在使用索引(更重要的是,确保扫描尽可能少的文档)。

因此,虽然并不完美,但它为您提供了一种快速评估性能和检测索引使用情况的方法。

于 2013-01-29T01:26:41.353 回答