높은 동시성을 가능하게 하는 요소
개별 쿼리가 빠르게 실행되는 것은 높은 QPS의 기반입니다. 각 쿼리가 수행하는 작업이 적을수록 서버는 더 많은 쿼리를 동시에 실행할 수 있습니다. 쿼리당 작업량을 줄이는 주요 기능은 다음과 같습니다.- 쿼리 조건과 일치하지 않는 데이터의 읽기를 건너뛰는 MergeTree 테이블 엔진 계열의 희소 프라이머리 인덱스
- 반복되는
SELECT쿼리에 캐시된 결과를 직접 제공하는 쿼리 캐시 등의 캐시 - 삽입 시 데이터를 미리 계산하며 ClickHouse가 자동으로 선택할 수 있는 프로젝션, 그리고 쿼리가 직접 읽을 수 있는 별도의 대상 테이블에 미리 계산된 결과를 저장하는 materialized view
동시성 제어 및 제한
기본적으로 ClickHouse OSS는 동시에 실행되는 쿼리 수를 제한하지 않습니다. ClickHouse Cloud에서는max_concurrent_queries_for_all_users의 기본값이 1000으로 설정되어 있습니다. 여러 수준에서 제한을 구성할 수 있습니다.
max_concurrent_queries는 서버에서 동시에 실행되는 전체 쿼리 수를 제한합니다.max_concurrent_insert_queries및max_concurrent_select_queries는 각각INSERT및SELECT쿼리에 동일한 제한을 적용합니다. 세 설정의 기본값은 모두0(무제한)입니다.max_concurrent_queries_for_user및max_concurrent_queries_for_all_users는 사용자별 또는 전체 사용자에 대해 동시성을 제한합니다.
워크로드 격리
동시 실행되는 워크로드가 서로 간섭하지 않도록 ClickHouse는 다음 기능을 제공합니다.- 워크로드 간 CPU, 메모리 및 IO 공유 방식을 조절하는 워크로드 스케줄링
- 사용자별 리소스 사용량을 일정 시간 인터벌 동안 제한하는 쿼터
- 개별 쿼리가 과도한 리소스를 소비하지 않도록 하는 쿼리 복잡성 제한
- 각 사용자가 쿼리할 수 있는 범위를 제한하는 기본 제공 역할 기반 접근 제어