system.trace_log
이 시스템 테이블의 데이터는 ClickHouse Cloud의 각 노드에 로컬로 저장됩니다. 따라서 전체 데이터를 조회하려면 clusterAllReplicas 함수를 사용해야 합니다. 자세한 내용은 여기를 참고하십시오.
sampling query profiler가 수집한 스택 트레이스를 포함합니다.
ClickHouse는 trace_log 서버 구성 섹션이 설정되면 이 테이블을 생성합니다. 또한 다음 설정을 참조하십시오: query_profiler_real_time_period_ns, query_profiler_cpu_time_period_ns, memory_profiler_step, memory_profiler_sample_probability, trace_profile_events.
로그를 분석하려면 addressToLine, addressToLineWithInlines, addressToSymbol 및 demangle와 같은 내부 분석 함수(introspection function)를 사용하십시오.
컬럼:
-
hostname(LowCardinality(String)) — 쿼리를 실행하는 서버의 호스트 이름입니다. -
event_date(Date) — 샘플링 시점의 날짜입니다. -
event_time(DateTime) — 샘플링 시점의 타임스탬프입니다. -
event_time_microseconds(DateTime64) — 마이크로초 단위 정밀도를 가진 샘플링 시점의 타임스탬프입니다. -
timestamp_ns(UInt64) — 나노초 단위의 샘플링 시점 타임스탬프입니다. -
revision(UInt32) — ClickHouse 서버 빌드 리비전입니다.clickhouse-client로 서버에 연결하면Connected to ClickHouse server version 19.18.1.와 유사한 문자열이 표시됩니다. 이 필드에는 서버의version이 아니라revision값이 들어 있습니다. -
trace_type(Enum8) — 트레이스 유형입니다:Real— 벽시계 시간(wall-clock time)에 따라 스택 트레이스를 수집합니다.CPU— CPU 시간에 따라 스택 트레이스를 수집합니다.Memory— 메모리 할당이 다음 워터마크 임계값을 초과할 때 할당 및 해제를 수집합니다.MemorySample— 무작위 할당 및 해제를 수집합니다.MemoryPeak— 최대 메모리 사용량의 변화를 수집합니다.ProfileEvent— 프로파일 이벤트 증가량을 수집합니다.JemallocSample— jemalloc 샘플을 수집합니다.MemoryAllocatedWithoutCheck— 메모리 제한을 무시하고 수행되는 대규모 할당(>16MiB)을 수집합니다(ClickHouse 개발자 전용).Instrumentation— XRay를 통해 수행된 계측으로 수집된 트레이스입니다.
-
cpu_id(UInt64) — CPU 식별자입니다. -
thread_id(UInt64) — 스레드 식별자입니다. -
query_id(String) — query_log 시스템 테이블에서 실행 중이던 쿼리의 세부 정보를 가져오는 데 사용할 수 있는 쿼리 식별자입니다. -
trace(Array(UInt64)) — 샘플링 시점의 스택 트레이스입니다. 각 요소는 ClickHouse 서버 프로세스 내의 가상 메모리 주소입니다. -
size(Int64) - 트레이스 유형이Memory,MemorySample또는MemoryPeak인 경우 할당된 메모리 양이며, 다른 트레이스 유형의 경우 0입니다. -
event(LowCardinality(String)) - 트레이스 유형이ProfileEvent인 경우 업데이트된 프로파일 이벤트의 이름이며, 다른 트레이스 유형의 경우 빈 문자열입니다. -
increment(UInt64) - 트레이스 유형이ProfileEvent인 경우 프로파일 이벤트 증가량이며, 다른 트레이스 유형의 경우 0입니다. -
symbols, (Array(LowCardinality(String))), 심볼라이제이션이 활성화된 경우trace에 해당하는 디맹글된 심볼 이름을 포함합니다. -
lines, (Array(LowCardinality(String))), 심볼라이제이션이 활성화된 경우trace에 해당하는 파일 이름과 행 번호가 포함된 문자열을 포함합니다. -
function_id(Nullable(Int32)), 트레이스 유형이 Instrumentation인 경우 ELF 바이너리의 xray_instr_map 섹션에서 함수에 할당된 ID입니다. -
function_name(Nullable(String)), 트레이스 유형이 Instrumentation인 경우 계측된 함수의 이름입니다. -
handler(Nullable(String)), 트레이스 유형이 Instrumentation인 경우 계측된 함수의 핸들러입니다. -
entry_type(Nullable(Enum('Entry' = 0, 'Exit' = 1))), 트레이스 유형이 Instrumentation인 경우 트레이스의 진입 유형입니다. -
duration_nanoseconds(Nullable(UInt64)), 트레이스 유형이 Instrumentation인 경우 함수가 실행된 시간(나노초 단위)입니다.
심볼라이제이션은 서버 구성 파일의 trace_log 아래에 있는 symbolize에서 활성화하거나 비활성화할 수 있습니다.
예제
Chrome Event Trace 형식으로 변환하기
프로파일링 데이터는 다음 쿼리를 사용하여 Chrome Event Trace 형식으로 변환할 수 있습니다. 이 쿼리를 chrome_trace.sql 파일에 저장하십시오:
그리고 ClickHouse Client를 사용해 이를 실행하여 trace.json 파일로 내보낸 후, Perfetto 또는 speedscope에서 가져올 수 있습니다.
더 간결하지만 정보가 적은 트레이스를 원한다면 stack 부분을 생략할 수 있습니다.
참고
- SYSTEM INSTRUMENT — 계측 포인트를 추가하거나 제거합니다.
- system.instrumentation — 계측된 포인트를 검사합니다.
- system.symbols — 계측 포인트를 추가하기 위해 심볼을 검사합니다.