如何调试我的mongodb索引?

时间:2014-05-21 18:09:00

标签: mongodb indexing

我的搜索在制作时需要超过80秒,但在我的本地只有一秒(数据几乎相同)。我不知道接下来我会采取什么步骤。

查询如下:

@params = {search_field: 'kamil'}
User.only('username', 'email', 'name', 'role', 'utm_email').or({:"email" => /#{@params[:search_field]}/i},
                   {:"username" => /#{@params[:search_field]}/i},
                   {:"name" => /#{@params[:search_field]}/i}).explain()

我对dev()的开发输出:

https://gist.github.com/kamilski81/827f9b363b0392cc87d9

我的生产输出explain():

https://gist.github.com/kamilski81/c0b07b838ddfbdb97c61

我不确定从哪里拿它,因为输出看起来和我非常相似。 Dev正在运行mongodb-2.4.9并且正在运行mongodb-2.4.10

1 个答案:

答案 0 :(得分:1)

您可以使用探查器。它将创建一个集合,其中包含高于阈值(默认为100毫秒)的每个操作的文档。

您应该使用shell打开它,并将阈值设置为大约60秒:

db.setProfilingLevel(1,60000)

执行操作并在集合中查找相关文档,您可以看到正在使用的索引,等待锁的时间,MongoDB扫描的文档数等等。

有关分析器here

的更多信息