max_threads
WHERE로 필터링하고, GROUP BY를 위한 사전 집계를 최소 ‘max_threads’개의 스레드로 병렬 수행할 수 있다면 ‘max_threads’가 사용됩니다.
LIMIT 때문에 빠르게 완료되는 쿼리에는 더 작은 ‘max_threads’ 값을 설정할 수 있습니다.
예를 들어 필요한 항목 수가 모든 block에 들어 있고 max_threads = 8이면, 실제로는 하나만 읽어도 충분하더라도 8개의 block을 가져오게 됩니다.
max_threads 값이 작을수록 메모리 사용량이 줄어듭니다.
기본적으로 max_threads 설정은 ClickHouse에서 사용할 수 있는 하드웨어 스레드 수(CPU 코어 수)에 맞춰집니다.
예외적으로, CPU 코어가 32개 미만이고 SMT(예: Intel HyperThreading)를 사용하는 x86 프로세서에서는 기본값으로 논리 코어 수(= 물리 코어 수 x 2)를 사용합니다.
SMT(예: Intel HyperThreading)가 없으면 이는 CPU 코어 수와 같습니다.
ClickHouse Cloud 사용자의 경우 기본값은 auto(N)으로 표시되며, 여기서 N은 서비스의 vCPU 크기(예: 2vCPU/8GiB, 4vCPU/16GiB 등)와 일치합니다.
모든 서비스 크기 목록은 Cloud Console의 설정 탭에서 확인할 수 있습니다.
max_threads_for_indexes
max_threads_min_free_memory_per_thread
max_threads를 낮춰, 메모리 한도에 도달할 가능성이 높은 고병렬 쿼리가 시작되지 않도록 합니다.
사용 가능한 메모리는 서버의 max_server_memory_usage에서 전역 memory tracker가 현재 추적 중인 메모리를 뺀 값으로 계산됩니다. 이 사용 가능한 메모리가 max_threads에 이 값을 곱한 값보다 작으면, N * value <= free_memory를 만족하는 가장 큰 N이 되도록 max_threads를 줄이며, 최솟값은 1입니다.
이 제한을 비활성화하려면 0으로 설정합니다.
예를 들어 기본값이 1 GiB이고 사용 가능한 메모리가 32 GiB이면 max_threads의 상한은 32가 되며, 사용 가능한 메모리가 1 GiB이면 1로 낮아집니다.
이 설정은 읽기 측 병렬성(SELECT, UNION, INTERSECT/EXCEPT, 그리고 INSERT ... SELECT의 SELECT 측)에 적용됩니다. 쓰기 측은 max_insert_threads_min_free_memory_per_thread를 참조하십시오.