2012-05-26 42 views
0

我的q_development.users表有超過1,000,000條記錄。奇怪的是,我的mongodb在這個集合上記錄了一些耗時的項目,而沒有明確記錄查詢的內容。 MongoDB甚至不記錄這些查詢的ntoreturnntoskip。這是非常可疑的,因爲reslen都是一樣的。日誌如下所示可疑的mongodb.log項目

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項嗎?非常感謝你!

+1

看起來像全掃描。誰知道你在那裏比你做得更好? –

回答

1

這只是說,一些查詢花了很長時間 - 第一個例如2390ms。任何超過100毫秒(默認情況下)都會被記錄下來。在這種情況下,對「用戶」的查詢似乎需要很長時間。 nscanned顯示必須從磁盤查找多少文檔。它們每個都超過一百萬,這可能意味着你正在進行全表掃描 - 即沒有索引的查詢。啓用profiler以確定哪個查詢實際上會導致此無索引全表掃描。

在這種情況下,因爲沒有查詢顯示,它很可能你做了一個沒有參數的查找。

+0

謝謝,但事實是,我已將配置文件選項設置爲最大值,並且它仍不會記錄此查詢的實際查詢字符串。如何讓記錄器記錄所有查詢? –

+0

聽起來像你可能只是做一個沒有任何標準的找到然後在這個集合。我已經更新了我的答案以反映這一點。 – Derick

+0

我將'--verbose'改成了'--vv'(或者更多地改爲'--vvvvv),並且顯示了實際的查詢。我會編輯答案。無論如何感謝:) –