샘플링 쿼리 프로파일러
ClickHouse는 쿼리 실행을 분석할 수 있는 샘플링 프로파일러를 실행합니다. 이 프로파일러를 사용하면 쿼리 실행 중 가장 자주 사용되는 소스 코드 루틴을 찾을 수 있습니다. CPU 시간과 유휴 시간을 포함한 경과 시간(벽시계 기준 시간)을 추적할 수 있습니다.
쿼리 프로파일러는 ClickHouse Cloud에서 자동으로 활성화되어 있으며, 다음과 같이 샘플 쿼리를 실행할 수 있습니다.
FROM system.trace_log를 FROM clusterAllReplicas(default, system.trace_log)로 변경해야 합니다.자가 관리형 배포에서 query profiler를 사용하려면 다음을 수행하십시오:
-
서버 설정의 trace_log 섹션을 구성합니다.
이 섹션은 profiler 동작 결과를 포함하는 trace_log 시스템 테이블을 구성합니다. 기본적으로 설정되어 있습니다. 이 테이블의 데이터는 서버가 실행 중일 때만 유효합니다. 서버를 재시작한 후에는 ClickHouse가 이 테이블을 정리하지 않으며, 저장된 모든 가상 메모리 주소가 무효화될 수 있습니다.
-
query_profiler_cpu_time_period_ns 또는 query_profiler_real_time_period_ns 설정을 구성합니다. 두 설정은 동시에 사용할 수 있습니다.
이 설정으로 profiler 타이머를 구성할 수 있습니다. 이들은 세션 설정이므로, 전체 서버, 개별 사용자 또는 사용자 프로필, 대화형 세션, 그리고 각 개별 쿼리에 대해 서로 다른 샘플링 빈도를 사용할 수 있습니다.
기본 샘플링 빈도는 초당 1개의 샘플이며 CPU 타이머와 실시간 타이머가 모두 활성화되어 있습니다. 이 빈도는 ClickHouse 클러스터에 대한 충분한 정보를 수집할 수 있게 해 줍니다. 동시에 이 빈도로 동작할 때 profiler는 ClickHouse 서버 성능에 영향을 주지 않습니다. 각 개별 쿼리를 프로파일링해야 한다면 더 높은 샘플링 빈도를 사용하십시오.
trace_log 시스템 테이블을 분석하려면:
-
clickhouse-common-static-dbg패키지를 설치합니다. DEB 패키지에서 설치를 참고하십시오. -
allow_introspection_functions 설정을 통해 introspection 함수 사용을 허용합니다.
보안상의 이유로 introspection 함수는 기본적으로 비활성화되어 있습니다.
-
addressToLine,addressToLineWithInlines,addressToSymbol,demangleintrospection 함수를 사용하여 ClickHouse 코드에서 FUNCTION 이름과 위치를 확인합니다. 특정 쿼리에 대한 프로파일을 얻으려면trace_log테이블의 데이터를 집계해야 합니다. 개별 FUNCTION별로 또는 전체 스택 트레이스 단위로 데이터를 집계할 수 있습니다.
trace_log 정보를 시각화해야 한다면 flamegraph와 speedscope를 사용해 보십시오.
예시
이 예시에서는 다음을 수행합니다:
-
현재 날짜와 쿼리 식별자로
trace_log데이터를 필터링합니다. -
스택 트레이스로 집계합니다.
-
내성 함수(introspection functions)를 사용하여 다음과 같은 보고서를 얻습니다:
- 심볼 이름과 해당하는 소스 코드 함수 이름
- 해당 함수들의 소스 코드 위치