MongoDB 성능
MongoDB로 애플리케이션을 개발하고 운영할 때 애플리케이션 및 해당 데이터베이스의 성능 분석이 필요할 수 있습니다. 성능 저하가 발생하는 경우 데이터베이스 액세스 전략, 하드웨어 가용성, 열린 데이터베이스 연결 수 등이 원인인 경우가 많습니다.
일부 사용자는 불충분하거나 부적절한 인덱싱 전략 또는 잘못된 스키마 설계 패턴으로 인해 성능 제한을 경험할 수 있습니다. 잠금 성능에서는 이러한 요소가 MongoDB의 내부 잠금에 어떤 영향을 미치는지 설명합니다.
성능 문제는 데이터베이스가 용량으로 작동 중이고 데이터베이스에 추가 용량을 추가해야 할 때임을 나타낼 수 있습니다. 특히 애플리케이션의 작업 세트는 사용 가능한 실제 메모리에 적합해야 합니다.
경우에 따라 성능 문제는 일시적이며 비정상적인 트래픽 로드와 관련될 수 있습니다. 연결 수에서 설명한 대로 스케일링은 과도한 트래픽을 완화하는 데 도움이 될 수 있습니다.
데이터베이스 프로파일러 는 어떤 작업이 성능 저하를 일으키는지 이해하는 데 도움이 될 수 있습니다.
잠금 성능
MongoDB는 데이터 세트 일관성을 보장하기 위해 잠금 시스템을 사용합니다. 특정 작업이 오래 실행되거나 대기열이 형성되면 요청 및 작업이 잠금을 대기함에 따라 성능이 저하됩니다.
잠금 관련 속도 저하가 간헐적으로 발생할 수 있습니다. 잠금이 성능에 영향을 미치는지 확인하려면 serverStatus
출력의 잠금 섹션과 globalLock 섹션을 참조하세요.
참고
일부 serverStatus
응답 필드는 MongoDB Atlas M0/M2/M5 클러스터에서 반환되지 않습니다. 자세한 내용은 MongoDB Atlas 설명서의 제한된 명령 을 참조하세요.
locks.<type>.timeAcquiringMicros
를 locks.<type>.acquireWaitCount
로 나누면 특정 잠금 모드의 대략적인 평균 대기 시간을 구할 수 있습니다.
locks.<type>.deadlockCount
잠금 획득 시 교착 상태가 발생한 횟수를 제공합니다.
globalLock.currentQueue.total
가 지속적으로 높으면 많은 수의 요청이 잠금을 기다리는 중일 가능성이 있습니다. 이는 성능에 영향을 미치는 동시성 문제가 있을 수 있음을 나타냅니다.
만약 globalLock.totalTime
이 uptime
에 비해 높으면 데이터베이스가 상당한 시간 동안 잠금 상태로 존재한 것입니다.
긴 쿼리는 인덱스의 비효율적인 사용, 최적이 아닌 스키마 설계, 잘못된 쿼리 구조, 시스템 아키텍처 문제, 또는 부족한 RAM으로 인해 디스크 읽기가 발생할 수 있습니다.
연결 횟수
어떤 경우에는 애플리케이션과 데이터베이스 간의 연결 수가 요청을 처리하는 서버의 능력을 압도할 수 있습니다. serverStatus
문서의 다음 필드에서 인사이트를 얻을 수 있습니다:
connections
다음 두 필드를 위한 컨테이너입니다.connections.current
데이터베이스 인스턴스에 연결된 현재 클라이언트의 총 수입니다.connections.available
새 클라이언트가 사용할 수 있는 미사용 연결의 총 개수입니다.
동시 애플리케이션 요청이 많은 경우 데이터베이스가 수요를 따라잡는 데 문제가 있을 수 있습니다. 이 경우 배포서버의 용량을 늘려야 합니다.
쓰기 작업이 많은 애플리케이션의 경우 샤딩을 배포하고 샤딩된 클러스터에 하나 이상의 샤드를 추가하여 mongod
인스턴스 간에 로드를 분산합니다.
연결 수의 급증은 애플리케이션 또는 드라이버 오류의 결과일 수도 있습니다.공식적으로 지원되는 모든 MongoDB 드라이버는 연결 풀링을 구현하여 클라이언트가 연결을 보다 효율적으로 사용하고 재사용할 수 있습니다. 특히 해당 워크로드가 없는 매우 높은 연결 수는 드라이버 또는 기타 구성 오류를 나타내는 경우가 많습니다.
자체 관리 연결 제한
시스템 전체 제한으로 제한되지 않는 한 MongoDB에서 지원하는 최대 수신 연결 수는 maxIncomingConnections
설정으로 구성됩니다. Unix 기반 시스템에서는 ulimit
명령을 사용하거나 시스템의 /etc/sysctl
파일을 편집하여 시스템 전체 제한을 수정할 수 있습니다. 자세한 내용은 자체 관리형 배포에 대한 UNIX ulimit
설정을 참조하세요.
MongoDB Atlas 연결 제한
MongoDB Atlas는 클러스터 계층 및 클래스를 기반으로 동시 수신 연결에 대한 제한을 설정합니다. 자세한 내용은 Atlas 설명서의 연결 제한과 클러스터 계층을 참조하세요.