跳至主要内容
跳至主要内容

查询分析器性能分析器

ClickHouse 运行采样性能分析器,用于分析查询执行情况。使用性能分析器,您可以找到查询执行过程中使用最频繁的源代码例程。您可以跟踪包括空闲时间在内的 CPU 时间和实际时间。

在 ClickHouse Cloud 中,查询性能分析器会自动启用,您可以按如下方式运行示例查询

注意
如果您在 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 trace_type = 'CPU' 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_nsquery_profiler_real_time_period_ns 设置。这两个设置可以同时使用。

    这些设置允许您配置性能分析器计时器。由于这些是会话设置,因此您可以为整个服务器、单个用户或用户配置文件、您的交互式会话以及每个单独的查询获取不同的采样频率。

默认采样频率是每秒一个样本,并且同时启用了 CPU 和实际计时器。此频率允许收集足够关于 ClickHouse 集群的信息。同时,使用此频率,性能分析器不会影响 ClickHouse 服务器的性能。如果您需要分析每个单独的查询,请尝试使用更高的采样频率。

要分析 trace_log 系统表

  • 安装 clickhouse-common-static-dbg 包。请参阅 从 DEB 包安装

  • 通过 allow_introspection_functions 设置允许内省函数。

    出于安全原因,默认情况下禁用内省函数。

  • 使用 addressToLineaddressToLineWithInlinesaddressToSymboldemangle 内省函数 获取函数名称及其在 ClickHouse 代码中的位置。要获取某个查询的性能分析报告,您需要从 trace_log 表中聚合数据。您可以按单个函数或整个堆栈跟踪进行数据聚合。

如果您需要可视化 trace_log 信息,请尝试 火焰图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
    © . This site is unofficial and not affiliated with ClickHouse, Inc.