기본 MMAP 조언
기본 MMAP 조언 (Tuning Default MMAP Advice)
Pinot의 기본 메모리 매핑(MMAP) 모드와 관련된 설정 조언을 안내해요.
출처: 문서
본문
개요 (Overview)
Pinot 서버는 기본적으로 MMAP 로드 모드를 사용해 세그먼트를 매핑해요. MMAP은 세그먼트 인덱스 파일을 직접 메모리에 매핑해 디스크 I/O와 메모리 사용 사이에서 균형을 유지해요. MMAP을 올바르게 튜닝하면 쿼리 성능과 메모리 안정성을 크게 개선할 수 있어요.
MMAP과 메모리 (MMAP and memory)
MMAP 모드에서는 운영 체제가 인덱스 파일을 페이지 캐시로 매핑하고, 많은 양의 데이터가 off-heap(직접) 메모리에 상주할 수 있어요. 힙(heap) 메모리보다 직접 메모리(direct memory)와 페이지 캐시가 쿼리 성능에 큰 영향을 미쳐요.
서버 구성 (Server config)
서버의 직접 메모리(direct memory) 크기를 적절히 설정하는 것이 중요해요. 기본적인 관련 구성은 다음과 같아요:
- 서버 JVM의 직접 메모리 최대치(
-XX:MaxDirectMemorySize)를 워크로드에 맞게 늘려요. - 너무 작으면
OutOfDirectMemoryError가 발생하고, 너무 크면 OS 페이지 캐시가 부족해질 수 있어요.
모범 사례 (Best practices)
- 실시간 서버의 소비(consuming) 세그먼트는 힙에 상주하므로 힙과 off-heap 사용량을 함께 모니터링하세요.
- 오프라인 서버는 대부분 off-heap/페이지 캐시를 쓰므로 OS 페이지 캐시를 충분히 확보하세요.
- 손상 검사(inverted index 등)가 있는 인덱스는 MMAP에서 충분한 직접 메모리가 필요할 수 있어요.