我的q_development.users表有超过1,000,000条记录。奇怪的是,我的mongodb在这个集合上记录了一些长时间消耗的项目而没有明确记录查询的内容。 MongoDB甚至不会记录这些查询的ntoreturn
或ntoskip
。这是非常可疑的,因为reslen
都是一样的。日志如下所示
Fri May 25 00:01:00 [conn56429] query q_development.users nscanned:1207786 reslen:20 2390ms
Fri May 25 00:09:09 [conn55528] query q_development.users nscanned:1207799 reslen:20 2623ms
Fri May 25 00:11:11 [conn55529] query q_development.users nscanned:1207800 reslen:20 2660ms
Fri May 25 00:28:56 [conn55586] query q_development.users nscanned:1207823 reslen:20 2777ms
Fri May 25 00:46:45 [conn55529] query q_development.users nscanned:1207850 reslen:20 4218ms
Fri May 25 00:47:46 [conn56169] query q_development.users nscanned:1207851 reslen:20 2392ms
Fri May 25 01:30:49 [conn57141] query q_development.users nscanned:1207901 reslen:20 4289ms
您知道哪些可能的查询可以生成这样的mongodb.log项吗?非常感谢你!
答案 0 :(得分:1)
这只是意味着一些查询花了很长时间 - 第一个查询例如2390ms。任何超过100毫秒(默认情况下)的内容都会被记录下来。在这种情况下,似乎对“用户”的查询需要花费大量时间。 nscanned
显示必须从磁盘查找的文档数。每个人都超过一百万,这可能意味着你正在进行全表扫描 - 即没有索引的查询。启用profiler以确定哪个查询实际导致此无索引的全表扫描。
在这种情况下,因为没有显示查询,所以很可能你没有参数进行查找。