system.trace_log
이 시스템 테이블의 데이터는 ClickHouse Cloud의 각 노드에 로컬로 저장됩니다. 따라서 전체 데이터를 조회하려면 clusterAllReplicas 함수를 사용해야 합니다. 자세한 내용은 여기를 참고하십시오.
설명
샘플링 쿼리 프로파일러가 수집한 스택 트레이스를 포함합니다.
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(6)) — 마이크로초 단위 정밀도를 가진 샘플링 시점의 타임스탬프입니다.timestamp_ns(UInt64) — 샘플링 시점의 타임스탬프를 나노초 단위로 나타냅니다.revision(UInt32) — ClickHouse 서버의 빌드 리비전입니다.clickhouse-client로 서버에 연결하면Connected to ClickHouse server version 19.18.1.과 유사한 문자열이 표시됩니다. 이 필드에는 서버의version이 아니라revision이 포함됩니다.trace_type(Enum8('Real' = 0, 'CPU' = 1, 'Memory' = 2, 'MemorySample' = 3, 'MemoryPeak' = 4, 'ProfileEvent' = 5, 'JemallocSample' = 6, 'MemoryAllocatedWithoutCheck' = 7, 'Instrumentation' = 8)) — 트레이스 유형:Real은 wall-clock time 기준으로 스택 트레이스를 수집함을 나타냅니다.CPU는 CPU 시간 기준으로 스택 트레이스를 수집함을 나타냅니다.Memory는 메모리 할당이 다음 워터마크를 초과할 때 할당 및 할당 해제를 수집함을 나타냅니다.MemorySample은 무작위 할당 및 할당 해제를 수집함을 나타냅니다.MemoryPeak은 최대 메모리 사용량 업데이트를 수집함을 나타냅니다.ProfileEvent는 profile events 증가분을 수집함을 나타냅니다.JemallocSample은 jemalloc 샘플을 수집함을 나타냅니다.MemoryAllocatedWithoutCheck는 메모리 제한을 무시한 상태에서 수행되는 대규모 할당(>16MiB)을 수집함을 나타냅니다(ClickHouse 개발자 전용).Instrumentation은 XRay를 통해 수행된 계측으로 수집된 트레이스를 나타냅니다.cpu_id(UInt64) — CPU 식별자입니다.thread_id(UInt64) — 스레드 식별자.thread_name(LowCardinality(String)) — 스레드 이름입니다.query_id(String) —query_log시스템 테이블에서 실행 중이던 쿼리의 세부 정보를 가져오는 데 사용할 수 있는 쿼리 식별자입니다.trace(Array(UInt64)) — 샘플링 시점의 스택 트레이스입니다. 각 요소는 ClickHouse 서버 프로세스 내의 가상 메모리 주소입니다.size(Int64) — 트레이스 유형이 Memory, MemorySample, MemoryAllocatedWithoutCheck 또는 MemoryPeak이면 할당된 메모리 양을 나타내며, 다른 트레이스 유형에서는 0입니다.ptr(UInt64) — 할당된 청크의 주소입니다.memory_context(Enum8('Unknown' = -1, 'Global' = 0, 'User' = 1, 'Process' = 2, 'Thread' = 3, 'Max' = 4)) — Memory Tracker Context(메모리/MemoryPeak에만 해당):UnknownContext는 이trace_type에 대해 정의되어 있지 않습니다.Global은 서버 Context를 나타냅니다.User는 사용자/merge Context를 나타냅니다.Process는 프로세스(즉, 쿼리) Context를 나타냅니다.Thread는 스레드(Context)(특정 프로세스의 스레드)를 나타냅니다.Max는 메모리 tracker가 차단되지 않았음을 의미하는 특수 값입니다(blocked_context컬럼에 해당).memory_blocked_context(Enum8('Unknown' = -1, 'Global' = 0, 'User' = 1, 'Process' = 2, 'Thread' = 3, 'Max' = 4)) — memory tracker가 차단되는 컨텍스트(ClickHouse 개발자 전용):Unknown컨텍스트는 이 trace_type에 대해 정의되어 있지 않습니다.Global은 서버 컨텍스트를 나타냅니다.User는 사용자/병합 컨텍스트를 나타냅니다.Process는 프로세스(즉, 쿼리) 컨텍스트를 나타냅니다.Thread는 스레드(특정 프로세스의 스레드) 컨텍스트를 나타냅니다.Max는 memory tracker가 차단되지 않음을 의미하는 특수 값입니다(blocked_context컬럼용).event(LowCardinality(String)) — 트레이스 유형이 ProfileEvent인 경우 갱신된 프로필 이벤트의 이름이며, 그 외 트레이스 유형에서는 빈 문자열입니다.increment(Int64) — 트레이스 유형이 ProfileEvent이면 프로필 이벤트의 증가량을 나타내며, 다른 트레이스 유형에서는 0입니다.symbols(Array(LowCardinality(String))) — 심볼화가 활성화된 경우trace에 해당하는 디맹글링된 심벌 이름을 포함합니다. 심볼화는 서버 구성의trace_log아래symbolize설정에서 활성화하거나 비활성화할 수 있습니다.lines(Array(LowCardinality(String))) — 심볼화가 활성화된 경우,trace에 해당하는 파일 이름과 줄 번호가 포함된 문자열을 담고 있습니다.function_id(널 허용(Int32)) — trace 유형 Instrumentation에서 elf-binary의 xray_instr_map 섹션 내 함수에 할당된 ID입니다.function_name(널 허용(String)) — 트레이스 타입 Instrumentation의 계측 함수 이름입니다.handler(Nullable(String)) — 트레이스 타입 Instrumentation에서 계측된 함수의 handler입니다.entry_type(Nullable(Enum8('Entry' = 0, 'Exit' = 1))) — 트레이스 타입의 Instrumentation에서 계측된 함수의 진입 유형입니다.duration_nanoseconds(Nullable(UInt64)) — 트레이스 유형의 Instrumentation에서 함수가 실행된 시간을 나노초 단위로 나타냅니다.
別名:
build_id—'E2EEB60ED9503BFFA825B628D480CCDC40B2D416'의 에일리어스입니다.
심볼라이제이션은 서버 구성 파일의 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 — 계측 포인트를 추가하기 위해 심볼을 검사합니다.