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代表收集配置事件的增量。JemallocSample代表收集 jemalloc 样本。MemoryAllocatedWithoutCheck代表收集重大分配 (>16MiB) 的情况,该分配忽略任何内存限制(仅限 ClickHouse 开发人员)。
-
thread_id(UInt64) — 线程标识符。 -
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相对应的文件名及行号的字符串。
符号解析可以在服务器的配置文件中 trace_log 下的 symbolize 中启用或禁用。
示例