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

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

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

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

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

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 ms 및 write ms를 경험하는 컬렉션을 식별합니다. 쓰기 활동이 많은 컬렉션은 다른 작업을 느리게 할 수 있습니다.
  3. 쿼리 계획 확인: mongotop이 식별한 핫 컬렉션에 대해 대표적인 느린 쿼리에서 explain("executionStats")를 실행합니다.
  4. mongostat의 networkIn/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: 복제 지연

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

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

팁 및 모범 사례

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

핵심 요점

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