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: 느린 애플리케이션 성능
mongostat실행:qr,aw,insert,query,update,delete비율을 관찰합니다.qr또는aw가 높거나 작업 속도가 높지만 빠르게 처리되지 않는 것 같으면 백로그를 나타냅니다.mongotop실행: 가장 많은read ms및write ms를 경험하는 컬렉션을 식별합니다. 쓰기 활동이 많은 컬렉션은 다른 작업을 느리게 할 수 있습니다.- 쿼리 계획 확인:
mongotop이 식별한 핫 컬렉션에 대해 대표적인 느린 쿼리에서explain("executionStats")를 실행합니다. mongostat의networkIn/networkOut분석: 비정상적으로 높으면 큰 결과 집합, 큰 집계 또는 복제 트래픽을 찾으십시오.
시나리오 2: 높은 CPU 또는 메모리 사용량
mongostat실행:res(상주 메모리) 및 CPU 사용량(종종top또는htop과 같은 시스템 도구를 통해 관찰 가능하지만mongostat은 DB별 관점을 제공)을 모니터링합니다. 높은res는 wiredTiger 캐시(used %)와 상관관계가 있을 수 있습니다.mongotop검토: 특정 컬렉션의 높은 읽기/쓰기 ms는 높은 CPU 사용량에 기여할 수 있습니다.mongostat의 작업 속도 확인: 삽입/업데이트/삭제가 매우 높으면 자연스럽게 CPU를 소비합니다.- WiredTiger 캐시 및 디스크 메트릭 조사: 애플리케이션 쓰기가 느려지는 동안 더티 캐시가 높게 유지되면 MongoDB 출력을 호스트 디스크 대기 시간 및 I/O 포화도와 비교하세요.
시나리오 3: 복제 지연
mongotop과 mongostat은 복제 지연을 직접 측정하지 않지만 지연의 원인을 이해하는 데 중요합니다.
- 프라이머리에서
mongostat실행: 높은qr또는aw, 높은 쓰기 작업 속도 또는 높은 CPU/메모리 사용량을 찾으십시오. 프라이머리가 과부하되면 oplog에 효율적으로 쓸 수 없어 세컨더리에 지연이 발생합니다. - 세컨더리에서
mongostat실행: 읽기/쓰기 작업을 관찰합니다. 세컨더리가 oplog 항목을 적용하는 데 느린 경우 세컨더리의 리소스 부족 또는 적용되는 비효율적인 쿼리/작업 때문일 수 있습니다.
팁 및 모범 사례
- 정기적으로 도구 실행: 성능 문제가 발생할 때까지 기다리지 마십시오. MongoDB 인스턴스를 사전에 모니터링하세요.
- 기준 설정: 배포에서 "정상"이 무엇인지 이해하십시오. 이렇게 하면 편차를 더 쉽게 발견할 수 있습니다.
- 다른 도구와 결합:
mongotop및mongostat은 실시간 스냅샷에 탁월합니다. 기록 분석을 위해 MongoDB의 내장 성능 모니터링(예:db.serverStatus(),db.stats()) 또는 MongoDB 익스포터가 있는 Prometheus, 클라우드 제공업체 모니터링 서비스와 같은 외부 도구 사용을 고려하세요. - 작업 세트 이해: 활성 데이터 세트의 크기를 아는 것은 메모리 관리와 wiredTiger 캐시 효율성을 이해하는 데 중요합니다.
- 쿼리 계획에 집중:
explain("executionStats")및 느린 쿼리 로그를 사용하여 누락되었거나 비효율적인 인덱스로 인한 스캔 여부를 확인하세요. - 연결 풀링 고려: 높은
conn수는 애플리케이션 계층에서 적절한 연결 풀링을 구현하여 완화할 수 있는 경우가 많습니다.
핵심 요점
mongostat을 사용하여 서버 수준의 압력을 이해하고 mongotop을 사용하여 가장 많은 읽기 또는 쓰기 주의를 받는 컬렉션을 찾으십시오. 어느 도구가 핫 영역을 가리키면 인덱스를 변경하거나 배포를 확장하기 전에 쿼리 계획, 느린 쿼리 로그, 호스트 메트릭 및 애플리케이션 연결 동작을 통해 원인을 확인하세요.