최대 스레드 관련 설정

최대 스레드 관련 설정

쿼리 처리 스레드의 최대 수와 관련 동작을 제어하는 설정들이에요. 인덱스 처리 스레드, 메모리 압박 시의 스레드 감소 등을 다룬답니다. 이 설정들은 system.settings 테이블에서 확인할 수 있고 소스 코드에서 자동 생성된 값들이에요.

출처: 문서

본문

이 설정들은 system.settings에서 확인할 수 있고, 소스 코드에서 자동 생성된 값들이에요.

max_threads

원격 서버에서 데이터를 가져오는 스레드를 제외한 최대 쿼리 처리 스레드 수예요('max_distributed_connections' 파라미터 참조). 이 파라미터는 쿼리 처리 파이프라인의 같은 단계를 병렬로 수행하는 스레드에 적용돼요.

예를 들어 테이블에서 읽을 때, 함수로 표현식을 평가하고 WHERE로 필터링하며 GROUP BY로 사전 집계하는 것을 적어도 'max_threads' 수의 스레드로 병렬 수행할 수 있다면 'max_threads'가 사용돼요.

LIMIT 때문에 빠르게 완료되는 쿼리의 경우 더 낮은 'max_threads'를 설정할 수 있어요. 예를 들어 필요한 항목 수가 모든 블록에 있고 max_threads = 8이면 8개 블록이 검색되는데, 하나만 읽어도 충분했을 것이에요.

max_threads 값이 작을수록 메모리 소비가 적어져요.

max_threads 설정은 기본적으로 ClickHouse에 사용 가능한 하드웨어 스레드 수(CPU 코어 수)와 일치해요. 특수한 경우로, 32개 미만 CPU 코어와 SMT(예: Intel HyperThreading)가 있는 x86 프로세서의 경우 ClickHouse는 기본적으로 논리 코어 수(= 2 x 물리 코어 수)를 사용해요. SMT가 없으면(예: Intel HyperThreading) CPU 코어 수에 해당해요.

ClickHouse Cloud 사용자의 경우 기본값은 auto(N)으로 표시되는데, 여기서 N은 서비스의 vCPU 크기와 일치해요. 예: 2vCPU/8GiB, 4vCPU/16GiB 등. 모든 서비스 크기 목록은 Cloud 콘솔의 설정 탭을 참조하세요.

max_threads_for_indexes

인덱스를 처리하는 최대 스레드 수예요.

max_threads_min_free_memory_per_thread

서버가 메모리 압박 아래에 있을 때 max_threads를 낮춰서 메모리 한도에 도달할 가능성이 높은 고도 병렬 쿼리를 시작하지 않도록 해요.

여유 메모리는 서버의 max_server_memory_usage에서 전역 메모리 추적기가 현재 추적하는 메모리를 뺀 값으로 계산돼요. 그 여유 메모리가 max_threads에 이 값을 곱한 것보다 적으면 max_threadsN * value <= free_memory를 만족하는 가장 큰 N으로 줄어들고 최소 1로 내려가요.

이 제한을 비활성화하려면 0으로 설정하세요.

예를 들어 기본값 1 GiB와 32 GiB의 여유 메모리로 max_threads는 32로 상한이 정해져요. 1 GiB의 여유 메모리로는 1로 떨어져요.

이 설정은 읽기 측 병렬 처리(SELECT, UNION, INTERSECT/EXCEPT, INSERT ... SELECTSELECT 측)에 적용돼요. 쓰기 측은 max_insert_threads_min_free_memory_per_thread를 참조하세요.

더 알아보기 (Learn more)