본문 바로가기

IT/몽고DB

몽고DB - Cache Dirty

300x250
  • MongoDB의 성능 저하와 관련된 문제를 해결하려면 아래와 같은 주요 단계들을 점검하고 최적화 방안을 고려해야 합니다.
  • cache dirty가 증가하고 있는 상황은 메모리 관리 및 데이터 처리와 밀접한 연관이 있으므로, 이를 포함한 종합적인 접근이 필요합니다.

Cache Dirty 문제 분석

MongoDB에서 cache dirty가 증가하는 주요 원인은 다음과 같습니다

  • 쓰기 작업의 과도한 증가: 데이터가 빠르게 쓰여지고 있지만, 디스크로의 flush 속도가 이를 따라가지 못할 때 발생합니다.
  • 메모리 부족: MongoDB가 데이터 캐싱에 필요한 메모리를 충분히 확보하지 못하는 경우.
  • WiredTiger 캐시 부족: WiredTiger 엔진은 기본적으로 메모리의 50%를 사용하며, 이 캐시가 부족하면 문제가 발생할 수 있습니다.

조치 방안

  • cache eviction 상태 확인: db.serverStatus().wiredTiger.cache 명령으로 eviction 관련 상태를 확인
db.serverStatus().wiredTiger.cache
  • dirty cache 비율 확인: 해당 비율이 너무 높으면, 데이터를 디스크로 쓰는 속도를 높이는 설정이 필요합니다.
  • journalCompressor: Snappy, zlib 등의 설정을 적절히 사용하여 디스크 I/O를 최적화합니다.
  • writeConcern 조정: 쓰기 작업의 writeConcern 옵션을 낮춰 I/O 부담을 줄여야 할 수도 있습니다.

MongoDB 인스턴스의 현재 상태 점검

성능 저하가 발생하는 정확한 원인을 분석하기 위해 다음을 확인하세요

  • 디스크 I/O 사용량
iostat -x
  • 디스크가 과도한 쓰기 작업으로 병목이 발생하고 있는지 확인합니다.
  • 메모리 사용량 확인: MongoDB가 메모리를 제대로 활용하고 있는지 확인.
free -m
  • 쿼리 성능 분석: 실행 중인 쿼리가 비효율적인 경우가 많습니다. 느린 쿼리를 확인하고 인덱스를 최적화해야 합니다.
db.currentOp({ "active": true })
db.system.profile.find().sort({ ts: -1 }).limit(10)

최적화 방안

(1) 인덱스 최적화

  • 인덱스를 점검하여 불필요한 Full Collection Scan을 방지하세요
db.collection.getIndexes()
  • 쿼리에 자주 사용되는 필드가 인덱스에 포함되어 있는지 확인합니다.

(2) 샤딩 도입

데이터가 많아졌다면 샤딩(Sharding)을 고려해야 합니다.

  • 데이터를 샤드 키를 기준으로 분산하면 I/O 병목을 줄일 수 있습니다.
  • 샤드 키는 쿼리 패턴에 맞춰 선택해야 하며, 가능한 균등하게 데이터를 분산하도록 설정합니다.

(3) 아카이빙 및 데이터 파티셔닝

  • 오래된 데이터를 주기적으로 아카이빙하거나 별도의 디비로 분리하여 운영.
  • TTL 인덱스를 사용해 특정 기간이 지난 데이터를 자동으로 삭제
db.collection.createIndex({ "createdAt": 1 }, { expireAfterSeconds: 3600 })

 

(4) WiredTiger 캐시 설정 조정

MongoDB의 기본 캐시 비율을 늘리는 것을 고려.

  • --wiredTigerCacheSizeGB를 통해 WiredTiger 캐시 크기를 조정
mongod --wiredTigerCacheSizeGB 4

 

(5) 하드웨어 업그레이드

  • 디스크: SSD로 업그레이드하면 IOPS(초당 입출력 작업 수)가 개선됩니다.
  • 메모리 추가: MongoDB는 메모리에 의존하므로 충분한 메모리를 확보하세요.
300x250

'IT > 몽고DB' 카테고리의 다른 글

몽고DB - mongos  (0) 2025.02.19
몽고DB expire after 동작 주기  (1) 2025.02.13
몽고DB 쿼리 실행계획 조회  (0) 2025.02.11
MongoDB 샤드키 선정 정책  (0) 2025.02.06
MongoDB 클러스터 구성 요건  (0) 2025.02.06