- ClickHouse Cloud
- 자가 관리형
ClickHouse Cloud에서는 쿼리 결과 테이블 위 막대의 맨 오른쪽(table/chart 전환 옆)에 있는 **”…”**를 클릭해 쿼리 ID를 확인할 수 있습니다. 그러면 컨텍스트 메뉴가 열리고, 여기서 **“Copy query ID”**를 클릭할 수 있습니다.클러스터의 모든 노드에서 조회하려면
clusterAllReplicas(default, system.trace_log)를 사용하십시오:자가 관리형 배포에서 쿼리 프로파일러 사용하기
1
디버그 정보와 함께 ClickHouse 설치
clickhouse-common-static-dbg 패키지를 설치하십시오:- “Debian 리포지토리 설정” 단계의 지침을 따르십시오
- 디버그 정보가 포함된 ClickHouse 컴파일 바이너리 파일을 설치하려면
sudo apt-get install clickhouse-server clickhouse-client clickhouse-common-static-dbg를 실행하십시오 - 서버를 시작하려면
sudo service clickhouse-server start를 실행하십시오 clickhouse-client를 실행하십시오.clickhouse-common-static-dbg의 디버그 심볼은 서버에서 자동으로 인식되므로 이를 활성화하기 위해 별도로 수행할 작업은 없습니다
2
3
프로파일 타이머 구성
query_profiler_cpu_time_period_ns 또는 query_profiler_real_time_period_ns 설정을 구성하십시오.
두 설정은 동시에 사용할 수 있습니다.이 설정을 사용하면 프로파일러 타이머를 구성할 수 있습니다.
이 설정들은 세션 설정이므로 전체 서버, 개별 사용자 또는 사용자 프로파일, 대화형 세션, 그리고 개별 쿼리마다 서로 다른 샘플링 주기를 적용할 수 있습니다.기본 샘플링 주기는 초당 1개 샘플이며, CPU 타이머와 실시간 타이머가 모두 활성화되어 있습니다.
이 주기라면 서버 성능에 영향을 주지 않으면서 ClickHouse 클러스터에 대한 충분한 정보를 수집할 수 있습니다.
개별 쿼리마다 프로파일링해야 한다면 더 높은 샘플링 주기를 사용하십시오.4
trace_log 시스템 테이블 분석
trace_log 시스템 테이블을 분석하려면 allow_introspection_functions 설정으로 인트로스펙션 함수를 허용하십시오:보안상의 이유로 인트로스펙션 함수는 기본적으로 비활성화되어 있습니다
addressToLine, addressToLineWithInlines, addressToSymbol, demangle 인트로스펙션 함수를 사용하십시오.
특정 쿼리의 프로파일을 얻으려면 trace_log 테이블의 데이터를 집계해야 합니다.
개별 함수별로 또는 전체 스택 트레이스별로 데이터를 집계할 수 있습니다.flameGraph 함수로 플레임 그래프 만들기
trace_log에 저장된 스택 트레이스로부터 직접 플레임 그래프를 생성하는 flameGraph 집계 함수를 제공합니다.
출력은 flamegraph.pl과 호환되는 포맷의 문자열 배열입니다.
구문:
traces— 스택 트레이스입니다.Array(UInt64).size— 메모리 프로파일링용 할당 크기입니다.Int64.ptr— 할당 주소입니다.UInt64.
ptr이 0이 아니면 flameGraph는 크기와 포인터가 같은 할당(size > 0)과 할당 해제(size < 0)를 서로 대응시킵니다.
해제되지 않은 할당만 표시됩니다.
짝이 맞지 않는 할당 해제는 무시됩니다.
CPU 플레임 그래프
아래 쿼리를 실행하려면 flamegraph.pl이 설치되어 있어야 합니다.다음 명령으로 설치할 수 있습니다.다음 쿼리에서는
flamegraph.pl을 로컬 환경에서 flamegraph.pl이 있는 경로로 대체하십시오메모리 플레임 그래프 — 전체 할당
메모리 플레임 그래프 — 해제되지 않은 할당
메모리 플레임 그래프 — 특정 시점의 활성 할당
시간에 따른 메모리 사용량 확인
메모리 사용량이 가장 많은 시점 찾기
해당 시점의 활성 할당 플레임 그래프 생성
해당 시점 이후의 메모리 해제에 대한 플레임 그래프 만들기(나중에 무엇이 해제되었는지 파악하기 위해)
예시
trace_log데이터를 쿼리 식별자와 현재 날짜를 기준으로 필터링합니다.- 스택 트레이스별로 집계합니다.
- 다음 보고서를 얻기 위해 인트로스펙션 함수를 사용합니다.
- 심볼 이름과 이에 대응하는 소스 코드 함수 이름
- 이러한 함수의 소스 코드 위치