- ClickHouse Cloud
- 自管理
在 ClickHouse Cloud 中,您可以点击查询结果表上方工具栏最右侧的 ”…” (位于表/图表切换按钮旁) 来获取查询 ID。这会打开一个菜单,您可以点击 “Copy query ID”。使用
clusterAllReplicas(default, system.trace_log) 从集群中的所有节点查询:在自管理部署中使用查询分析器
1
安装带调试信息的 ClickHouse
安装clickhouse-common-static-dbg 软件包:- 按照步骤 “设置 Debian 仓库” 中的说明操作
- 运行
sudo apt-get install clickhouse-server clickhouse-client clickhouse-common-static-dbg,安装包含调试信息的 ClickHouse 已编译二进制文件 - 运行
sudo service clickhouse-server start启动服务器 - 运行
clickhouse-client。clickhouse-common-static-dbg中的调试符号会被服务器自动加载,无需执行任何额外操作来启用它们
2
3
配置分析器计时器
设置query_profiler_cpu_time_period_ns 或 query_profiler_real_time_period_ns。
这两个设置可以同时使用。这些设置可用于配置分析器计时器。
由于它们是会话设置,因此你可以为整个服务器、单个用户或用户 profile、当前交互式会话以及每个单独的查询设置不同的采样频率。默认采样频率为每秒一个样本,并且 CPU 计时器和实时时间计时器均已启用。
该频率既能收集关于 ClickHouse cluster 的足够信息,又不会影响服务器性能。
如果你需要分析每个单独的查询,请使用更高的采样频率。4
分析 trace_log 系统表
要分析 trace_log 系统表,请通过 allow_introspection_functions 设置启用内部信息函数:出于安全原因,默认情况下内部信息函数处于禁用状态
addressToLine、addressToLineWithInlines、addressToSymbol 和 demangle 内部信息函数 获取函数名称及其在 ClickHouse 代码中的位置。
要获取某个查询的 profile,需要对 trace_log 表中的数据进行聚合。
你可以按单个函数或整个堆栈跟踪聚合数据。使用 flameGraph 函数生成火焰图
flameGraph,可直接根据存储在 trace_log 中的堆栈跟踪生成火焰图。
输出为 String 数组,格式与 flamegraph.pl 兼容。
语法:
traces— 一条栈追踪。Array(UInt64)。size— 用于内存分析的分配大小。Int64。ptr— 分配地址。UInt64。
ptr 非零时,flameGraph 会将大小和指针相同的分配 (size > 0) 与释放 (size < 0) 对应起来。
只显示尚未释放的分配。
不匹配的释放会被忽略。
CPU 火焰图
内存火焰图——全部分配
内存火焰图——未释放的内存分配
内存火焰图——某一时刻的活跃分配
查看内存使用量随时间的变化
找到内存使用量最大的时间点
构建该时间点的活跃分配火焰图
生成该时间点之后的释放火焰图 (以了解后续释放了哪些内容)
示例
- 按查询标识符和当前日期过滤
trace_log数据。 - 按栈跟踪进行聚合。
- 使用内部信息函数获取以下报告:
- 符号名称及其对应的源代码函数名称。
- 这些函数在源代码中的位置。