跳转到主要内容
在 ClickHouse Cloud 中查询此系统表中的数据分别保存在 ClickHouse Cloud 各节点的本地。因此,如需查看所有数据的完整情况,需要使用 clusterAllReplicas 函数。更多详情请参见此处

说明

包含由采样查询分析器收集的堆栈跟踪。 当服务器配置中的 trace_log 部分启用时,ClickHouse 会创建此表。另请参见以下设置:query_profiler_real_time_period_nsquery_profiler_cpu_time_period_nsmemory_profiler_stepmemory_profiler_sample_probabilitytrace_profile_events 要分析日志,请使用 addressToLineaddressToLineWithInlinesaddressToSymboldemangle 这些内部信息函数。

  • 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)) — 采样时的堆栈跟踪。每个元素都是 ClickHouse server 进程中的一个虚拟内存地址。
  • 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 设置里启用或禁用符号化。
  • lines (Array(LowCardinality(String))) — 如果启用了符号化,则包含带行号的文件名字符串,并与 trace 相对应。
  • 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'E2EEB60ED9503BFFA825B628D480CCDC40B2D416' 的别名。
可以在服务器的配置文件中,通过 trace_log 下的 symbolize 启用或禁用符号化。

示例

转换为 Chrome Event Trace Format

可使用以下查询将 profiling 数据转换为 Chrome 的 Event Trace Format。请将该查询保存到 chrome_trace.sql 文件中:
并使用 ClickHouse 命令行客户端执行该命令,将结果导出为 trace.json 文件,随后可导入到 Perfettospeedscope 中。
如果希望 trace 更紧凑、但包含的信息更少,我们可以省略堆栈部分。

另请参阅

最后修改于 2026年7月2日