문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

MongoDB 성능

이 페이지의 내용

  • 잠금 성능
  • 연결 횟수
  • 풀타임 진단 데이터 캡처

MongoDB로 애플리케이션을 개발하고 운영할 때 애플리케이션 및 해당 데이터베이스의 성능 분석이 필요할 수 있습니다. 성능 저하가 발생하는 경우 데이터베이스 액세스 전략, 하드웨어 가용성, 열린 데이터베이스 연결 수 등이 원인인 경우가 많습니다.

일부 사용자는 불충분하거나 부적절한 인덱싱 전략 또는 잘못된 스키마 설계 패턴으로 인해 성능 제한을 경험할 수 있습니다. 잠금 성능 에서는 이러한 요소가 MongoDB의 내부 잠금에 어떤 영향을 미치는지 설명합니다.

성능 문제는 데이터베이스가 용량으로 작동 중이고 데이터베이스에 추가 용량을 추가해야 할 때임을 나타낼 수 있습니다. 특히 애플리케이션의 작업 세트는 사용 가능한 실제 메모리에 적합해야 합니다.

경우에 따라 성능 문제는 일시적이며 비정상적인 트래픽 부하와 관련이 있을 수 있습니다. 연결 수 에서 설명한 대로 확장은 과도한 트래픽을 완화하는 데 도움이 될 수 있습니다.

데이터베이스 프로파일링을 통해 성능 저하를 초래하는 작업이 무엇인지 파악할 수 있습니다.

MongoDB는 데이터 세트 일관성을 보장하기 위해 잠금 시스템을 사용합니다. 특정 작업이 오래 실행되거나 대기열이 형성되면 요청 및 작업이 잠금을 대기함에 따라 성능이 저하됩니다.

잠금 관련 속도 저하가 간헐적으로 발생할 수 있습니다. 잠금이 성능에 영향을 미치는지 확인하려면 serverStatus 출력의 잠금 섹션과 globalLock 섹션을 참조하세요.

locks.<type>.timeAcquiringMicroslocks.<type>.acquireWaitCount로 나누면 특정 잠금 모드의 대략적인 평균 대기 시간을 구할 수 있습니다.

locks.<type>.deadlockCount 잠금 획득 시 교착 상태가 발생한 횟수를 제공합니다.

globalLock.currentQueue.total가 지속적으로 높으면 많은 수의 요청이 잠금을 기다리는 중일 가능성이 있습니다. 이는 성능에 영향을 미치는 동시성 문제가 있을 수 있음을 나타냅니다.

만약 globalLock.totalTimeuptime에 비해 높으면 데이터베이스가 상당한 시간 동안 잠금 상태로 존재한 것입니다.

긴 쿼리는 인덱스의 비효율적인 사용, 최적이 아닌 스키마 설계, 잘못된 쿼리 구조, 시스템 아키텍처 문제, 또는 부족한 RAM으로 인해 디스크 읽기가 발생할 수 있습니다.

어떤 경우에는 애플리케이션과 데이터베이스 간의 연결 수가 요청을 처리하는 서버의 능력을 압도할 수 있습니다. serverStatus 문서의 다음 필드에서 인사이트를 얻을 수 있습니다:

  • connections 다음 두 필드를 위한 컨테이너입니다.

    • connections.current 데이터베이스 인스턴스에 연결된 현재 클라이언트의 총 수입니다.

    • connections.available 새 클라이언트가 사용할 수 있는 미사용 연결의 총 개수입니다.

동시에 많은 애플리케이션 요청이 발생한 경우 데이터베이스가 수요를 따라잡는 데 문제가 있을 수 있습니다. 이 경우에는 배포서버의 용량을 늘려줍니다.

쓰기 작업이 많은 애플리케이션의 경우 샤딩을 배포하고 샤드 클러스터에 하나 이상의 샤드를 추가하여 mongod 인스턴스 간에 로드를 분산합니다.

연결 수의 급증은 애플리케이션 또는 드라이버 오류의 결과일 수도 있습니다.공식적으로 지원되는 모든 MongoDB 드라이버는 연결 풀링을 구현하여 클라이언트가 연결을 보다 효율적으로 사용하고 재사용할 수 있습니다. 특히 해당 워크로드가 없는 매우 높은 연결 수는 드라이버 또는 기타 구성 오류를 나타내는 경우가 많습니다.

시스템 전체 제한으로 제한되지 않는 한 MongoDB에서 지원하는 최대 수신 연결 수는 maxIncomingConnections 설정으로 구성됩니다. 유닉스 기반 시스템에서는 ulimit 명령을 사용하거나 시스템의 /etc/sysctl 파일을 편집하여 시스템 전체 제한을 수정할 수 있습니다. 자세한 내용은 UNIX ulimit 설정을 참조하세요.

MongoDB 엔지니어가 서버 동작을 분석할 있도록 mongodmongos 프로세스에는 FTDC(Full Time Diagnostic Data Capture) 메커니즘이 포함되어 있습니다. FTDC는 기본적으로 활성화되어 있습니다. 배포 디버깅에서 중요한 역할을 하기 때문에 FTDC 스레드 실패는 치명적이며 상위 mongod 또는 mongos 프로세스를 중지시킵니다.

중요

FTDC 개인정보 보호

FTDC 데이터 파일은 압축되어 있어 사람이 읽을 수 없습니다. 이 파일은 MongoDB 데이터 파일과 동일한 파일 액세스 권한을 상속받습니다. FTDC 데이터 파일에 액세스할 수 있는 사용자만 FTDC 데이터를 전송할 수 있습니다.

MongoDB 엔지니어는 시스템 소유자나 연산자의 명시적인 허가와 지원 없이는 FTDC 데이터에 액세스할 수 없습니다.

다음 정보는 FTDC 데이터에 절대 포함되지 않습니다.

  • 쿼리, 쿼리 조건자 또는 쿼리 결과의 샘플

  • 최종 사용자 컬렉션 또는 인덱스에서 샘플로 가져온 데이터

  • 시스템 또는 MongoDB 사용자 자격증명 또는 보안 인증서

FTDC 데이터에는 호스트 이름, 운영 체제 정보, mongod 또는 mongos 시작하는 데 사용된 옵션 또는 설정과 같은 특정 호스트 머신 정보가 포함되어 있습니다. 이 정보는 일부 조직 또는 규제 기관에서 보호되거나 기밀로 간주될 수 있지만 일반적으로 개인 식별 정보(PII)로 간주되지 않습니다. 이러한 필드가 보호, 기밀 또는 PII 데이터로 구성된 클러스터의 경우 FTDC 데이터를 전송하기 전에 MongoDB 엔지니어에게 알려 적절한 보안 조치를 조정하세요.

참고

Windows의 FTDC 사용자 권한

Windows에서 디스크, CPU, 메모리 등의 시스템 데이터를 수집하려면 FTDC가 다음 그룹의 Microsoft 액세스 권한을 요구합니다.

  • 성능 모니터 사용자

  • 성능 로그 사용자

mongodmongos 실행하는 사용자가 관리자가 아닌 경우 이러한 그룹에 추가하여 FTDC 데이터를 기록합니다.자세한 내용은 에서 Microsoft 설명서 를 참조하세요. .

FTDC는 다음 명령으로 생성된 통계를 주기적으로 수집합니다.

호스트 운영 체제에 따라 진단 데이터에는 다음 사용률 통계 중 하나 이상이 포함될 수 있습니다.

  • CPU 사용률

  • 메모리 효율성

  • 성능과 관련된 디스크 사용률입니다. FTDC에는 저장 용량과 관련된 데이터가 포함되지 않습니다.

  • 네트워크 성능 통계 FTDC는 메타데이터만 캡처하며 네트워크 패킷을 캡처하거나 검사하지 않습니다.

참고

mongod 프로세스가 container 에서 실행되는 경우 FTDC는 호스트 운영 체제가 아닌 container의 관점에서 사용률 통계를 보고합니다. 예를 들어 mongod 이(가) RAM 제한이 설정된 container에서 실행되는 경우 FTDC는 호스트 운영 체제의 RAM 제한이 아닌 container의 RAM 제한에 대해 메모리 사용률을 계산합니다.

FTDC는 파일 회전 또는 시작 시 다음 명령으로 생성된 통계를 수집합니다.

mongod 프로세스는 storage.dbPath 인스턴스 아래의 diagnostic.data 디렉토리에 FTDC 데이터 파일을 저장합니다. 모든 진단 데이터 파일은 이 디렉터리에 저장됩니다. 예를 들어 /data/dbdbPath 경우, 진단 데이터 디렉토리는 /data/db/diagnostic.data가 됩니다.

mongos프로세스는 systemLog.path 로그 경로 설정을 기준으로 진단 디렉토리에 FTDC 데이터 파일을 저장합니다. MongoDB는 로그 경로의 파일 확장자를 자르고 diagnostic.data를 나머지 이름에 연결합니다. 예를 들어 path 설정이 /var/log/mongodb/mongos.log인 경우 진단 데이터 디렉토리는 /var/log/mongodb/mongos.diagnostic.data가 됩니다.

FTDC 소스 코드는 MongoDB Github 리포지토리 에서 확인할 수 있습니다. . 파일은 ftdc_system_stats_*.ccp 캡처한 모든 시스템별 진단 데이터를 구체적으로 정의합니다.

FTDC는 다음과 같은 기본값으로 실행됩니다.

  • 1초마다 데이터 캡처

  • 최대 200MB diagnostic.data 폴더 크기

이러한 기본값은 성능이나 스토리지 크기에 미치는 영향을 최소화하면서 MongoDB 엔지니어에게 유용한 데이터를 제공하도록 설계되었습니다. 이러한 값은 MongoDB 엔지니어가 특정 진단 목적을 위해 요청한 경우에만 수정이 필요합니다.

FTDC를 비활성화하려면 mongod 또는 mongos를 구성 파일의 setParameter 설정에서 diagnosticDataCollectionEnabled: false 옵션으로 시작하세요:

setParameter:
diagnosticDataCollectionEnabled: false

FTDC를 비활성화하면 MongoDB 엔지니어의 지원을 받아 문제를 분석하거나 디버깅할 때 필요한 시간 또는 리소스가 늘어날 수 있습니다. MongoDB 지원에 대한 자세한 내용은 MongoDB 지원 시작하기 를 참조하세요.

← 개발 체크리스트