[컴][db] MongoDB WiredTiger의 Memory 사용

몽고db / 몽고 메모리 / 몽고디비 / 와어어드 타이거 / 메모리 사용

MongoDB WiredTiger의 Memory 사용

대략적으로 설명하면,

  • 기본적으로 mongodb WiredTiger 는 data 를 압축해서 저장한다.
  • 그러나 사용시점에는 압축을 풀고 사용한다.
  • 그래서 internal cache 에는 압축이 풀린 상태로 caching 을 한다.
  • os 의 filesystem cache 도 같이 사용된다.
    • mongo db 가 data 를 가져오려고 접근했던 disk 의 내용이 ram 에 일정기간 머무르게 되는 것으로 보면 될 것 같다.
    • 그래서 이 filesystem cache 는 그냥 압축이 된 상태로 들어가 있다.

예를 들어 WiredTiger 가 어떤 data 가 internal cache 에 없고, os filesystem cache에 있다고 하자. 이때 WiredTiger 가 data 에 access 하면, os에 의해 ram 에 올라가 있는 data(caching 된 data) 가 WiredTiger 에게 전해지고, 이것을 다시 압축을 풀어서 원하는 data 를 사용하게 될 것이다.

아래는 ref.1 의 내용을 번역했다.

MongoDB 는 기본 configuration(설정) 에서 256MB 또는 1/2 * (총ram - 1GB) 중에 큰 쪽을 택한다. /etc/mongod.conf file 에 cacheSizeGB argument 를 추가해서 몽고db 캐시 크기를 제한할 수 있다.

WiredTiger 는 기본적으로 모든 collection 들과 모든 index들의 prefix 압축에 Snappy block 압축을 사용한다. 압축 기본값들은 collection 과 index 생성시점에, global level 에서 설정할 수 있고, collection 별로, index 별로 설정할 수도 있다.

  • filesystem cache 에 있는 data 는 data file 들에 대한 압축의 이익들을 포함해서 on-disk format 과 같다. os는 disk I/O 를 줄이기 위해 파일 시스템 cache(filesystem cache)를 사용한다.
  • WiredTiger internal cache에 load 되는 index 들은 on-disk format 과는 다른 data 표현을 갖는다. 하지만 여전히 RAM 사용량을 줄이기 위해서 index prefix 압축을 이용할 수 있다. index prefix 압축은 index된 필드들에서 공통의 prefix들을 없애준다.(deduplicate)
  • WiredTiger internal cache에 있는 collection data 는 압축되어있지 않고, on-disk format 과는 다른 표현(representation)을 사용한다. Block 압축은 놀랄만한 on-disk storage 절약을 제공할 수 있지만 data 가 server 에 의해 manipulate 되기 위해서는 압축이 안된 상태여야만 한다.

filesystem cache 를 통해, MongoDB 는 "자동으로 WiredTiger cache로 사용되지 않거나, 다른 process에 의해 사용되지 않는 모든 free memory" 를 사용하게 된다.

See Also

  1. 쿠...sal: [컴][db] MongoDB, WiredTiger 의 data 압축
  2. 쿠...sal: [컴][db] mongodb 에서 필요한 메모리 size 결정하는데 도움이 되는 정보 확인 

Reference

  1. WiredTiger Storage Engine — MongoDB Manual

댓글 없음:

댓글 쓰기