MongoDB deployment는 트랜잭션 볼륨이 높은 대규모 데이터베이스를 지원 수 있으므로 성능 조정이 필수적입니다. 정기적인 조정은 클러스터 내의 문제를 조기에 식별하는 데 도움이 되므로 시스템 응답성이나 안정성에 영향 전에 주소 수 있습니다.
이 문서 성능 조정과 유용한 지표 사용하여 배포서버 성능을 최적화하는 몇 가지 일반적인 방법을 설명합니다. 이러한 방법은 MongoDB Atlas 클러스터와 자체 관리형 배포 모두에 적용 . 그러나 MongoDB Atlas 사용하면 많은 작업을 자동화하고 효율성 위해 간소화하는 조정 프로세스 훨씬 쉬워집니다. 성능에 대한 자세한 내용은 MongoDB 성능을 참조하세요.
최고 속도로 쿼리 실행
최적의 쿼리 성능을 보장하기 위해 쿼리 성능 문제를 표시하고 느린 쿼리를 발견한 경우 수행할 작업을 알려주는 지표 사용할 수 있습니다.
MongoDB 로그 파일은 각 쿼리 의 실행 시간과 메서드를 기록 느린 쿼리를 검색 할 수 있습니다. 데이터베이스 프로파일러 지정된 임계값을 초과하는 쿼리를 기록합니다.
쿼리 느린 경우 먼저 쿼리 계획에 액세스 . 쿼리 계획 데이터 찾기에 대한 자세한 내용은 Explain 결과를 참조하세요.
쿼리 컬렉션 스캔 아닌 인덱스 스캔을 수행했는지 확인합니다.
인덱스 스캔은 MongoDB 검사하는 문서 수를 제한하는 반면, 컬렉션 스캔 MongoDB 컬렉션 의 모든 문서를 읽어야 합니다. 계획 결과를 해석하는 방법에 대해 자세히 학습 계획 결과 설명 해석을 참조하세요.
설명 계획 결과에 컬렉션 스캔이 많이 표시되는 경우 인덱스 추가를 고려하세요.
참고
인덱스는 쓰기 및 업데이트 속도를 늦출 수 있으므로 사용률이 낮은 인덱스가 너무 많으면 워크로드 에 따라 문서 수정 또는 삽입이 방해받을 수 있습니다.
쿼리 지표
다음 쿼리 지표 사용하여 쿼리 최고 속도로 실행 있는지 확인할 수도 있습니다.
metrics.queryExecutor.scanned
쿼리 결과를 반환하기 위해 스캔한 문서 수를 나타냅니다.스캔한 문서와 반환된 문서의 비율이 1:1인 것이 이상적이며, 이는 MongoDB 모든 문서를 반환한다는 의미입니다. 일반적으로 비율이 1보다 크면 MongoDB 일부 스캔 문서를 반환하지 않음을 나타냅니다.
비율은 1 또는 0보다 작을 수 있으며, 이는 인덱스 에 필요한 모든 데이터가 포함된 커버 쿼리 나타냅니다.
MongoDB 쿼리 에 응답하기 위해 많은 수의 문서를 스캔하는 경우 인덱스가 누락되었거나 쿼리 최적화해야 할 수 있습니다.
metrics.operation.scanAndOrder
서버가 쿼리 결과를 정렬하려는 노력을 나타냅니다.20 이상과 같이 높은 스캔 및 순서 번호는 서버 결과를 정렬해야 하므로 쿼리 결과 시간과 서버 메모리 부하가 증가한다는 의미입니다.
높은 스캔 및 순서 번호를 수정하려면 쿼리 요구 사항에 따라 인덱스를 정렬하거나 누락된 인덱스를 추가하세요. 일반적으로 B-트리 인덱스가 복합 인덱스 인 경우 인덱스 의 선행 필드 부터 오름차순으로 정렬합니다.
WiredTiger 티켓 번호 지표는 WiredTiger 스토리지 엔진의 성능을 반영합니다.
WiredTiger 읽기 및 쓰기 (write) 티켓은 동시 트랜잭션 수를 관리 위한 WiredTiger 저장 엔진의 동시성 제어 메커니즘입니다. 버전 7.0부터 MongoDB 동적 알고리즘 사용하여 최대 동시 스토리지 엔진 트랜잭션 수를 조정하여 클러스터 과부하 시 데이터베이스 처리량 최적화합니다.
읽기 및 쓰기 (write) 티켓은 최대 동시 트랜잭션 수를 제어합니다. WiredTiger 티켓 번호는 항상 128에 있어야 합니다. 값이 128 미만으로 유지되면 서버 지연 및 이로 인해 발생할 수 있는 잠재적 문제가 있음을 나타냅니다.
serverStatus
명령을 사용하여 현재 읽기 및 쓰기 (write) 티켓 수와 사용량을 확인할 수 있습니다.queues.execution
섹션을 확인하여 현재 로드 및 티켓 가용성을 파악합니다.낮은 WiredTiger 티켓 번호를 해결하려면 다음을 수행합니다.
티켓 할당을 자동으로 관리 하려면 동적 조정 기능 활성화되어 있는지 확인하세요.
클러스터 에 워크로드 처리하다 할 수 있는 충분한 리소스(예: CPU 및 메모리)가 있는지 확인합니다.
MongoDB 3.2 이전 버전을 사용하는 경우 WiredTiger 사용하는 이후 버전으로 업그레이드 .
최대 동시 트랜잭션 수를 수동으로 조정해야 하는 경우
storageEngineConcurrentReadTransactions
및storageEngineConcurrentWriteTransactions
매개변수를 수정할 수 있습니다.
참고
storageEngineConcurrentReadTransactions
및 storageEngineConcurrentWriteTransactions
수정 시 주의해야 합니다. 이러한 설정을 변경하면 성능 문제나 오류가 발생할 수 있습니다. 이러한 매개변수를 변경하기 전에 MongoDB 지원팀에 문의하는 것이 좋습니다.
문서 구조 안티패턴
쿼리 계획 문서 구조 반패턴을 보여주는 지표 포함되어 있지 않지만, 느린 쿼리를 디버깅할 때 반패턴을 찾을 수 있습니다. 성능을 저하시키는 다음과 같은 가장 일반적인 잘못된 쿼리 관행에 주의하세요.
바인딩되지 않은 배열: 크기 제한 없이 커질 수 있는 문서의 배열은 배열 업데이트 때마다 MongoDB 배열 문서에 다시 작성해야 하기 때문에 성능 문제를 일으킵니다. 자세한 내용은 제한이 없는 배열 피하기를 참조하세요.
경계가 없는 내장된 문서: MongoDB 최대 128 수준의 중첩으로 문서 내에 문서 삽입을 지원합니다. 내장된 문서를 포함한 각 MongoDB 문서 크기 제한은 16MB입니다. 내장된 문서가 너무 많으면 성능 문제가 발생할 수 있습니다.
과도한 내장된 문서를 완화하려면 내장된 문서를 별도의 컬렉션으로 이동하고 원본 문서 에서 참조합니다. 자세한 내용은 비대해진 문서를 참조하세요.
최고 속도의 데이터베이스 보장
MongoDB 에는 데이터베이스 읽기, 쓰기, 쿼리를 포함하여 데이터베이스 성능의 모든 측면을 추적 백업과 같은 배경 관리 작업이 성능을 방해하지 않는지 확인하는 수천 개의 지표 있습니다. 다음 지표 데이터베이스 의 문제를 나타내는 데 도움이 되므로 최적의 성능을 보장할 수 있습니다.
복제 지연
복제 지연은 복제본 세트 의 세컨더리 멤버가 프라이머리 보다 뒤처질 때 발생합니다. 복제 지연 의 원인을 이해하려면 oplog관련 지표 검사하면 됩니다. 그러나 다음과 같은 문제가 복제 지연 의 가장 일반적인 원인입니다.
프라이머리 와 세컨더리 간의 네트워킹 문제로 인해 노드에 연결할 수 없습니다.
프라이머리 노드 보다 느린 데이터를 적용하는 세컨더리 노드
쓰기 (write) 용량 충분하지 않은 경우 샤드를 추가해야 합니다.
프라이머리 노드 의 느린 작업, 복제 차단
잠금 성능 문제
MongoDB의 내부 잠금 시스템은 쓰기 (write) 충돌과 일관되지 않은 읽기를 방지하면서 동시 쿼리를 지원 데 사용됩니다. 잠금으로 인한 성능 문제는 사용 가능한 읽기 또는 쓰기 (write) 티켓의 남은 수가 0에 도달하면 발생하며, 이는 새 읽기 또는 쓰기 (write) 티켓 사용할 수 있을 때까지 새로운 읽기 또는 쓰기 (write) 요청이 대기열에 추가됨을 의미합니다.
잠금 성능 문제는 최적이 아닌 인덱스와 잘못된 스키마 설계 패턴을 나타낼 수 있으며, 이로 인해 잠금이 필요 이상으로 오래 유지될 수 있습니다.
커서 열기
트래픽의 증가 없이 열려 있는 커서의 수가 증가하는 경우, 이는 인덱싱된 쿼리가 잘못되었거나 큰 결과 집합으로 인해 쿼리가 오래 실행되었기 때문일 수 있습니다.
오버로드된 클러스터
성능을 조정할 때는 총 트래픽 또는 시스템을 통한 트랜잭션 처리량 이 클러스터 의 계획된 용량 초과하는 시점을 인식하는 것이 중요합니다. 처리량 증가를 추적 하여 클러스터의 용량 효율적으로 확장할 수 있습니다.
다음 지표 클러스터의 처리량 추적 도움이 될 수 있습니다. 이러한 지표 찾으려면 serverStatus
명령을 실행 하고 아래에 지정된 필드를 검사합니다.
읽기 및 쓰기 작업
읽기 및 쓰기 작업 지표 클러스터 수행하는 작업의 양을 나타냅니다. opcounters.query
필드를 통해 읽기 작업을 찾고 opcounters.insert
, opcounters.update
및 opcounters.delete
을 통해 쓰기 (write) 작업을 찾을 수 있으며, 이는 각각 삽입, 업데이트 및 삭제 작업의 총 수를 계산합니다.
읽기 대 쓰기 비율은 클러스터 에서 실행 워크로드의 특성에 따라 달라집니다.
시간 경과에 따른 읽기 및 쓰기 (write) 작업을 모니터링하면 정상 범위와 임계값을 설정할 수 있습니다.
읽기 및 쓰기 (write) 작업의 처리량 증가 추세에 따라 용량 점진적으로 늘릴 수 있습니다.
문서 지표 및 쿼리 실행기
문서 지표 및 쿼리 실행기는 클러스터 너무 사용 중인지 여부를 나타냅니다. 읽기 및 쓰기 작업 지표와 마찬가지로 이러한 지표 에는 맞고 그른 숫자가 없지만 정상적인 상태를 잘 알고 있으면 성능 저하가 큰 워크로드 크기에서 비롯된 것인지 아니면 다른 이유로 인해 발생한 것인지 파악하는 데 도움이 됩니다.
문서 지표를 조회 하려면 metrics.keysExamined
및 metrics.totalExecMicros
필드에 액세스 . 쿼리 실행기 지표 조회 하려면 metrics.fromPlanCache
필드 검사합니다. $queryStats
집계 단계를 사용하여 이러한 필드를 모두 찾을 수 있습니다.
MongoDB 문서 찾거나 문서 삽입할 때마다 문서 지표 업데이트합니다. 문서를 더 많이 찾거나, 삽입하거나, 업데이트 , 삭제 클러스터 더 바빠집니다.
용량 많은 클러스터 의 성능이 저하되면 일반적으로 쿼리 문제가 있음을 나타냅니다.
쿼리 실행기는 두 개의 데이터 포인트를 사용하여 처리 중인 쿼리 수를 알려줍니다.
스캔됨: 쿼리 및 쿼리 계획 평가 중에 스캔된 인덱스 항목의 선택한 샘플 기간 동안의 초당 평균 속도입니다.
스캔된 객체: 쿼리 및 쿼리 계획 평가 중에 스캔된 문서의 선택한 샘플 기간 동안의 초당 평균 속도입니다.
하드웨어 및 네트워크 지표
하드웨어 및 네트워크 지표 처리량 증가하고 있으며 컴퓨팅 인프라의 용량 초과할 것임을 나타낼 수 있습니다. 이러한 지표 운영 체제 및 네트워킹 인프라에서 수집됩니다. 이러한 지표 진단 목적으로 유용하게 사용하려면 정상적인 상태를 파악할 수 있어야 합니다.
온프레미스 MongoDB 실행 경우 운영 체제에 따라 MongoDB Ops Manager 사용하여 hardware 및 네트워크 지표 볼 수 있습니다.
추적 해야 할 지표 여러 가지가 있지만, 기준 범위 설정해야 하는 몇 가지 중요한 지표 다음과 같습니다.
디스크 지연 시간
디스크 IOPS
연결 횟수
클러스터 및 키 리소스
MongoDB cluster 기본 컴퓨팅 및 네트워킹 인프라가 제공하는 다양한 리소스를 사용합니다.
클라이언트 연결 수
문서 의 필드 connections.current
에 있는 serverStatus
현재 클라이언트 연결 수 지표는 시스템의 총 부하를 나타낼 수 있습니다. 하루 또는 한 주의 다양한 시간에 정상 범위를 추적 하면 트래픽 급증을 빠르게 식별하는 데 도움이 될 수 있습니다.
관련 지표인 사용된 연결의 비율은 MongoDB 에 사용 가능한 연결이 거의 실행 되는 시점을 나타낼 수 있습니다.
스토리지 지표
스토리지 지표 MongoDB 영구 저장 사용하는 방법을 추적 . WiredTiger 스토리지 엔진 에서 각 컬렉션 과 각 인덱스 는 개별 파일입니다. 컬렉션 의 문서 업데이트 하면 MongoDB 전체 문서 다시 작성합니다.
dbStats.dataSize
,dbStats.indexSize
,dbStats.storageSize
또는 데이터베이스 의 문서 수와 같은 메모리 공간 지표 데이터베이스 트래픽이 정상적인 범위 내에 있는 동안 예기치 않은 심각한 변화를 보이면 데이터 삭제 또는 손상과 같은 문제를 나타낼 수 있습니다. , 예기치 않은 데이터 증가 또는 인덱스 변경.dbStats.dataSize
이(가) 갑자기 떨어지면 대량의 데이터가 삭제되었음을 의미할 수 있습니다. 이 감소가 예기치 않은 경우 신속하게 조사해야 합니다.
메모리 지표
메모리 지표 MongoDB 클러스터 호스팅하는 컴퓨팅 인프라의 가상 메모리 사용하는 방법을 보여줍니다. serverStatus
결과의 mem
문서에서 메모리 지표 찾을 수 있습니다.
페이지 오류 수가 증가하거나 변경되었지만 아직 디스크에 기록되지 않은 데이터 양이 증가하면 클러스터 에서 사용할 수 있는 메모리 양과 관련된 문제가 있을 수 있습니다.
캐시 지표 작업 세트 사용 가능한 캐시 초과하는지 확인하는 데 도움이 될 수 있습니다.
심각한 오류
MongoDB는 대부분 MongoDB 로깅 프로세스의 일부로 캡처하는 오류를 통해 어설션 을 생성합니다.
다양한 심각도 수준에서 생성된 어설션 수를 모니터링하면 예기치 않은 문제에 대한 첫 번째 수준 지표를 제공할 수 있습니다. 어설션은 가장 심각한 종류인 메시지 어설션이거나 경고 자산, 일반 어설션 및 사용자 어설션일 수 있습니다.