느린 쿼리 찾기
MongoDB 에는 느린 쿼리를 식별하고 쿼리 성능을 개선하는 방법을 결정하는 데 도움이 될 수 있는 데이터베이스 프로파일러가포함되어 있습니다.
이 작업에 관한 정보
성능, 스토리지 및 보안
이 작업 데이터베이스 프로파일러 사용하여 실행 인스턴스 에서 느린 쿼리를 mongod
식별합니다. 데이터베이스 프로파일러 활성화하면 성능 및 디스크 사용량에 영향을 미치고 암호화되지 않은 쿼리 데이터가 노출될 수 있습니다.
경고
프로덕션 배포서버 에서 데이터베이스 프로파일러 사용하기 전에 성능, 저장 및 보안에 미치는 영향을 고려하세요.
Atlas 쿼리 프로파일러
Atlas 사용자는 Atlas 쿼리 프로파일러 활용하여 산점도 차트 통해 편리하게 시각화 하면서 느린 쿼리를 식별할 수 있습니다.
느린 쿼리
느린 쿼리 실행 데 지정된 시간보다 오래 걸리는 쿼리입니다. 이 작업 의 경우 느린 쿼리 임계값은 100 밀리초로 설정하다 됩니다.
일부 사용 사례에서는 쿼리를 더 빠르게 실행 해야 할 수 있습니다. 다른 경우에는 가장 느린 쿼리에만 집중하도록 임계값을 올려야 할 수도 있습니다.
특정 애플리케이션 및 데이터베이스 요구 사항을 반영하는 느린 쿼리 임계값을 선택합니다.
Context
이 옵션을 활성화하면 데이터베이스 프로파일러 데이터베이스 수준에서만 쿼리를 모니터링합니다. 여러 데이터베이스에서 느린 쿼리를 모니터 위해 프로파일러가 필요한 경우 각 데이터베이스 에서 메서드를 실행 db.setProfilingLevel()
.
샤딩된 클러스터
데이터베이스 프로파일러 를 통해 사용할 수 mongos
없습니다.
단계
데이터베이스 프로파일러 활성화합니다.
데이터베이스 프로파일러 느린 쿼리를 모니터 활성화 하려면 메서드를 db.setProfilingLevel()
사용합니다.
db.setProfilingLevel(1, 100)
{ was: 0, slowms: 1, sampleRate: 1, ok: 1}
이렇게 하면 프로파일링 수준이 1
으로 설정되어 느린 쿼리를 모니터링하고 실행 데 100 밀리초보다 오래 걸리는 쿼리 느린 으로 정의합니다.
느린 쿼리를 확인합니다.
데이터베이스 프로파일러 에서 발견한 느린 쿼리를 나열하려면 컬렉션 에서 system.profile
관련 데이터를 쿼리 .
db.system.profile.find( { }, { command: 1, millis: 1, docsExamined: 1, keysExamined: 1, nreturned: 1 } ).sort( { ts: -1 } )
[ { command: { find: 'people', filter: { age: { '$gt': 35 } }, lsid: { id: UUID('ae3e9932-0a78-47ab-b741-01dd3bfb3563') }, '$db': 'contacts' }, keysExamined: 0, docsExamined: 100000, nreturned: 40, millis: 143 } ]
이 명령은 데이터베이스 프로파일러 에서 관찰한 느린 쿼리 목록을 제공합니다.
프로젝션 반환 문서를 필터링하여 쿼리 느리게 실행 되는 원인을 파악하는 데 유용할 수 있는 정보를 포함합니다.
가
keysExamined
인0
경우 쿼리 에서 인덱스 사용하지 않았음을 나타냅니다. 이 문제를 해결하려면 컬렉션 에인덱스 만듭니다.인덱스 사용되었고
docsExamined
이nreturned
보다 훨씬 크면 비효율적인 인덱스 나타냅니다. 쿼리 필터하다 에서 사용하는 필드 에 인덱스 업데이트 하거나 새 인덱스를 만들어야 할 수 있습니다.keysExamined
이 높고docsExamined
낮으면 효과적인 인덱스 사용을 나타냅니다.
예시
Ignore Indexes
인덱스 가 있는 컬렉션 의 성능을 평가하려면 메서드를 사용하여 인덱스를 무시하도록 쿼리 설정하다 수 hint( {
$natural: 1 } )
있습니다.
db.listingsAndReviews.find( { $or: [ { "address.market": "Berlin" }, { "review_scores.review_scores_cleanliness": { $lt: 5 } } ], $where: function () { return this.amenities && this.amenities.length > 15; } } ).sort( { description: 1 } ).hint( { $natural: 1 } );
컬렉션 스캔 으로 쿼리의 성능을 인덱스 스캔과 비교하려는 경우에 유용할 수 있습니다.