Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ /

성능 조정

MongoDB deployment는 트랜잭션 볼륨이 높은 대규모 데이터베이스를 지원 수 있으므로 성능 조정이 필수적입니다. 정기적인 조정은 클러스터 내의 문제를 조기에 식별하는 데 도움이 되므로 시스템 응답성이나 안정성에 영향 전에 주소 수 있습니다.

이 문서 성능 조정과 유용한 지표 사용하여 배포서버 성능을 최적화하는 몇 가지 일반적인 방법을 설명합니다. 이러한 방법은 MongoDB Atlas 클러스터와 자체 관리형 배포 모두에 적용 . 그러나 MongoDB Atlas 사용하면 많은 작업을 자동화하고 효율성 위해 간소화하는 조정 프로세스 훨씬 쉬워집니다. 성능에 대한 자세한 내용은 MongoDB 성능을 참조하세요.

최적의 쿼리 성능을 보장하기 위해 쿼리 성능 문제를 표시하고 느린 쿼리를 발견한 경우 수행할 작업을 알려주는 지표 사용할 수 있습니다.

MongoDB 로그 파일은 각 쿼리 의 실행 시간과 메서드를 기록 느린 쿼리를 검색 할 수 있습니다. 데이터베이스 프로파일러 지정된 임계값을 초과하는 쿼리를 기록합니다.

쿼리 느린 경우 먼저 쿼리 계획에 액세스 . 쿼리 계획 데이터 찾기에 대한 자세한 내용은 Explain 결과를 참조하세요.

  • 쿼리 컬렉션 스캔 아닌 인덱스 스캔을 수행했는지 확인합니다.

    인덱스 스캔은 MongoDB 검사하는 문서 수를 제한하는 반면, 컬렉션 스캔 MongoDB 컬렉션 의 모든 문서를 읽어야 합니다. 계획 결과를 해석하는 방법에 대해 자세히 학습 계획 결과 설명 해석을 참조하세요.

  • 설명 계획 결과에 컬렉션 스캔이 많이 표시되는 경우 인덱스 추가를 고려하세요.

    참고

    인덱스는 쓰기 및 업데이트 속도를 늦출 수 있으므로 사용률이 낮은 인덱스가 너무 많으면 워크로드 에 따라 문서 수정 또는 삽입이 방해받을 수 있습니다.

다음 쿼리 지표 사용하여 쿼리 최고 속도로 실행 있는지 확인할 수도 있습니다.

참고

storageEngineConcurrentReadTransactionsstorageEngineConcurrentWriteTransactions 수정 시 주의해야 합니다. 이러한 설정을 변경하면 성능 문제나 오류가 발생할 수 있습니다. 이러한 매개변수를 변경하기 전에 MongoDB 지원팀에 문의하는 것이 좋습니다.

쿼리 계획 문서 구조 반패턴을 보여주는 지표 포함되어 있지 않지만, 느린 쿼리를 디버깅할 때 반패턴을 찾을 수 있습니다. 성능을 저하시키는 다음과 같은 가장 일반적인 잘못된 쿼리 관행에 주의하세요.

  • 바인딩되지 않은 배열: 크기 제한 없이 커질 수 있는 문서의 배열은 배열 업데이트 때마다 MongoDB 배열 문서에 다시 작성해야 하기 때문에 성능 문제를 일으킵니다. 자세한 내용은 제한이 없는 배열 피하기를 참조하세요.

  • 경계가 없는 내장된 문서: MongoDB 최대 128 수준의 중첩으로 문서 내에 문서 삽입을 지원합니다. 내장된 문서를 포함한 각 MongoDB 문서 크기 제한은 16MB입니다. 내장된 문서가 너무 많으면 성능 문제가 발생할 수 있습니다.

    과도한 내장된 문서를 완화하려면 내장된 문서를 별도의 컬렉션으로 이동하고 원본 문서 에서 참조합니다. 자세한 내용은 비대해진 문서를 참조하세요.

MongoDB 에는 데이터베이스 읽기, 쓰기, 쿼리를 포함하여 데이터베이스 성능의 모든 측면을 추적 백업과 같은 배경 관리 작업이 성능을 방해하지 않는지 확인하는 수천 개의 지표 있습니다. 다음 지표 데이터베이스 의 문제를 나타내는 데 도움이 되므로 최적의 성능을 보장할 수 있습니다.

복제 지연은 복제본 세트 의 세컨더리 멤버가 프라이머리 보다 뒤처질 때 발생합니다. 복제 지연 의 원인을 이해하려면 oplog관련 지표 검사하면 됩니다. 그러나 다음과 같은 문제가 복제 지연 의 가장 일반적인 원인입니다.

  • 프라이머리 와 세컨더리 간의 네트워킹 문제로 인해 노드에 연결할 수 없습니다.

  • 프라이머리 노드 보다 느린 데이터를 적용하는 세컨더리 노드

  • 쓰기 (write) 용량 충분하지 않은 경우 샤드를 추가해야 합니다.

  • 프라이머리 노드 의 느린 작업, 복제 차단

MongoDB의 내부 잠금 시스템은 쓰기 (write) 충돌과 일관되지 않은 읽기를 방지하면서 동시 쿼리를 지원 데 사용됩니다. 잠금으로 인한 성능 문제는 사용 가능한 읽기 또는 쓰기 (write) 티켓의 남은 수가 0에 도달하면 발생하며, 이는 새 읽기 또는 쓰기 (write) 티켓 사용할 수 있을 때까지 새로운 읽기 또는 쓰기 (write) 요청이 대기열에 추가됨을 의미합니다.

잠금 성능 문제는 최적이 아닌 인덱스와 잘못된 스키마 설계 패턴을 나타낼 수 있으며, 이로 인해 잠금이 필요 이상으로 오래 유지될 수 있습니다.

트래픽의 증가 없이 열려 있는 커서의 수가 증가하는 경우, 이는 인덱싱된 쿼리가 잘못되었거나 큰 결과 집합으로 인해 쿼리가 오래 실행되었기 때문일 수 있습니다.

성능을 조정할 때는 총 트래픽 또는 시스템을 통한 트랜잭션 처리량 이 클러스터 의 계획된 용량 초과하는 시점을 인식하는 것이 중요합니다. 처리량 증가를 추적 하여 클러스터의 용량 효율적으로 확장할 수 있습니다.

다음 지표 클러스터의 처리량 추적 도움이 될 수 있습니다. 이러한 지표 찾으려면 serverStatus 명령을 실행 하고 아래에 지정된 필드를 검사합니다.

읽기 및 쓰기 작업 지표 클러스터 수행하는 작업의 양을 나타냅니다. opcounters.query 필드를 통해 읽기 작업을 찾고 opcounters.insert, opcounters.updateopcounters.delete을 통해 쓰기 (write) 작업을 찾을 수 있으며, 이는 각각 삽입, 업데이트 및 삭제 작업의 총 수를 계산합니다.

읽기 대 쓰기 비율은 클러스터 에서 실행 워크로드의 특성에 따라 달라집니다.

  • 시간 경과에 따른 읽기 및 쓰기 (write) 작업을 모니터링하면 정상 범위와 임계값을 설정할 수 있습니다.

  • 읽기 및 쓰기 (write) 작업의 처리량 증가 추세에 따라 용량 점진적으로 늘릴 수 있습니다.

문서 지표 및 쿼리 실행기는 클러스터 너무 사용 중인지 여부를 나타냅니다. 읽기 및 쓰기 작업 지표와 마찬가지로 이러한 지표 에는 맞고 그른 숫자가 없지만 정상적인 상태를 잘 알고 있으면 성능 저하가 큰 워크로드 크기에서 비롯된 것인지 아니면 다른 이유로 인해 발생한 것인지 파악하는 데 도움이 됩니다.

문서 지표를 조회 하려면 metrics.keysExaminedmetrics.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 로깅 프로세스의 일부로 캡처하는 오류를 통해 어설션 을 생성합니다.

다양한 심각도 수준에서 생성된 어설션 수를 모니터링하면 예기치 않은 문제에 대한 첫 번째 수준 지표를 제공할 수 있습니다. 어설션은 가장 심각한 종류인 메시지 어설션이거나 경고 자산, 일반 어설션 및 사용자 어설션일 수 있습니다.

돌아가기

튜닝

이 페이지의 내용