max_server_memory_usage 서버 설정
max_server_memory_usage 서버 설정
이 페이지에서는 서버가 사용할 수 있는 최대 메모리 양을 절대값과 RAM 비율로 제어하는 max_server_memory_usage 및 max_server_memory_usage_to_ram_ratio 설정을 설명할게요.
출처: 문서
본문
이 설정들은 ClickHouse 서버를 구성하며, ClickHouse 소스에서 자동으로 생성돼요.
max_server_memory_usage
서버가 사용할 수 있는 최대 메모리 양(바이트)이에요. 서버의 최대 메모리 소비는 max_server_memory_usage_to_ram_ratio를 설정하여 추가로 제한돼요. 특별한 경우로, 값 0(기본값)은 서버가 모든 가용 메모리를 소비할 수 있다는 뜻이에요 (max_server_memory_usage_to_ram_ratio가 부과하는 추가 제한은 제외).
max_server_memory_usage_to_ram_ratio
서버가 사용할 수 있는 최대 메모리 양을 사용 가능한 전체 메모리에 대한 비율로 표현한 값이에요. 예를 들어 값 0.9(기본값)는 서버가 가용 메모리의 90%를 소비할 수 있다는 뜻이에요. 낮은 메모리 시스템에서 메모리 사용량을 낮출 수 있어요. RAM과 스왑이 적은 호스트에서는 max_server_memory_usage_to_ram_ratio를 1보다 크게 설정해야 할 수도 있어요.
이 비율은 두 가지 방식으로 적용돼요:
- 시작 시(및 구성 재로드 시) 서버의 하드 메모리 한도를 위에서 설명한 대로 전체 물리 RAM의 이 분율로 상한을 정해요.
- 런타임에는 백그라운드 메모리 워커가 하드 메모리 한도를
(resident memory + system available memory) * max_server_memory_usage_to_ram_ratio로 주기적으로 다시 계산하므로, 서버는 같은 호스트에서 실행되는 다른 프로세스에 여유(headroom)를 남겨요. 유한한 메모리 한도가 있는 cgroup 안에서 실행되면 호스트 전체 값 대신 cgroup의 가용 메모리가 사용돼요. 다른 프로세스가 성장하고 가용 메모리가 줄어들수록 서버의 하드 한도도 따라서 내려가서 호스트(또는 cgroup)의 메모리가 고갈되기 전에 성장이 제한돼요.
비율을 0으로 설정하면 시작 상한과 런타임 조정이 모두 비활성화돼요. 런타임 조정은 또한 비-Linux 시스템과 이 설정을 노출하지 않는 clickhouse-keeper에서는 아무 효과 없어요. 정적 시작/재로드 상한은 유지하되 런타임 조정만 비활성화하려면(이전 버전의 동작) memory_worker_dynamic_hard_limit을 0으로 설정하세요. 서버의 최대 메모리 소비는 max_server_memory_usage를 설정하여 추가로 제한돼요.