在 ClickHouse Cloud 中查询此系统表中的数据分别保存在 ClickHouse Cloud 各节点的本地。因此,如需查看所有数据的完整情况,需要使用
clusterAllReplicas 函数。更多详情请参见此处。说明
symbols 和 lines 列中提供,因此可以直接分析日志,无需使用内部信息函数。symbolize 设置适用于分析器收集的 trace 类型;Instrumentation trace 类型的行无论该设置如何都会进行符号化。符号化支持 ELF 平台 (如 Linux) 和 macOS;在 FreeBSD 上,symbols 和 lines 列始终为空。symbols 中的函数名称来自二进制文件的符号表,默认可用;而 lines 中的源代码位置会尽力提供:它们需要调试信息 (macOS 上为 .dSYM 包) ,并且在 ELF 平台上,仅解析主 ClickHouse 二进制文件内的帧;未解析帧的 lines 条目为空。
如果禁用了符号化,或者希望动态解析 trace 列中的原始地址 (例如展开内联帧) ,请使用 addressToLine、addressToLineWithInlines、addressToSymbol 和 demangle 内部信息函数。这些函数支持与符号化相同的平台 (如 Linux 等 ELF 平台以及 macOS) ;在 FreeBSD 上它们同样未被编译,因此必须在服务器外部解析 trace 中的地址。
列
hostname(LowCardinality(String)) — 执行该查询的服务器主机名。event_date(Date) — 采样时刻的日期。event_time(DateTime) — 采样时间点的时间戳。event_time_microseconds(DateTime64(6)) — 具有微秒精度的采样时刻时间戳。timestamp_ns(UInt64) — 采样时刻的时间戳 (以纳秒为单位) 。revision(UInt32) — ClickHouse server 的构建修订号。使用clickhouse-client连接到服务器时,你会看到类似Connected to ClickHouse server version 19.18.1.的字符串。此字段包含的是服务器的revision,而不是其version。trace_type(Enum8(‘Real’ = 0, ‘CPU’ = 1, ‘Memory’ = 2, ‘MemorySample’ = 3, ‘MemoryPeak’ = 4, ‘ProfileEvent’ = 5, ‘JemallocSample’ = 6, ‘MemoryAllocatedWithoutCheck’ = 7, ‘Instrumentation’ = 8)) — trace 类型:Real表示按挂钟时间收集堆栈跟踪。CPU表示按 CPU 时间收集堆栈跟踪。Memory表示当内存分配超过相应的 watermark 时,收集分配和释放。MemorySample表示收集随机分配和释放。MemoryPeak表示收集峰值内存占用的更新信息。ProfileEvent表示收集 profile events 的增量。JemallocSample表示收集 jemalloc 样本。MemoryAllocatedWithoutCheck表示收集忽略任何内存限制时发生的大额分配 (>16MiB) (仅适用于 ClickHouse 开发者) 。Instrumentation表示通过 XRay 插桩收集的 trace。cpu_id(UInt64) — CPU 编号。thread_id(UInt64) — 线程标识符。thread_name(LowCardinality(String)) — 线程名。query_id(String) — 查询标识符,可用于从 query_log 系统表中获取正在运行查询的详细信息。trace(Array(UInt64)) — 采样时的堆栈跟踪。对于由 Profiler 收集的 trace 类型,在 FreeBSD 以外的 ELF 平台上,主 ClickHouse binary 内的地址会存储为物理文件偏移量,其他地址则是 ClickHouse server 进程中的虚拟内存地址。Instrumentation trace 行是例外:它们存储原始虚拟内存地址。size(Int64) — 对于 Memory、MemorySample、MemoryAllocatedWithoutCheck 或 MemoryPeak 这几种 trace 类型,表示已分配的内存量;对于其他 trace 类型,则为 0。ptr(UInt64) — 已分配 chunk 的内存地址。memory_context(Enum8(‘Unknown’ = -1, ‘Global’ = 0, ‘User’ = 1, ‘Process’ = 2, ‘Thread’ = 3, ‘Max’ = 4)) — Memory Tracker 的上下文 (仅适用于 Memory/MemoryPeak) :Unknown表示此 trace_type 未定义上下文。Global表示服务器上下文。User表示用户/合并上下文。Process表示进程 (即查询) 上下文。Thread表示线程 (特定进程的线程) 上下文。Max是一个特殊值,表示 memory 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表示用户/merge 上下文。Process表示进程 (即查询) 上下文。Thread表示线程 (特定进程的线程) 上下文。Max是一个特殊值,表示 memory tracker 未被阻塞 (针对blocked_context列) 。event(LowCardinality(String)) — 对于 trace 类型,ProfileEvent 是已更新的 profile 事件名称;对于其他 trace 类型,则为空字符串。increment(Int64) — 当 trace 类型为 ProfileEvent 时,表示该 profile event 的增量;其他 trace 类型则为 0。symbols(Array(LowCardinality(String))) — 如果启用了符号化,则包含与trace对应的已解修饰符号名称。可在服务器配置文件中trace_log下的symbolize设置里启用或禁用符号化。该设置适用于 profiler 收集的 trace 类型,而Instrumentationtrace 类型的行无论是否启用此设置都会进行符号化。ELF 平台 (如 Linux) 和 macOS 支持符号化;在 FreeBSD 上,此列始终为空。lines(Array(LowCardinality(String))) — 如果启用了符号化,则包含带行号的文件名字符串,并与trace相对应。symbolize设置适用于 profiler 收集的 trace 类型,而Instrumentationtrace 类型的行无论是否启用此设置都会进行符号化。ELF 平台 (如 Linux) 和 macOS 支持符号化;在 FreeBSD 上,此列始终为空。源代码位置会尽力解析:这需要调试信息 (macOS 上为.dSYM支持包),且在 ELF 平台上仅会解析主 ClickHouse 二进制文件内的帧;无法解析的帧对应的条目为空。function_id(Nullable(Int32)) — 对于 trace 类型的 Instrumentation,表示在 elf-binary 的 xray_instr_map 节中分配给该函数的 ID。function_name(Nullable(String)) — 对于 trace 类型的 Instrumentation,表示被插桩函数的名称。handler(Nullable(String)) — 对于 trace 类型的 Instrumentation,表示已插桩函数的处理器。entry_type(Nullable(Enum8(‘Entry’ = 0, ‘Exit’ = 1))) — 对于 trace 类型 Instrumentation,表示插桩函数的进入/退出类型。duration_nanoseconds(Nullable(UInt64)) — 对于 trace 类型的 Instrumentation,表示函数运行时间,单位为纳秒。
build_id— 正在运行的 ClickHouse 服务器二进制文件的构建 ID 的别名。
trace_log 部分通过 symbolize 设置启用或禁用符号化功能。该功能默认启用。此设置适用于分析器收集的 trace 类型;对于 trace 类型为 Instrumentation 的行,无论此设置为何值,都会进行符号化。
示例
转换为 Chrome Event Trace Format
chrome_trace.sql 文件中:
trace.json 文件,随后可导入到 Perfetto 或 speedscope 中。
另请参阅
- SYSTEM INSTRUMENT — 添加或移除插桩点。
- system.instrumentation — 查看已插桩的点。
- system.symbols — 查看可用于添加插桩点的符号。