采样查询分析器
ClickHouse 运行采样分析器,允许分析查询执行。使用分析器,您可以找到在查询执行期间最常使用的源代码例程。您可以跟踪包括空闲时间在内的 CPU 时间和挂钟时间。
查询分析器在 ClickHouse Cloud 中自动启用,您可以运行以下示例查询
FROM system.trace_log
更改为 FROM clusterAllReplicas(default, system.trace_log)
以从集群的所有节点中选择数据SELECT
count(),
arrayStringConcat(arrayMap(x -> concat(demangle(addressToSymbol(x)), '\n ', addressToLine(x)), trace), '\n') AS sym
FROM system.trace_log
WHERE (query_id = 'ebca3574-ad0a-400a-9cbc-dca382f5998c') AND (event_date = today())
GROUP BY trace
ORDER BY count() DESC
LIMIT 10
SETTINGS allow_introspection_functions = 1
在自管理部署中,要使用查询分析器
设置服务器配置的 trace_log 部分。
此部分配置包含分析器功能结果的 trace_log 系统表。它在默认情况下已配置。请记住,此表中的数据仅对正在运行的服务器有效。服务器重启后,ClickHouse 不会清理该表,并且所有存储的虚拟内存地址都可能变得无效。
设置 query_profiler_cpu_time_period_ns 或 query_profiler_real_time_period_ns 设置。这两个设置可以同时使用。
这些设置允许您配置分析器计时器。由于这些是会话设置,因此您可以为整个服务器、单个用户或用户配置文件、您的交互式会话以及每个单独的查询获得不同的采样频率。
默认采样频率为每秒一个样本,并且 CPU 和实时计时器都已启用。此频率允许收集有关 ClickHouse 集群的足够信息。同时,使用此频率时,分析器不会影响 ClickHouse 服务器的性能。如果您需要分析每个单独的查询,请尝试使用更高的采样频率。
要分析 trace_log
系统表
安装
clickhouse-common-static-dbg
包。请参阅 从 DEB 包安装。通过 allow_introspection_functions 设置允许内省函数。
出于安全原因,默认情况下禁用内省函数。
使用
addressToLine
、addressToLineWithInlines
、addressToSymbol
和demangle
内省函数 获取函数名称及其在 ClickHouse 代码中的位置。要获取某个查询的概要文件,您需要聚合trace_log
表中的数据。您可以按单个函数或按整个堆栈跟踪聚合数据。
如果您需要可视化 trace_log
信息,请尝试使用 flamegraph 和 speedscope。
示例
在此示例中,我们
按查询标识符和当前日期筛选
trace_log
数据。按堆栈跟踪聚合。
使用内省函数,我们将获得以下报告:
- 符号名称和相应的源代码函数。
- 这些函数的源代码位置。
SELECT
count(),
arrayStringConcat(arrayMap(x -> concat(demangle(addressToSymbol(x)), '\n ', addressToLine(x)), trace), '\n') AS sym
FROM system.trace_log
WHERE (query_id = 'ebca3574-ad0a-400a-9cbc-dca382f5998c') AND (event_date = today())
GROUP BY trace
ORDER BY count() DESC
LIMIT 10