MongoDB : RAM 요구 사항


20

전체 인덱스를 메모리 / 램에 저장하는 것만으로 충분합니까, mongodb는 심지어 빠른 읽기를 위해 데이터까지 저장하기 위해 가능한 한 많은 램을 할당하려고합니까?

mongodb + 다른 응용 프로그램을 실행하고 싶습니다. mongodb는 "max_memory_allocated_or_reserved = 8GB"라고 말할 수 있도록 RAM 범위를 정의 할 수없는 유일한 것 같습니다.

그렇게 할 방법이 없다면, 나는 mongod가 내 생각에 가장 좋은 방법이 아닌 "나쁜"과정이라고 oom-killer에게 설명해야한다 ...

답변:


18

요청한대로 메모리를 제한 할 수없는 실제 이유는 MongoDB가 직접 사용하는 메모리를 관리하지 않기 때문에 OS가이를 수행 할 수 있기 때문입니다. MongoDB는 메모리에 모든 데이터를 매핑 한 다음 필요에 따라 OS 페이지에 메모리 안팎을 표시합니다. 결과적으로 MongoDB가이를 완전히 다른 방식으로 구현하거나 OS가 허용 할 때까지 (2.4 일 이후 Linux에서는 불가능) 사용 가능한 양을 직접 관리 할 수 ​​없습니다.

현재 리소스를 실제로 분리하는 유일한 방법은 가상화 솔루션을 사용하고 MongoDB를 자체 VM에서 격리하는 것입니다. 예, 오버 헤드가 수반되지만 (하이퍼 바이저가 훨씬 더 나아졌지 만) 현재로서는 해당 수준의 리소스 제어에 대해 지불해야 할 가격입니다.

데이터 세트 및 인덱스가 사용 가능한 메모리를 초과하는 한 호스트에 다른 프로세스가 없어도 OOM Killer와 관련하여 MongoDB는 OOM Killer 문제를 일으킬 수 있습니다. 메모리 부족이 발생하지 않고 (기존 메모리를 원치 않는 것) 새로운 데이터와 인덱스를 계속 추가 / 터치하면 결국 사용 가능한 모든 RAM을 소비하게됩니다. 따라서 MongoDB를 실행할 때 항상 일부 스왑을 구성하는 것이 좋습니다.

https://docs.mongodb.com/manual/administration/production-notes/#swap

물론 LRU 데이터가 먼저 페이징되고 다른 프로세스가 결과를 차지할 수도 있지만 데이터 세트를 메모리에로드 한 다음 정적 상태를 유지하지 않으면 개념이 계속 적용됩니다. 걱정되는 경우 가장 좋은 방법은 MMS로 가져와 시간이 지남에 따라 사용량을 추적하는 것입니다.

http://mms.mongodb.com

업데이트 : 2015 년 8 월

이 답변을 썼기 때문에 상황이 다소 바뀌었고 정보가 약간 오래된 것입니다. 예를 들어, Linux에는 이제 cgroup 및 관련 기술 ( 예 : Docker 컨테이너 )이있어 프로덕션 환경의 모든 프로세스에서 사용하는 리소스 ( 메모리 포함 ) 를 더 잘 격리하고 제한 할 수있는 수준까지 발전했습니다. MongoDB와 같은 메모리 매핑.

또한 MongoDB 3.0+의 WiredTiger와 같은 MMAP 이외의 새로운 스토리지 엔진이 등장하면서 내장 기능을 사용 하여 MongoDB 의 캐시 크기제한 할 수 있습니다 . 따라서 RAM 요구 사항은 이제 MongoDB 구성 방법, 실행 환경 및 선택한 스토리지 엔진에 따라 달라집니다.


WiredTiger 관련 : " storage.wiredTiger.engineConfig.cacheSizeGB는 mongod가 사용하는 총 메모리 양이 아니라 WiredTiger 캐시의 크기 만 제한합니다. WiredTiger 캐시는 MongoDB에서 사용하는 RAM의 구성 요소 중 하나 일뿐입니다. 파일 시스템 캐시를 통해 시스템의 사용 가능한 메모리 ... "
Stefan Rogin

디스크에서 데이터를 페이징하는 모든 응용 프로그램에 대해서도 마찬가지입니다. FS 캐시는 더 이상 MMAP 스토리지 엔진의 메모리 매핑 된 파일을 사용하는 것처럼 데이터의 기본 캐싱 방법이 아닙니다
Adam C

6

MongoDB는 캐싱에 사용 가능한 여유 메모리를 사용하고 동일한 서버의 다른 응용 프로그램에 메모리를 생성하는 데 필요한 디스크로 스왑합니다. 최상의 성능을 위해서는 인덱스와 자주 사용하는 데이터 ( "작업 세트")를 메모리에 유지하기에 충분한 RAM이 필요합니다.

유용한 독서 :


3

MongoDB와 관련하여 몇 년 동안 무언가가 바뀌 었습니다.

TL; DR

MMAPv1 스토리지 엔진을 MongoDB working set크기 로 사용하는 경우 RAM에 맞아야합니다 . https://docs.mongodb.com/manual/faq/diagnostics/#must-my-working-set-size-fit-ram

MondDB에서 WiredTiger 스토리지 엔진을 사용하는 경우 RAM이 적합하지 않은지 걱정할 필요가 working set없습니다 . https://docs.mongodb.com/manual/faq/diagnostics/#memory-diagnostics-for-the-wiredtiger-storage-engine

WiredTiger 스토리지 엔진의 메모리 진단

작업 세트 크기가 RAM에 맞아야합니까?

아니.

응용 프로그램에 필요한 RAM 양을 어떻게 계산합니까?

MondDB는 WiredTiger와 함께 WiredTiger 내부 캐시와 파일 시스템 캐시를 모두 사용합니다.

버전 3.2으로 변경 : MongoDB 3.2부터 WiredTiger 내부 캐시는 기본적으로 다음 중 하나를 사용합니다.

RAM의 60 %-1GB 또는 1GB


글쎄,이 대답은별로 도움이되지도 않고 정확하게 정확하지도 않습니다.
Philip Schiff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.