2012-05-26 4 views
0

내 q_development.users 테이블에 1,000,000 개가 넘는 레코드가 있습니다. 내 mongodb가 쿼리의 내용을 명시 적으로 로깅하지 않고이 컬렉션에서 오랜 시간이 소요되는 항목을 기록하는 것은 이상한 일입니다. MongoDB도 이러한 쿼리 중 ntoreturn 또는 ntoskip을 기록하지 않습니다. 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와 같이 오래 걸리는 것입니다. 100ms 이상 (기본값) 걸리는 항목은 모두 기록됩니다. 이 경우 "사용자"에 대한 쿼리에 많은 시간이 걸리는 것으로 보입니다. nscanned은 디스크에서 조회해야하는 문서의 수를 나타냅니다. 각각에 대해 백만 명이 넘습니다. 즉, 전체 테이블 스캔 (인덱스가없는 쿼리)을 수행하고 있다는 것을 의미합니다. profiler을 사용하면이 색인화되지 않은 전체 테이블 검색의 원인이되는 쿼리를 파악할 수 있습니다.

이 경우 쿼리가 표시되지 않으므로 인수없이 find를 수행 할 가능성이 큽니다.

+0

고마워,하지만, 모든 프로필 옵션을 최대로 설정했는데 여전히이 쿼리의 실제 쿼리 문자열을 기록하지 않습니다. 로거가 모든 쿼리를 기록하는 방법? –

+0

당신은이 컬렉션에서 어떤 기준도없이 단순히 찾기 만하는 것처럼 들릴 수 있습니다. 이를 반영하여 답변을 업데이트했습니다. – Derick

+0

'--verbose'를'--vv' (또는'--vvvvv'까지)로 바꿨고 실제 쿼리를 보여주었습니다. 나는 대답을 편집 할 것이다. 어쨌든 고마워요 :) –

관련 문제