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 开发人员使用)。
-
thread_id(UInt64) — 线程标识符。 -
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对应的带行号的文件名字符串。
可以在服务器配置文件中 trace_log 部分下的 symbolize 设置中启用或禁用符号化。
示例