system.trace_log
该系统表中的数据保存在 ClickHouse Cloud 中每个节点的本地。因此,如需获得所有数据的完整视图,需要使用 clusterAllReplicas 函数。更多详情请参阅此处。
包含由 sampling query profiler 收集的堆栈跟踪信息。
在配置了 trace_log 服务器配置部分后,ClickHouse 会创建此表。另请参阅以下设置: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 内省函数。
列:
-
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.的字符串。该字段包含的是服务器的revision,而不是version。 -
trace_type(Enum8) — 跟踪类型:Real表示按墙钟时间收集栈跟踪。CPU表示按 CPU 时间收集栈跟踪。Memory表示在内存分配超过后续水位线阈值时收集分配和释放。MemorySample表示随机收集分配和释放。MemoryPeak表示收集内存峰值使用的更新。ProfileEvent表示收集 profile 事件的增量。JemallocSample表示收集 jemalloc 样本。MemoryAllocatedWithoutCheck表示在忽略任何内存限制的情况下收集大额分配(>16MiB)(仅供 ClickHouse 开发者使用)。Instrumentation表示通过 XRay 进行 instrumentation 所收集的跟踪。
-
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跟踪类型,是更新后的 profile 事件名称;对于其他跟踪类型是空字符串。 -
increment(UInt64) - 对于ProfileEvent跟踪类型,是 profile 事件的增量值;对于其他跟踪类型为 0。 -
symbols, (Array(LowCardinality(String))), 如果启用了符号化,包含与trace对应的已还原符号名称。 -
lines, (Array(LowCardinality(String))), 如果启用了符号化,包含与trace对应的、带有行号的文件名字符串。 -
function_id(Nullable(Int32)), 对于 Instrumentation 跟踪类型,是在 elf-binary 的 xray_instr_map 段中分配给该函数的 ID。 -
function_name(Nullable(String)), 对于 Instrumentation 跟踪类型,是被插桩(instrumented)的函数名称。 -
handler(Nullable(String)), 对于 Instrumentation 跟踪类型,是被插桩函数的处理程序。 -
entry_type(Nullable(Enum('Entry' = 0, 'Exit' = 1))), 对于 Instrumentation 跟踪类型,是该跟踪的入口类型。 -
duration_nanoseconds(Nullable(UInt64)), 对于 Instrumentation 跟踪类型,是函数的运行时间(纳秒)。
可以在服务器配置文件的 trace_log 部分,通过 symbolize 启用或禁用符号化。
示例
转换为 Chrome 事件跟踪格式
可以使用以下查询将性能分析数据转换为 Chrome 的事件跟踪格式(Event Trace Format)。将该查询保存为名为 chrome_trace.sql 的文件:
并使用 ClickHouse Client 执行它,将结果导出为 trace.json 文件,以便我们在 Perfetto 或 speedscope 中导入。
如果我们希望获得更紧凑但信息更少的 trace,可以省略 stack 部分。
另请参阅
- SYSTEM INSTRUMENT — 添加或移除插桩点。
- system.instrumentation — 查看已插桩的点。
- system.symbols — 查看符号以确定插桩点。