Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

flameGraph

flameGraph

Introducido en: v23.8.0

Crea un flamegraph a partir de la lista de stacktraces. Devuelve un array de cadenas que puede usarse con la utilidad flamegraph.pl para generar un SVG del flamegraph.

Sintaxis

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

Argumentos

  • traces — Un stacktrace, ya sea como direcciones sin procesar o como cadenas ya simbolizadas (p. ej., arrayMap(addressToSymbol, trace)). Array(UInt64) o Array(String)
  • size — Opcional. Un tamaño de asignación para el perfilado de memoria (valor predeterminado: 1). UInt64
  • ptr — Opcional. Una dirección de asignación (valor predeterminado: 0). UInt64

Valor devuelto

Devuelve un array de cadenas para usarlo con la utilidad flamegraph.pl. Array(String)

Ejemplos

Creación de un flamegraph a partir de un perfilador de consultas de 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

Creación de un flamegraph basado en un perfilador de consultas de memoria, que muestra todas las asignaciones de memoria

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

Construcción de un flamegraph a partir de un perfilador de consultas de memoria, que muestra asignaciones de memoria que no se liberaron

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

Cree un flamegraph basado en el perfilador de consultas de memoria que muestre las asignaciones activas en un momento dado

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. Uso de memoria por segundo
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. Encontrar un punto en el tiempo con el uso máximo de memoria
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. Fijar asignaciones activas en un punto fijo en el tiempo
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. Encontrar desasignaciones en un punto fijo en el tiempo
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
Navigation