mongotop 및 mongostat을 사용한 MongoDB 성능 메트릭 분석 가이드

mongotop과 mongostat을 사용하여 핫 컬렉션, 리소스 압력, 연결 급증 및 느린 MongoDB 패턴을 식별하세요.

mongotop 및 mongostat을 사용한 MongoDB 성능 메트릭 분석 가이드

MongoDB 성능 문제는 종종 느린 페이지, 백업된 쓰기 또는 갑작스러운 연결 급증으로 나타납니다. MongoDB 데이터베이스 도구와 함께 설치되는 mongotopmongostat은 서버가 현재 수행 중인 작업을 터미널에서 빠르게 볼 수 있게 해줍니다.

이 가이드는 일반적인 문제 발생 시 이러한 도구를 읽는 방법과 출력을 인덱스, 쿼리 형태, 연결 풀링 및 디스크 압력과 같은 다음 확인 사항에 연결하는 방법을 보여줍니다.

mongotop 이해하기

mongotop은 MongoDB 인스턴스에서 발생하는 읽기 및 쓰기 작업에 대한 실시간 보기를 제공합니다. 지정된 간격 동안 각 컬렉션이 읽기 또는 쓰기 작업에 소비한 시간을 표시합니다. 이는 가장 활동이 많고 잠재적으로 성능 저하의 원인이 될 수 있는 컬렉션을 식별하는 데 특히 유용합니다.

mongotop이 제공하는 주요 메트릭:

  • ns: 컬렉션의 네임스페이스(데이터베이스.컬렉션).
  • total: 샘플 간격 동안 네임스페이스에서 읽고 쓰는 데 소요된 시간.
  • read: 샘플 간격 동안 읽기 활동에 소요된 시간.
  • write: 샘플 간격 동안 쓰기 활동에 소요된 시간.

mongotop 사용 방법:

MongoDB 데이터베이스 도구가 설치되어 있고 PATH에 액세스할 수 있는 경우 터미널에서 직접 mongotop을 실행할 수 있습니다. 기본적으로 1초마다 업데이트됩니다. 간격을 초 단위로 지정할 수도 있습니다.

mongotop

업데이트 간격을 지정하려면(예: 5초마다):

mongotop 5

다른 호스트 및 포트에서 실행 중인 MongoDB 인스턴스에 대해 mongotop을 실행하려면:

mongotop --host <호스트명> --port <포트>

mongotop 출력 해석:

  • 특정 컬렉션의 높은 write 시간: 컬렉션에 쓰기 활동이 많습니다. 쓰기 볼륨, 문서 증가, 쓰기가 영향을 미치는 인덱스, 워크로드를 샤딩해야 하는지 확인하세요.
  • 높은 read 시간: 해당 컬렉션의 쿼리 계획을 확인하세요. 누락된 인덱스, 큰 결과 집합 및 집계 스캔이 여기에서 자주 나타납니다.
  • 일관되게 높은 total 시간을 가진 컬렉션: 가장 핫한 컬렉션입니다. 인덱스, 작업 세트 및 쿼리 패턴을 면밀히 모니터링하세요.

mongostat 이해하기

mongostat은 MongoDB 인스턴스의 성능 및 리소스 사용률에 대한 광범위한 실시간 개요를 제공합니다. 초당 작업 수, 네트워크 트래픽, 디스크 I/O 및 메모리 사용량을 포함한 서버 상태에 대한 다양한 메트릭을 수집하고 표시합니다.

mongostat이 제공하는 주요 메트릭:

  • insert: 초당 삽입 작업 수.
  • query: 초당 쿼리 작업 수.
  • update: 초당 업데이트 작업 수.
  • delete: 초당 삭제 작업 수.
  • getmore: 초당 getmore 작업 수(커서에 사용됨).
  • command: 초당 명령 작업 수.
  • dirty 또는 dirty %: 메모리에서 수정되었지만 아직 디스크에 기록되지 않은 WiredTiger 캐시 데이터. 정확한 열 이름은 MongoDB 및 도구 버전에 따라 다릅니다.
  • used 또는 used %: WiredTiger 캐시 사용량. 정확한 열 이름은 MongoDB 및 도구 버전에 따라 다릅니다.
  • conn: 현재 연결 수.
  • networkIn: 서버가 수신한 네트워크 트래픽(바이트).
  • networkOut: 서버가 전송한 네트워크 트래픽(바이트).
  • res: MongoDB 프로세스에서 사용하는 상주 메모리 크기(MB).
  • qr|qw: 대기 중인 읽기 및 쓰기 작업 수(열을 사용할 수 있는 경우).
  • ar|aw: 활성 읽기 및 쓰기 클라이언트 수(열을 사용할 수 있는 경우).

mongostat 사용 방법:

mongostat도 명령줄 유틸리티입니다. mongotop과 유사하게 주기적으로 업데이트되며 기본 간격은 5초입니다. 다른 간격 및 연결 세부 정보를 지정할 수 있습니다.

mongostat

업데이트 간격을 지정하려면(예: 2초마다):

mongostat 2

원격 MongoDB 인스턴스에 연결하려면:

mongostat --host <호스트명> --port <포트>

mongostat 출력 해석:

  • 높은 insert, query, update 또는 delete 비율: 과중한 운영 부하를 나타냅니다. 시스템이 따라잡고 있는지 이해하기 위해 다른 메트릭과 함께 모니터링하세요.
  • 높은 conn: 많은 수의 연결이 서버 리소스에 부담을 줄 수 있습니다. 예상보다 높은 경우 애플리케이션의 연결 풀링을 조사하세요.
  • 높은 networkIn 또는 networkOut: 상당한 데이터 전송을 시사합니다. 이는 대규모 쿼리, 복제 트래픽 또는 반환되는 큰 결과 집합으로 인해 발생할 수 있습니다.
  • 높은 res: MongoDB 프로세스가 많은 RAM을 소비하고 있습니다. 서버에 충분한 메모리가 있는지 확인하고 높은 메모리 사용량에 기여할 수 있는 비효율적인 쿼리 또는 대규모 데이터 세트가 있는지 확인하세요.
  • 높은 qr|qw: 읽기 또는 쓰기가 대기 중임을 나타내며, 이는 일반적으로 리소스 경합 또는 서버가 충분히 빠르게 처리할 수 없는 워크로드를 가리킵니다.
  • 높은 dirty 또는 캐시 used: WiredTiger 캐시 압력이 계속 높게 유지되면 작업 세트가 메모리에 편안하게 맞지 않거나 디스크 쓰기가 뒤쳐지고 있을 수 있습니다.
  • 낮은 작업 속도로 느린 쿼리: 프로파일러, 느린 쿼리 로그 또는 explain()을 사용하여 쿼리가 너무 많은 문서를 스캔하고 있는지 확인하세요. 최신 mongostat 출력은 WiredTiger 배포에 대한 단일 인덱스 미스 비율을 안정적으로 노출하지 않습니다.

실제 사용 사례 및 문제 해결 시나리오

시나리오 1: 느린 애플리케이션 성능

  1. mongostat 실행: qr, aw, insert, query, update, delete 비율을 관찰합니다. qr 또는 aw가 높거나 작업 속도가 높지만 빠르게 처리되지 않는 것 같으면 백로그를 나타냅니다.
  2. mongotop 실행: 가장 많은 read mswrite ms를 경험하는 컬렉션을 식별합니다. 쓰기 활동이 많은 컬렉션은 다른 작업을 느리게 할 수 있습니다.
  3. 쿼리 계획 확인: mongotop이 식별한 핫 컬렉션에 대해 대표적인 느린 쿼리에서 explain("executionStats")를 실행합니다.
  4. mongostatnetworkIn/networkOut 분석: 비정상적으로 높으면 큰 결과 집합, 큰 집계 또는 복제 트래픽을 찾으십시오.

시나리오 2: 높은 CPU 또는 메모리 사용량

  1. mongostat 실행: res(상주 메모리) 및 CPU 사용량(종종 top 또는 htop과 같은 시스템 도구를 통해 관찰 가능하지만 mongostat은 DB별 관점을 제공)을 모니터링합니다. 높은 res는 wiredTiger 캐시(used %)와 상관관계가 있을 수 있습니다.
  2. mongotop 검토: 특정 컬렉션의 높은 읽기/쓰기 ms는 높은 CPU 사용량에 기여할 수 있습니다.
  3. mongostat의 작업 속도 확인: 삽입/업데이트/삭제가 매우 높으면 자연스럽게 CPU를 소비합니다.
  4. WiredTiger 캐시 및 디스크 메트릭 조사: 애플리케이션 쓰기가 느려지는 동안 더티 캐시가 높게 유지되면 MongoDB 출력을 호스트 디스크 대기 시간 및 I/O 포화도와 비교하세요.

시나리오 3: 복제 지연

mongotopmongostat은 복제 지연을 직접 측정하지 않지만 지연의 원인을 이해하는 데 중요합니다.

  1. 프라이머리에서 mongostat 실행: 높은 qr 또는 aw, 높은 쓰기 작업 속도 또는 높은 CPU/메모리 사용량을 찾으십시오. 프라이머리가 과부하되면 oplog에 효율적으로 쓸 수 없어 세컨더리에 지연이 발생합니다.
  2. 세컨더리에서 mongostat 실행: 읽기/쓰기 작업을 관찰합니다. 세컨더리가 oplog 항목을 적용하는 데 느린 경우 세컨더리의 리소스 부족 또는 적용되는 비효율적인 쿼리/작업 때문일 수 있습니다.

팁 및 모범 사례

  • 정기적으로 도구 실행: 성능 문제가 발생할 때까지 기다리지 마십시오. MongoDB 인스턴스를 사전에 모니터링하세요.
  • 기준 설정: 배포에서 "정상"이 무엇인지 이해하십시오. 이렇게 하면 편차를 더 쉽게 발견할 수 있습니다.
  • 다른 도구와 결합: mongotopmongostat은 실시간 스냅샷에 탁월합니다. 기록 분석을 위해 MongoDB의 내장 성능 모니터링(예: db.serverStatus(), db.stats()) 또는 MongoDB 익스포터가 있는 Prometheus, 클라우드 제공업체 모니터링 서비스와 같은 외부 도구 사용을 고려하세요.
  • 작업 세트 이해: 활성 데이터 세트의 크기를 아는 것은 메모리 관리와 wiredTiger 캐시 효율성을 이해하는 데 중요합니다.
  • 쿼리 계획에 집중: explain("executionStats") 및 느린 쿼리 로그를 사용하여 누락되었거나 비효율적인 인덱스로 인한 스캔 여부를 확인하세요.
  • 연결 풀링 고려: 높은 conn 수는 애플리케이션 계층에서 적절한 연결 풀링을 구현하여 완화할 수 있는 경우가 많습니다.

핵심 요점

mongostat을 사용하여 서버 수준의 압력을 이해하고 mongotop을 사용하여 가장 많은 읽기 또는 쓰기 주의를 받는 컬렉션을 찾으십시오. 어느 도구가 핫 영역을 가리키면 인덱스를 변경하거나 배포를 확장하기 전에 쿼리 계획, 느린 쿼리 로그, 호스트 메트릭 및 애플리케이션 연결 동작을 통해 원인을 확인하세요.