ClickHouse/docs/ja/sql-reference/aggregate-functions/reference/flame_graph.md
2024-11-18 11:58:58 +09:00

5.0 KiB
Raw Blame History

slug sidebar_position
/ja/sql-reference/aggregate-functions/reference/flame_graph 138

flameGraph

スタックトレースのリストを使用してフレームグラフを構築する集約関数です。フレームグラフのSVGを生成するためにflamegraph.pl ユーティリティで使用できる文字列の配列を出力します。

構文

flameGraph(traces, [size], [ptr])

パラメータ

  • traces — スタックトレース。Array(UInt64)。
  • size — メモリプロファイリングのための割り当てサイズ。(オプション - デフォルトは1UInt64
  • ptr — 割り当てアドレス。(オプション - デフォルトは0UInt64

:::note ptr != 0の場合、flameGraphは同じサイズとptrでの割り当てsize > 0および解放size < 0をマッピングします。解放されていない割り当てのみが表示されます。マッピングされていない解放は無視されます。 :::

戻り値

使用例

CPUクエリプロファイラに基づいたフレームグラフの構築

SET query_profiler_cpu_time_period_ns=10000000;
SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10;
clickhouse client --allow_introspection_functions=1 -q "select arrayJoin(flameGraph(arrayReverse(trace))) from system.trace_log where trace_type = 'CPU' and query_id = 'xxx'" | ~/dev/FlameGraph/flamegraph.pl  > flame_cpu.svg

メモリクエリプロファイラに基づき、すべての割り当てを表示するフレームグラフの構築

SET memory_profiler_sample_probability=1, max_untracked_memory=1;
SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10;
clickhouse client --allow_introspection_functions=1 -q "select arrayJoin(flameGraph(trace, size)) from system.trace_log where trace_type = 'MemorySample' and query_id = 'xxx'" | ~/dev/FlameGraph/flamegraph.pl --countname=bytes --color=mem > flame_mem.svg

クエリコンテキストで解放されていない割り当てを示すメモリクエリプロファイラに基づいたフレームグラフの構築

SET memory_profiler_sample_probability=1, max_untracked_memory=1, use_uncompressed_cache=1, merge_tree_max_rows_to_use_cache=100000000000, merge_tree_max_bytes_to_use_cache=1000000000000;
SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10;
clickhouse client --allow_introspection_functions=1 -q "SELECT arrayJoin(flameGraph(trace, size, ptr)) FROM system.trace_log WHERE trace_type = 'MemorySample' AND query_id = 'xxx'" | ~/dev/FlameGraph/flamegraph.pl --countname=bytes --color=mem > flame_mem_untracked.svg

一定時点でのアクティブ割り当てを表示するメモリクエリプロファイラに基づいたフレームグラフの構築

SET memory_profiler_sample_probability=1, max_untracked_memory=1;
SELECT SearchPhrase, COUNT(DISTINCT UserID) AS u FROM hits WHERE SearchPhrase <> '' GROUP BY SearchPhrase ORDER BY u DESC LIMIT 10;
  • 1 - 秒単位のメモリ使用量
SELECT event_time, m, formatReadableSize(max(s) as m) FROM (SELECT event_time, sum(size) OVER (ORDER BY event_time) AS s FROM system.trace_log WHERE query_id = 'xxx' AND trace_type = 'MemorySample') GROUP BY event_time ORDER BY event_time;
  • 2 - 最大メモリ使用量の時点を見つける
SELECT argMax(event_time, s), max(s) FROM (SELECT event_time, sum(size) OVER (ORDER BY event_time) AS s FROM system.trace_log WHERE query_id = 'xxx' AND trace_type = 'MemorySample');
  • 3 - 一定時点でのアクティブな割り当てを固定する
clickhouse client --allow_introspection_functions=1 -q "SELECT arrayJoin(flameGraph(trace, size, ptr)) FROM (SELECT * FROM system.trace_log WHERE trace_type = 'MemorySample' AND query_id = 'xxx' AND event_time <= 'yyy' ORDER BY event_time)" | ~/dev/FlameGraph/flamegraph.pl --countname=bytes --color=mem > flame_mem_time_point_pos.svg
  • 4 - 一定時点での解放を見つける
clickhouse client --allow_introspection_functions=1 -q "SELECT arrayJoin(flameGraph(trace, -size, ptr)) FROM (SELECT * FROM system.trace_log WHERE trace_type = 'MemorySample' AND query_id = 'xxx' AND event_time > 'yyy' ORDER BY event_time desc)" | ~/dev/FlameGraph/flamegraph.pl --countname=bytes --color=mem > flame_mem_time_point_neg.svg