mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-19 12:52:37 +00:00
5.0 KiB
5.0 KiB
slug | sidebar_position |
---|---|
/ja/sql-reference/aggregate-functions/reference/flame_graph | 138 |
flameGraph
スタックトレースのリストを使用してフレームグラフを構築する集約関数です。フレームグラフのSVGを生成するためにflamegraph.pl ユーティリティで使用できる文字列の配列を出力します。
構文
flameGraph(traces, [size], [ptr])
パラメータ
traces
— スタックトレース。Array(UInt64)。size
— メモリプロファイリングのための割り当てサイズ。(オプション - デフォルトは1
)UInt64。ptr
— 割り当てアドレス。(オプション - デフォルトは0
)UInt64。
:::note
ptr != 0
の場合、flameGraphは同じサイズとptrでの割り当て(size > 0)および解放(size < 0)をマッピングします。解放されていない割り当てのみが表示されます。マッピングされていない解放は無視されます。
:::
戻り値
- flamegraph.pl ユーティリティで使用するための文字列の配列。Array(String)。
使用例
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