쿼리 문제 해결
Query Targeting
경고는 종종 비효율적인 쿼리를 나타냅니다.
경고 조건
프로젝트 수준 경고 설정 페이지에서 다음과 같은 경고 조건을 구성하여 경고를 트리거할 수 있습니다.
Query Targeting: Scanned Objects / Returned
샘플링 기간 동안 모든 작업에 걸쳐 서버 전체에서 반환된 평균 문서 수 대비 스캔된 평균 문서 수가 정의된 임계값을 초과하는 경우 경고가 트리거됩니다. 기본 경고는 1000:1 임계값을 사용합니다.
스캔한 문서와 반송된 문서의 비율은 1에 가깝게 하는 것이 이상적입니다. 비율이 높으면 쿼리 성능에 부정적인 영향을 미치게 됩니다.
Query Targeting: Scanned / Returned
반환된 문서의 실제 수와 관련된 쿼리를 수행하기 위해 검사한 인덱스 키의 수가 사용자 정의 임계값을 충족하거나 초과하는 경우 발생합니다. 이러한 경고는 디폴트로 활성화되어 있지 않습니다.
예시
다음과 같은 mongod 로그 항목은 비효율적인 쿼리에서 생성된 통계를 나타냅니다.
<Timestamp> COMMAND <query> planSummary: COLLSCAN keysExamined:0 docsExamined: 10000 cursorExhausted:1 numYields:234 nreturned:4 protocol:op_query 358ms
이 쿼리는 문서 10,000개를 스캔하고 2500의 비율로 4개만 반환했는데, 이는 매우 비효율적입니다. 인덱스 키를 검사하지 않았으므로 MongoDB는 컬렉션의 모든 문서를 스캔했습니다(컬렉션 스캔이라고 함).
일반적인 트리거
쿼리 타겟팅 경고는 일반적으로 쿼리를 지원하는 인덱스가 없거나 기존 인덱스가 쿼리를 일부만 지원하는 경우에 발생합니다.
Atlas Search 프로세스(mongot
)에서 Atlas Search 인덱스를 업데이트 상태로 유지하기 위해 사용하는 변경 스트림 커서는 쿼리 타겟 비율에 영향을 줄 수 있으며 비율이 높을 경우 쿼리 타겟 경고를 트리거할 수 있습니다.
즉각적인 문제 해결
인덱스를 하나 이상 추가하여 비효율적인 쿼리를 더 잘 제공할 수 있습니다.
Performance Advisor의 경우 인덱스를 생성하기 위한 가장 쉽고 빠른 방법을 제공합니다. Performance Advisor는 MongoDB가 느리다고 판단한 쿼리를 모니터링하고 새로운 인덱스를 추천하여 쿼리 성능을 개선합니다. 디폴트로 Atlas는 클러스터 전체의 작업 실행 시간에 따라 느린 쿼리 임계값을 동적으로 조정합니다.
추천 인덱스를 생성하는 방법에 대한 지침은 속도가 느린 쿼리에서 Create Index 클릭합니다.
참고
쿼리가 느린 쿼리 임계값을 초과하고 스캔된 문서와 반환된 문서의 비율이 경고에 지정된 임계값 대비 큰 경우 Performance Advisor에서 인덱스 제안을 받지 않고도 비효율적인 쿼리에 대해 쿼리 타겟팅 경고를 받을 수 있습니다.
또한 다음 리소스를 사용하여 경고를 생성한 쿼리를 확인할 수 있습니다.
실시간 성능 패널은 Atlas 클러스터에서 MongoDB를 호스팅하는 머신의 현재 네트워크 트래픽 및 데이터베이스 작업을 모니터링하고 표시합니다.
MongoDB 로그는 Atlas 클러스터의 각
mongod
인스턴스에 대한 쿼리를 포함한 활동의 계정을 유지 관리합니다.cursor.explain()
mongosh
에 대한 명령은 모든 쿼리에 대한 성능 세부 정보를 제공합니다.네임스페이스 인사이트는 컬렉션 수준 쿼리 지연 시간을 모니터링합니다.
Atlas 쿼리 프로파일러는 클러스터의 모든 작업에 대한 평균 실행 시간과 비교할 때 Atlas가 느리다고 생각하는 작업을 기록합니다.
장기적인 솔루션 구현
쿼리 성능에 대한 자세한 사항은 다음을 참조합니다.
진행 상황 모니터링
Atlas는 다음과 같은 두 가지 방법을 제공하여 쿼리 타겟팅을 시각화합니다.
쿼리 타겟팅 지표는 반환된 객체 대비 스캔된 객체의 비율이 높은 경우 강조 표시합니다.
네임스페이스 인사이트는 컬렉션 수준 쿼리 지연 시간을 모니터링합니다.
쿼리 프로파일러는 클러스터에서 실행된 특정 비효율적인 쿼리를 설명합니다.
쿼리 타겟팅 지표
클러스터의 쿼리 성능을 시각화하는 데 도움이 되는 기록 지표를 볼 수 있습니다. Atlas UI에서 Query Targeting 지표를 보려면 다음 단계를 따르세요.
Atlas Clusters 에서 프로젝트 의 페이지로 이동합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.
아직 표시되지 않은 경우 사이드바에서 Clusters 을(를) 클릭합니다.
Clusters(클러스터) 페이지가 표시됩니다.
Query Targeting 차트에는 서버에서 실행된 쿼리에 대한 다음 지표가 표시됩니다.
메트릭 | 설명 |
---|---|
Scanned Objects / Returned | 반환된 평균 문서 수 대비 검사한 평균 문서 수를 나타냅니다. |
Scanned / Returned | 반환된 문서의 실제 수 대비 쿼리를 이행하기 위해 검사한 인덱스 키의 수를 나타냅니다. |
Atlas Search 프로세스(mongot
)에서 Atlas Search 인덱스를 업데이트 상태로 유지하기 위해 사용하는 변경 스트림 커서는 쿼리 타겟 비율에 영향을 줄 수 있으며 비율이 높을 경우 쿼리 타겟 경고를 트리거할 수 있습니다.
이러한 지표 중 하나라도 사용자 정의 임계값을 초과하는 경우 Atlas는 해당 Query Targeting: Scanned Objects / Returned
또는 Query Targeting: Scanned / Returned
경고를 생성합니다.
참고
또한 Real-Time Performance Panel 사용하여 Query Targeting 작업 비율을 실시간으로 볼 수 있습니다.
네임스페이스 인사이트
네임스페이스 인사이트는 컬렉션 수준의 쿼리 지연 시간을 모니터링합니다. 특정 호스트 및 작업 유형에 대한 쿼리 지연 시간 지표와 통계를 볼 수 있습니다. 고정된 네임스페이스를 관리하고 쿼리 지연 차트에 최대 다섯 개의 네임스페이스를 표시하도록 선택하세요.
네임스페이스 인사이트에 액세스하려면 다음을 수행합니다.
Atlas Clusters 에서 프로젝트 의 페이지로 이동합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.
아직 표시되지 않은 경우 사이드바에서 Clusters 을(를) 클릭합니다.
Clusters(클러스터) 페이지가 표시됩니다.
탭 으로 고 Namespace Insights (Go) 합니다.
클러스터의 대시보드에서 View Monitoring을 클릭합니다.
Query Insights 탭을 클릭합니다.
Namespace Insights 탭을 클릭합니다.
Query 프로파일러
쿼리 프로파일러에는 비효율적인 특정 쿼리를 정확히 찾아내는 데 사용할 수 있는 몇 가지 지표가 포함되어 있습니다. 최대 지난 24시간의 쿼리 작업을 시각화할 수 있습니다. 쿼리 프로파일러는 Query Targeting: Scanned / Returned
경고를 트리거한 쿼리를 식별하는 데 도움이 될 수 있는 로깅된 쿼리의 Examined : Returned Ratio(반환된 문서에 대해 검사된 인덱스 키)를 표시할 수 있습니다. 이 차트는 실제 반환된 문서 수와 비교하여 쿼리를 수행하기 위해 검사된 인덱스 키의 수를 보여줍니다.
참고
기본 Query Targeting: Scanned Objects / Returned
경고 비율은 약간 다릅니다. 샘플링 기간 동안 스캔된 평균 문서 수와 반환된 평균 문서 수의 비율에 따라 이 경고가 트리거됩니다.
Atlas는 자동으로 설정된 임계값으로 인해 쿼리 타겟팅 비율에 기여하는 개별 작업을 기록하지 않을 수 있습니다. 그러나 사용자는 여전히 쿼리 프로파일러와 Query Targeting 지표를 사용하여 쿼리 성능을 분석하고 최적화할 수 있습니다.
쿼리 프로파일러에 액세스하려면 다음과 같이 하세요:
Atlas Clusters 에서 프로젝트 의 페이지로 이동합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Organizations 메뉴에서 원하는 프로젝트가 포함된 조직을 선택합니다.
아직 표시되지 않은 경우 탐색 표시줄의 Projects 메뉴에서 원하는 프로젝트를 선택합니다.
아직 표시되지 않은 경우 사이드바에서 Clusters 을(를) 클릭합니다.
Clusters(클러스터) 페이지가 표시됩니다.
탭 으로 고 Query Profiler (Go) 합니다.
클러스터의 대시보드에서 View Monitoring을 클릭합니다.
Query Insights 탭을 클릭합니다.
Query Profiler 탭을 클릭합니다.