Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
Atlas
/ /

쿼리 쿼리 프로파일러 러로 쿼리 성능 모니터링

M10+ 클러스터에서만 사용 가능

Query Profiler는 성능 문제를 진단하고 모니터링합니다. 이 모니터링은 실행 속도가 느린 쿼리와 해당 쿼리의 주요 성능 통계를 Atlas UI에 노출할 수 있습니다.

Atlas 는 mongod 인스턴스에서 통계를 수집하고 표시합니다. 쿼리 프로파일러 는 mongod 인스턴스의 로그 데이터 를 기반으로 느린 쿼리를 식별합니다. Atlas 는 이 데이터를 인스턴스 의 Query Profiler 섹션에 있는 Query Insights 탭 에 표시합니다.

참고

쿼리 프로파일러 는 데이터베이스 프로파일 러와 다릅니다. 쿼리 프로파일러 는 mongod 로그의 항목을 기반으로 비효율적인 특정 쿼리를 식별합니다. 데이터베이스 프로파일러는 지정된 프로파일링 수준 에 따라 mongod 에서 실행된 명령에 대한 자세한 정보를 반환합니다. 프로파일링 수준을 변경해도 쿼리 프로파일러 에 표시되는 느린 쿼리에는 영향 을 주지 않습니다.

Atlas 쿼리 프로파일러 기본값 으로 전체 클러스터 에 대한 작업을 표시합니다. 쿼리 프로파일러 Filter by Hosts 드롭다운을 사용하여 데이터를 표시하는 작업에 대한 호스트를 필터하다 할 수 있으며, 이 드롭다운을 사용하면 하나 이상의 특정 호스트와 관련된 데이터를 보거나 프라이머리 또는 세컨더리 호스팅하다 그룹을 볼 수 있습니다. Query Insights 탭 다음과 같이 설정하다 기간 동안 느린 데이터베이스 작업을 나타내는 정보가 표시됩니다.

  • Operation Execution Time

  • Docs Examined : Returned Ratio

Atlas 쿼리 프로파일러 는 추가 데이터 포인트를 지원 하기 위해 동일한 타임스탬프를 중심으로 동일한 컬렉션 에서 실행 되는 동일한 유형의 비닝 작업을 지원합니다.

추가 데이터 포인트를 지원 하기 위해 Atlas 쿼리 프로파일러 는 다음 기준을 충족하는 비닝 작업을 지원합니다.

  • 작업은 동일한 작업 유형입니다.

  • 작업은 동일한 네임스페이스에서 실행됩니다.

  • 작업에 일치하는 hasSortusedIndex 부울 값이 있습니다.

  • 작업은 동일한 타임스탬프를 중심으로 실행됩니다.

Atlas 는 해당 호스팅하다 의 평균 작업 실행 시간을 기준으로 각 mongod 호스팅하다 의 느린 작업 임계값을 관리합니다. 이 임계값은 db.setProfilingLevel mongosh 명령을 사용하여 변경할 수 있습니다.

참고

db.setProfilingLevel을 사용하여 느린 작업에 대한 임계값을 변경하면 성능 및 시스템 로그 설정에 영향을 줄 수 있습니다. db.setProfilingLevel을 사용하여 프로덕션 배포에서 쿼리 프로파일러 설정을 조정하기 전에 성능 및 보안에 미치는 영향을 신중하게 고려하세요. 쿼리 프로파일러 설정은 노드를 다시 시작하면 기본값으로 재설정됩니다.

또한 분산형 차트의 X축을 확대하면 느린 작업을 다시 가져와서 선택한 기간의 느린 작업에 대해 충실도를 더욱 자세히 제공할 수 있습니다.

참고

Atlas에서 관리하는 느린 작업 임계값 대신 100 밀리초의 고정된 느린 쿼리 임계값을 사용하려면 Atlas 관리 API 사용하세요. 느린 작업 임계값 관리 비활성화를 참조하세요. M0 클러스터, Flex 클러스터 및 서버리스 인스턴스의 경우, Atlas 기본값 으로 Atlas가 관리하는 느린 쿼리 작업 임계값을 비활성화하며 사용자는 이를 활성화 할 수 없습니다.

중요

쿼리 프로파일러를 활성화하기 전에 다음 고려 사항을 읽어 보세요.

프로필 데이터에는 데이터베이스 쿼리 내용을 포함한 민감한 정보가 포함될 수 있습니다. 이 데이터를 Atlas에 노출하는 것이 정보 보안 관행과 일치하는지 확인하세요.

쿼리 프로파일러는 한 번에 약 100,000개의 샘플링 로그를 표시합니다. 선택한 호스트 및 시간 범위에서 100,000개 이하의 로그가 기록된 경우 모든 로그가 표시됩니다.

Atlas는 Query Profiler 차트에 100,000개 이하의 데이터 요소만 표시합니다.

로그 데이터는 일괄적으로 처리됩니다. 데이터는 실시간보다 최대 5분까지 지연될 수 있습니다.

만약 클러스터에 활동 급증해 매우 많은 양의 로그 메시지가 생성될 경우, Atlas는 일정 기간 동안 새로운 로그의 수집 및 저장을 중단할 수 있습니다.

참고

로그 분석 속도 제한은 Performance Advisor UI, 쿼리 인사이트 UI, 액세스 추적 UI 및 MongoDB Search 쿼리 분석 UI 에만 적용 . 다운로드 가능한 로그 파일은 항상 완전한 상태로 유지됩니다.

지연 시간이 긴 일부 $lookup 작업은 외부 컬렉션에 대한 느린 쿼리 로그를 생성하지 않습니다. 이는 느린 쿼리 로그가 쿼리 프로파일러에 보고된 작업에 해당하는 반면 지연 시간 지표는 컬렉션 락 을 획득할 때만 증가하기 때문에 발생할 수 있습니다.

샤드 의 $lookup 쿼리 로컬 읽기를 수행할 수 있는 경우 $lookup 는 외부 컬렉션 쿼리하기 위한 별도의 작업을 기록 하지 않습니다. 로컬 읽기는 외부 컬렉션 에 대한 쿼리 현재 작업이 실행 중인 동일한 샤드 만을 대상으로 하는 경우를 나타냅니다. 결과적으로 $lookup 작업은 네임스페이스 인사이트 지연 시간 지표 과 작업 수를 늘리지만 외부 컬렉션 대한 느린 쿼리 로그 생성하지 않습니다.

프로젝트에 대해 Performance Advisor 및 쿼리 프로파일러를 활성화하거나 비활성화하려면 프로젝트에 대해 Project Owner 역할이 있거나 상위 조직에 대해 Organization Owner 역할이 있어야 합니다.

쿼리 프로파일러 에서 쿼리 성능을 보려면 프로젝트 에 대한 Project Read Only 또는 Project Observability Viewer 액세스 있어야 합니다.

Atlas 는 기본값 쿼리 프로파일러 를 활성화합니다.

쿼리 프로파일러를 비활성화하려면 다음을 수행합니다.

1

경고: 탐색 기능 개선 작업 진행 중

현재 새롭고 향상된 탐색 환경을 출시하고 있습니다. 다음 단계가 Atlas UI 의 보기와 일치하지 않는 경우 미리 보기 설명서를 참조하세요.

  1. 아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.

  2. 아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.

  3. Projects 메뉴 옆에 있는 Options 메뉴를 펼친 다음 Project Settings 를 클릭합니다.

    프로젝트 설정 페이지가 표시됩니다.

2

Database Monitoring Tools 섹션에서 Performance Advisor and ProfilerOff로 전환합니다.

다음 섹션에서는 쿼리 프로파일러 사용하여 느린 쿼리를 찾는 방법에 대해 설명합니다.

1

Atlas에서 프로젝트의 Clusters 페이지로 이동합니다.

경고: 탐색 기능 개선 작업 진행 중

현재 새롭고 향상된 탐색 환경을 출시하고 있습니다. 다음 단계가 Atlas UI 의 보기와 일치하지 않는 경우 미리 보기 설명서를 참조하세요.

  1. 아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.

  2. 아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.

  3. 아직 표시되지 않은 경우 사이드바에서 Clusters를 클릭합니다.

    Clusters(클러스터) 페이지가 표시됩니다.

  1. cluster의 View Monitoring 버튼을 클릭합니다.

  2. Query Insights 탭을 클릭합니다.

  3. Query Profiler 탭을 클릭합니다.

    쿼리 프로파일러 기본값 으로 로그 의 모든 데이터를 프라이머리세컨더리 노드에 표시합니다.

2

쿼리 프로파일러 산점도 차트 와 차트 바로 아래에 있는 테이블을 사용하여 느린 작업을 찾는 데 도움이 됩니다.

  1. Filter by Hosts 드롭다운에서 지표 를 보려는 호스트를 하나 이상 선택합니다.

  2. Time Range 또는 Filter by Date and Time 드롭다운에서 기간을 선택합니다. 쿼리 프로파일러 기본값 으로 지난 24 시간 동안의 데이터를 표시합니다.

  3. Operation Execution Time 드롭다운에서 지표를 선택합니다. 옵션에는 다음이 포함됩니다.

    • Operation Execution Time (기본값): MongoDB database 작업을 완료하는 데 걸린 총 시간(일반적으로 밀리초)입니다.

    • Response Length: 작업에 대한 응답으로 데이터베이스 에서 반환한 문서 또는 데이터의 크기로, 바이트 단위로 측정합니다.

    • Docs Examined쿼리 에 대한 결과를 찾기 위해 컬렉션 내에서 스캔한 문서의 총 개수입니다.

    • Docs Returned: Atlas 쿼리 에 대해 반환한 쿼리 기준과 일치하는 문서 수입니다.

    • Keys Examined: 쿼리 실행 중에 데이터베이스 에서 스캔한 인덱스 항목의 총 개수입니다.

    • Num Yields: 다른 작업을 계속 진행할 수 있도록 작업이 일시 중지된 횟수입니다.

    • Docs Examined : Returned Ratio: Docs ExaminedDocs Returned로 나누어 계산한 비율입니다.

    • Keys Examined : Returned Ratio: Keys ExaminedDocs Returned로 나누어 계산한 비율입니다.

  4. All operation types 드롭다운을 클릭하여 프로파일링할 작업을 변경합니다. 쿼리 프로파일러 기본값 으로 모든 작업 유형을 표시합니다.

3
  • 차트 에서 산점도 점 클릭합니다. 요약 정보가 포함된 오른쪽 패널이 열립니다.

  • 오른쪽 패널에서 View more details 을 클릭하면 전체 쿼리 형태, 자세한 실행 통계, 쿼리 로그 및 개선 제안 사항을 볼 수 있습니다.

  • XY 축을 따라 클릭하고 드래그하여 수집된 데이터의 특정 하위 집합을 확대합니다.

  • 차트 아래 표까지 아래로 스크롤하여 컬렉션 별 느린 쿼리 목록을 확인합니다. 자세한 내용을 보려면 표에서 행을 클릭하세요.

4

느린 쿼리 검사할 때는 먼저 다음 주요 지표 와 패턴을 살펴봅니다.

  • Operation Execution Time (millis): 밀리초 단위의 쿼리 시간입니다. 이는 쿼리 느리다는 프라이머리 지표입니다. 이 지표가 지속적으로 높으면 쿼리 로직을 최적화하거나 결과를 일괄 처리하거나 데이터에 액세스하는 방법을 재고해 보세요.

  • 쿼리 로그 에 "planSummary": "COLLSCAN": 가 표시되면 쿼리 컬렉션 스캔 수행했으며 인덱스 사용하지 않은 것입니다. 이는 인덱스 추가하거나 쿼리 다시 작성하라는 강력한 신호입니다.

  • Docs Examined (docsExamined): 쿼리 에 대해 MongoDB 검사한 문서 수입니다. Docs ExaminedDocs Returned보다 상당히 큰 경우 이는 종종 다음을 의미합니다.

    • 이 쿼리 많은 문서를 스캔하여 결과를 찾았으며, 이는 네트워크 지연 시간 과 애플리케이션 성능에 영향 수 있습니다.

    • 기존 인덱스는 이 특정 쿼리 에 비효율적이거나 최적이 아닙니다. 자세히 학습 인덱스를 참조하세요.

  • Keys Examined (keysExamined): 쿼리 에 대해 스캔된 인덱스 키의 수입니다. 필터하다 조건이 포함된 쿼리 에 대해 이 지표가 0 인 경우, 인덱스 가 없고 MongoDB 전체 컬렉션 스캔했을 가능성이 높습니다. 이것이 속도 저하의 프라이머리 원인입니다. Docs Examined에 비해 Docs Examined 가 매우 높고 Keys Examined0 이거나 매우 낮으면 컬렉션 또는 매우 비선택적인 인덱스 스캔하고 있을 가능성이 높습니다. 자세히 학습인덱스를참조하세요.

  • Docs Examined : Returned Ratio 값이 높으면 쿼리 많은 문서를 스캔하여 반환하는 결과는 거의 없음을 의미하며, 이는 쿼리 비효율적이거나 인덱스가 누락되었다는 신호일 수 있습니다.

  • Num Yields (numYields): 양보가 자주 발생하면 리소스 경합이나 일시 중지 중인 장기 실행 작업이 암시되어 전체 처리량 에 잠재적으로 영향을 미칠 수 있습니다.

  • Response Length: 응답 길이가 비정상적으로 길면 쿼리가 필요한 것보다 더 많은 데이터를 반환한다는 의미입니다. 프로젝션 을 사용하여 반환되는 필드를 제한하는 것이 좋습니다.

  • Has Index Coverage (usedIndex): 이 부울은 인덱스 사용되었는지 여부를 확인합니다. 인덱싱해야 하는 쿼리 에 대해 로 설정하다 경우 false 인덱스 추가합니다.

  • hasSorttrue로 설정하다 경우 쿼리 sort() 메서드가 포함되어 있음을 나타냅니다. 인덱싱되지 않은 sort() 메서드는 매우 리소스 집약적일 수 있습니다. 검색 인덱스 구성을 확인하고 sort() 메서드를 지원하는지 확인합니다.

돌아가기

쿼리 지연 시간

이 페이지의 내용