Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ / / / /

느린 쿼리 설명

explain() 메서드는 MongoDB 지정된 쿼리 계획하고 실행하는 방법에 대한 정보를 제공합니다. 이 정보는 쿼리 성능 문제를 해결하고 최적화를 계획할 때 유용하게 사용할 수 있습니다.

explain() 메서드는 다음 메서드를 사용하는 쿼리에서 사용할 수 있습니다.

  • aggregate()

  • count()

이 작업은 성능 문제를 식별하기 위해 샘플 쿼리에서 explain() 메서드를 실행합니다. 실제로 애플리케이션 에서 실행되는 모든 쿼리 에서 explain() 를 실행 것은 어려울 수 있습니다.

분석 할 쿼리 목록의 범위를 느린 쿼리로만 좁히려면 프로파일러를 사용할 수 있습니다.

프로파일러
설명

Atlas 쿼리 프로파일러

Atlas 고객에게 산점도 차트 제공하여 느린 쿼리와 성능 이상값을 쉽게 식별할 수 있습니다.

쿼리 성능 정보를 컬렉션 에 저장하여 특정 성능 문제가 있는 쿼리를 MongoDB 쿼리 할 수 있습니다.

Atlas 쿼리 프로파일러 와 데이터베이스 프로파일러 모두 서버 성능에 영향을 미치고, 디스크 공간을 사용하며, 암호화됨 필드 주변의 쿼리 메타데이터 노출할 수 있습니다. 활성화하기 전에 성능 및 보안에 미치는 영향을 고려하세요.

1

explain() 메서드를 사용하여 평가하려는 쿼리 실행합니다.

db.movies.explain( "executionStats").find( {
year: { $gt: 1990 },
rated: { $in: [ "PG", "PG-13" ] }
} )
2

explain.executionStats.executionTimeMillis 필드 확인하여 실행 시간을 밀리초 단위로 확인합니다. 여기에는 계획을 실행하는 데 걸리는 시간 외에도 쿼리 계획 빌드 하고 선택하는 데 걸리는 시간을 포함한 총 시간이 표시됩니다.

  • 실행 시간이 애플리케이션 및 데이터베이스 요구 사항에 허용되는 기간 이내인 경우 최적화가 필요하지 않습니다.

  • 실행 시간이 허용 가능한 기간을 초과하는 경우 쿼리 실행에 시간이 오래 걸리는 이유를 파악하기 위해 추가 분석이 필요합니다.

3

쿼리는 여러 단계로 실행할 수 있습니다. 각 단계에서 MongoDB 다음 작업 설정하다 수행하기 위해 이전 단계의 문서를 수집합니다. explain.executionStats.executionStages 는 각 실행 단계에 대한 정보를 제공하며, inputStage 필드의 각 수준은 MongoDB 해당 단계의 문서를 선택한 방법을 보여줍니다.

각 실행 단계에 대해 필드 inputStage.stage 확인합니다.

COLLSCAN
MongoDB 컬렉션 스캔 수행했음을 나타냅니다.
IXSCAN
MongoDB 인덱스 스캔을 수행했음을 나타냅니다.
FETCH

MongoDB 데이터베이스 에서 전체 문서를 가져왔음을 나타냅니다.

쿼리 적은 수의 필드를 반환하고 애플리케이션 에서 이 컬렉션 에 대한 쓰기 (write) 집약적인 작업이 아닌 경우 쿼리 처리할 수 있도록 인덱스를 추가하는 것이 좋습니다. 이를 통해 MongoDB 전체 문서 읽는 대신 인덱스 에서 필드 값을 가져올 수 있습니다.

자세한 내용은 포함된 쿼리 실행을 참조하세요.

PROJECTION
메모리에서 MongoDB 필터링된 반환 필드를 나타냅니다.
SORT
MongoDB 메모리에 있는 문서를 정렬했거나 커버된 인덱스 사용했음을 나타냅니다.

COLLSCAN 단계를 표시하는 필터하다 또는 정렬 작업을 수행하는 쿼리는 인덱스 사용하는 것이 좋습니다.

자세한 내용은 인덱스 생성을 참조하세요.

4

인덱스가 있는 컬렉션에 대한 쿼리는 인덱스를 효과적으로 사용하지 못할 수 있습니다.

검사한 키 수와 검사한 문서 수를 비교합니다. 키 수가 문서 수보다 훨씬 적으면 인덱스가 비효율적임을 나타냅니다.

쿼리 의 총 값을 확인하고 executionStats.totalDocsExaminedexecutionStats.totalKeysExamined보다 큰 값을 표시하지 않는지 확인합니다.

검사한 키 수가 검사한 문서 수보다 훨씬 적은 경우 필드 executionStages keysExamined 의 각 단계를 docsExamined 확인하고 와 를 비교하여 인덱스 사용하지 못한 단계를 확인합니다. 그런 다음 해당단계에서 쿼리 수용할 수 있는 인덱스 만듭니다.

5

필터를 사용하여 결과를 지정하는 쿼리에는 문제가 있을 수 있습니다. 비효율적인 필터하다 식별하려면 executionStats.totalDocsExamined 필드 의 값을 executionStats.nReturned 필드 의 값과 비교합니다.

  • totalDocsExamined 의 값이 nReturned보다 훨씬 크면 인덱스 비효율적임을 나타냅니다. 즉, MongoDB 결과를 필터하다 하기 위해 컬렉션 을 스캔해야 했습니다.

    필터하다 필드에 인덱스 생성 하여 성능을 개선합니다.

  • totalDocsExaminednReturned 값이 같으면 MongoDB 반환된 문서만 검사했음을 나타냅니다. 이는 유효 인덱스 나타냅니다.

돌아가기

결과 해석

이 페이지의 내용