Saltar al contenido principal
Consultas en ClickHouse CloudLos datos de esta tabla del sistema se almacenan localmente en cada nodo de ClickHouse Cloud. Por lo tanto, para obtener una vista completa de todos los datos, es necesario usar la función clusterAllReplicas. Consulta aquí para más detalles.

Descripción

Contiene trazas de pila recopiladas por el perfilador de consultas por muestreo. ClickHouse crea esta tabla cuando está definida la sección de configuración del servidor trace_log. Consulte también estas opciones de configuración: query_profiler_real_time_period_ns, query_profiler_cpu_time_period_ns, memory_profiler_step, memory_profiler_sample_probability, trace_profile_events. Para analizar logs, use las funciones de introspección addressToLine, addressToLineWithInlines, addressToSymbol y demangle.

Columnas

  • hostname (LowCardinality(String)) — Nombre de host del servidor que ejecuta la consulta.
  • event_date (Date) — Fecha en que se realizó el muestreo.
  • event_time (DateTime) — Marca temporal del momento en que se realizó el muestreo.
  • event_time_microseconds (DateTime64(6)) — Marca temporal del momento del muestreo con precisión de microsegundos.
  • timestamp_ns (UInt64) — Marca temporal del instante de muestreo en nanosegundos.
  • revision (UInt32) — revisión de compilación del servidor ClickHouse. Al conectarse al servidor mediante clickhouse-client, verá una cadena similar a Connected to ClickHouse server version 19.18.1.. Este campo contiene la revision, pero no la version del servidor.
  • trace_type (Enum8(‘Real’ = 0, ‘CPU’ = 1, ‘Memory’ = 2, ‘MemorySample’ = 3, ‘MemoryPeak’ = 4, ‘ProfileEvent’ = 5, ‘JemallocSample’ = 6, ‘MemoryAllocatedWithoutCheck’ = 7, ‘Instrumentation’ = 8)) — Tipo de traza: Real representa la recopilación de trazas de pila por tiempo de reloj. CPU representa la recopilación de trazas de pila por tiempo de CPU. Memory representa la recopilación de asignaciones y liberaciones de memoria cuando la asignación de memoria supera la siguiente marca de agua. MemorySample representa la recopilación de asignaciones y liberaciones de memoria aleatorias. MemoryPeak representa la recopilación de actualizaciones del uso máximo de memoria. ProfileEvent representa la recopilación de incrementos de eventos de perfil. JemallocSample representa la recopilación de muestras de jemalloc. MemoryAllocatedWithoutCheck representa la recopilación de asignaciones significativas (>16MiB) que se realiza ignorando cualquier límite de memoria (solo para desarrolladores de ClickHouse).Instrumentation representa las trazas recopiladas mediante la instrumentación realizada a través de XRay.
  • cpu_id (UInt64) — identificador de la CPU.
  • thread_id (UInt64) — Identificador de hilo.
  • thread_name (LowCardinality(String)) — Nombre del hilo.
  • query_id (String) — Identificador de consulta que puede usarse para obtener detalles sobre una consulta que estaba en ejecución a partir de la tabla del sistema query_log.
  • trace (Array(UInt64)) — Traza de pila en el momento del muestreo. Cada elemento es una dirección de memoria virtual dentro del proceso del servidor de ClickHouse.
  • size (Int64) — Para los tipos de traza Memory, MemorySample, MemoryAllocatedWithoutCheck o MemoryPeak, indica la cantidad de memoria asignada; para los demás tipos de traza, es 0.
  • ptr (UInt64) — La dirección del fragmento asignado.
  • memory_context (Enum8(‘Unknown’ = -1, ‘Global’ = 0, ‘User’ = 1, ‘Process’ = 2, ‘Thread’ = 3, ‘Max’ = 4)) — Contexto del rastreador de memoria (solo para Memory/MemoryPeak): el contexto Unknown no está definido para este tipo de traza. Global representa el contexto del servidor. User representa el contexto de usuario/merge. Process representa el contexto del proceso (es decir, de la consulta). Thread representa el contexto del hilo (el hilo de un proceso concreto). Max es un valor especial que significa que el rastreador de memoria no está bloqueado (para la columna blocked_context).
  • memory_blocked_context (Enum8(‘Unknown’ = -1, ‘Global’ = 0, ‘User’ = 1, ‘Process’ = 2, ‘Thread’ = 3, ‘Max’ = 4)) — Contexto en el que el rastreador de memoria está bloqueado (solo para desarrolladores de ClickHouse): el contexto Unknown no está definido para este trace_type. Global representa el contexto del servidor. User representa el contexto de usuario/merge. Process representa el contexto del proceso (es decir, de la consulta). Thread representa el contexto del hilo (el hilo de un proceso concreto). Max es un valor especial que significa que el rastreador de memoria no está bloqueado (para la columna blocked_context).
  • event (LowCardinality(String)) — Para la traza de tipo ProfileEvent, es el nombre del evento de perfil actualizado; para los demás tipos de traza, es una cadena vacía.
  • increment (Int64) — Para el tipo de traza ProfileEvent, es la cantidad en que se incrementa el evento de perfil; para otros tipos de traza, es 0.
  • symbols (Array(LowCardinality(String))) — Si la simbolización está habilitada, contiene nombres de símbolos demanglados, correspondientes al trace. La simbolización puede habilitarse o deshabilitarse en la opción symbolize de trace_log dentro del archivo de configuración del servidor.
  • lines (Array(LowCardinality(String))) — Si la simbolización está activada, contiene cadenas con nombres de archivo y números de línea correspondientes a la trace.
  • function_id (Nullable(Int32)) — Para el tipo de trace Instrumentation, ID asignado a la función en la sección xray_instr_map del binario ELF.
  • function_name (Nullable(String)) — Para las trazas de tipo Instrumentation, nombre de la función instrumentada.
  • handler (Nullable(String)) — Para el tipo de traza Instrumentation, el handler de la función instrumentada.
  • entry_type (Nullable(Enum8(‘Entry’ = 0, ‘Exit’ = 1))) — Para las trazas de tipo Instrumentation, indica si se trata de la entrada o salida de la función instrumentada.
  • duration_nanoseconds (Nullable(UInt64)) — Para el tipo de trace Instrumentation, tiempo durante el cual la función estuvo en ejecución, en nanosegundos.
Alias:
  • build_id — Alias de 'E2EEB60ED9503BFFA825B628D480CCDC40B2D416'.
La simbolización puede habilitarse o deshabilitarse en symbolize, dentro de trace_log, en el archivo de configuración del servidor.

Ejemplo

SELECT * FROM system.trace_log LIMIT 1 \G
Row 1:
──────
hostname:                clickhouse.eu-central1.internal
event_date:              2025-11-11
event_time:              2025-11-11 11:53:59
event_time_microseconds: 2025-11-11 11:53:59.128333
timestamp_ns:            1762862039128333000
revision:                54504
trace_type:              Instrumentation
cpu_id:                  19
thread_id:               3166432 -- 3,17 millones
query_id:                ef462508-e189-4ea2-b231-4489506728e8
trace:                   [350594916,447733712,447742095,447727324,447726659,221642873,450882315,451852359,451905441,451885554,512404306,512509092,612861767,612863269,612466367,612455825,137631896259267,137631896856768]
size:                    0
ptr:                     0
memory_context:          Unknown
memory_blocked_context:  Unknown
event:
increment:               0
symbols:                 ['StackTrace::StackTrace()','DB::InstrumentationManager::createTraceLogElement(DB::InstrumentationManager::InstrumentedPointInfo const&, XRayEntryType, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000l>>>) const','DB::InstrumentationManager::profile(XRayEntryType, DB::InstrumentationManager::InstrumentedPointInfo const&)','DB::InstrumentationManager::dispatchHandlerImpl(int, XRayEntryType)','DB::InstrumentationManager::dispatchHandler(int, XRayEntryType)','__xray_FunctionEntry','DB::QueryMetricLog::startQuery(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000l>>>, unsigned long)','DB::logQueryStart(std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000l>>> const&, std::__1::shared_ptr<DB::Context> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, unsigned long, std::__1::shared_ptr<DB::IAST> const&, DB::QueryPipeline const&, DB::IInterpreter const*, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, bool)','DB::executeQueryImpl(char const*, char const*, std::__1::shared_ptr<DB::Context>, DB::QueryFlags, DB::QueryProcessingStage::Enum, std::__1::unique_ptr<DB::ReadBuffer, std::__1::default_delete<DB::ReadBuffer>>&, std::__1::shared_ptr<DB::IAST>&, std::__1::shared_ptr<DB::ImplicitTransactionControlExecutor>, std::__1::function<void ()>)','DB::executeQuery(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::shared_ptr<DB::Context>, DB::QueryFlags, DB::QueryProcessingStage::Enum)','DB::TCPHandler::runImpl()','DB::TCPHandler::run()','Poco::Net::TCPServerConnection::start()','Poco::Net::TCPServerDispatcher::run()','Poco::PooledThread::run()','Poco::ThreadImpl::runnableEntry(void*)','start_thread','__clone3']
lines:                   ['./build/../src/Common/StackTrace.cpp:395','./src/Common/StackTrace.h:62','./contrib/llvm-project/libcxx/include/__memory/shared_ptr.h:738','./build/./src/Interpreters/InstrumentationManager.cpp:257','./build/./src/Interpreters/InstrumentationManager.cpp:225','/home/ubuntu/ClickHouse/ClickHouse/build/programs/clickhouse','./build/./src/Interpreters/QueryMetricLog.cpp:0','./contrib/llvm-project/libcxx/include/__memory/shared_ptr.h:667','./build/./src/Interpreters/executeQuery.cpp:0','./build/./src/Interpreters/executeQuery.cpp:0','./contrib/llvm-project/libcxx/include/__memory/shared_ptr.h:744','./contrib/llvm-project/libcxx/include/__memory/shared_ptr.h:583','./build/../base/poco/Net/src/TCPServerConnection.cpp:54','../contrib/llvm-project/libcxx/include/__memory/unique_ptr.h:80','./build/../base/poco/Foundation/src/ThreadPool.cpp:219','../base/poco/Foundation/include/Poco/AutoPtr.h:77','/home/ubuntu/ClickHouse/ClickHouse/build/programs/clickhouse','/home/ubuntu/ClickHouse/ClickHouse/build/programs/clickhouse']
function_id:             231255
function_name:           DB::QueryMetricLog::startQuery(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000l>>>, unsigned long)
handler:                 profile
entry_type:              Exit
duration_nanoseconds:   58435

Conversión al formato Event Trace de Chrome

Los datos de perfilado se pueden convertir al formato Event Trace de Chrome con la siguiente consulta. Guarde la consulta en un archivo chrome_trace.sql:
WITH traces AS (
    SELECT * FROM system.trace_log
    WHERE event_date >= today() AND trace_type = 'Instrumentation' AND handler = 'profile'
    ORDER BY event_time, entry_type
)
SELECT
    format(
        '{{"traceEvents": [{}\n]}}',
        arrayStringConcat(
            groupArray(
                format(
                    '\n{{"name": "{}", "cat": "clickhouse", "ph": "{}", "ts": {}, "pid": 1, "tid": {}, "args": {{"query_id": "{}", "cpu_id": {}, "stack": [{}]}}}},',
                    function_name,
                    if(entry_type = 0, 'B', 'E'),
                    timestamp_ns/1000,
                    toString(thread_id),
                    query_id,
                    cpu_id,
                    arrayStringConcat(arrayMap((x, y) -> concat('"', x, ': ', y, '", '), lines, symbols))
                )
            )
        )
    )
FROM traces;
Y ejecútalo con ClickHouse Client para exportarlo a un archivo trace.json que luego puedes importar en Perfetto o speedscope.
echo $(clickhouse client --query "$(cat chrome_trace.sql)") > trace.json
Podemos omitir la parte de la pila si queremos una traza más compacta, aunque menos informativa.

Véase también

Última modificación el 10 de junio de 2026