MongoDB 로그의 IXSCAN 및 COLLSCAN 이해

MongoDB 로그의 IXSCAN 및 COLLSCAN 이해

최적화해야 할 느린 작업을 찾기 위해 일부 Mongo 로그를 grep하려고 합니다. 느린 쿼리 로깅은 기본값이며 100ms가 넘는 작업을 로깅합니다.

일반적으로 COLLSCANS를 검색하면 주의가 필요한 검색어가 표시된다고 해도 무방할 것 같습니다. 덜 분명한 점은 IXSCANS가 세부 정보인 경우 검색해야 한다는 것입니다.

여기서 MongoDB 문서를 고려하면 다음과 같습니다.

https://docs.mongodb.com/manual/reference/explain-results/#collection-scan-vs-index-use

내 이해는 이것이 바이너리 상황이고 쿼리는 COLLSCAN 또는 IXSCAN이라는 것입니다. 따라서 IXSCAN을 grep하면 COLLSCANS가 아닌 모든 느린 쿼리를 보게 됩니다. 이것이 사실입니까?

답변1

최적화해야 할 느린 작업을 찾기 위해 일부 Mongo 로그를 grep하려고 합니다. 느린 쿼리 로깅은 기본값이며 100ms가 넘는 작업을 로깅합니다.

MongoDB 로그를 살펴보는 것보다 오픈 소스의 스크립트를 사용하는 것이 좋습니다.mtools프로젝트. 참고: 저는 원저자는 아니지만 mtools기여자입니다.

mtools 프로덕션 MongoDB 배포에 필요한 정보를 찾기 위해 GB 단위의 로그를 탐색하는 과정에서 영감을 얻은 Python 스크립트 모음입니다. 주요 스크립트는 연속적인 필터(예: )를 통해 출력을 파이프하는 일반적인 명령줄 작업 흐름에 맞도록 고안되었습니다 mlogfilter --scan | mplotqueries.

예를 들어:

  • mloginfo --queries좋은 출발점입니다. 쿼리 패턴을 집계하므로 자주 실행되고 배포에 전반적인 영향을 미치는 쿼리에 집중할 수 있습니다.
  • mlogfilter기본적으로 MongoDB 로그에 대한 grep입니다. 네임스페이스, 기간, 연결, 패턴 및 기타 기준으로 로그 줄을 필터링할 수 있습니다. 그만큼--scan옵션은 컬렉션 검색이 필요하지 않은 비효율적인 쿼리를 식별하는 데 도움이 됩니다.
  • mplotqueries로그를 시각화하는 도구로, 패턴과 이상값을 식별하는 데 매우 유용할 수 있습니다.

일반적으로 COLLSCANS를 검색하면 주의가 필요한 검색어가 표시된다고 해도 무방할 것 같습니다. 덜 분명한 점은 IXSCANS가 세부 정보인 경우 검색해야 한다는 것입니다.

컬렉션 검색은 일반적으로 관심이 있지만 일회성 쿼리 또는 소규모 컬렉션에 대한 예상 사용량의 결과일 수도 있습니다. 쿼리 유형에 초점을 맞추는 대신 배포에 대한 느린 쿼리(또는 일반적으로 느린 작업)를 검토하여 개선할 수 있는 부분을 더 잘 이해하겠습니다. 일반적으로 인덱스를 사용하는 것이 좋지만 인덱스 사용이 비효율적입니다(예: 메모리 내 정렬 또는대소문자를 구분하지 않는 정규 표현식) 해결해 볼 가치가 있는 문제입니다.

내 이해는 이것이 바이너리 상황이고 쿼리는 COLLSCAN 또는 IXSCAN이라는 것입니다. 따라서 IXSCAN을 grep하면 COLLSCANS가 아닌 모든 느린 쿼리를 보게 됩니다. 이것이 사실입니까?

grep을 사용하면 IXSCAN언급된 모든 로그 줄을 찾을 수 있지만 IXSCAN느린 쿼리 로깅 결과는 확실히 바이너리가 아니며 MongoDB 서버 버전에 따라 다릅니다. 효율적인 인덱스 사용은 분명한 최적화이지만 내부적으로는 여러 가지 방법이 있습니다.쿼리 플래너 단계이는 쿼리 성능을 이해하는 것과 관련이 있을 수 있습니다.

로그에서 흥미롭고 느린 쿼리를 찾으면 다음 단계는 일반적으로 더 자세한 내용을 검토하는 것입니다.explain output. 나는 explain(true)(일명allPlansExecution모드) 이는 고려된 쿼리 계획에 대한 세부 정보와 승리한 계획을 보여줍니다. 느린 쿼리에 대한 설명 출력을 해석하는 방법을 잘 모르는 경우 다음 페이지에 게시하는 것이 좋습니다.DBA 스택익스체인지.

쿼리를 설명하는 것이 워크로드의 실제 성능을 측정하는 것은 아니라는 점은 주목할 가치가 있습니다. 일반 작업에서는 쿼리 계획이 캐시되는 반면, 세부 explain출력은 후보 인덱스와 쿼리 계획을 구체적으로 다시 평가합니다. 보다쿼리 계획자세한 내용은 MongoDB 매뉴얼을 참조하세요.

관련 정보