system.trace_log
Данные в этой системной таблице хранятся локально на каждом узле в ClickHouse Cloud. Поэтому для получения полного обзора всех данных требуется функция clusterAllReplicas. Подробности см. здесь.
Содержит стеки трассировки, собираемые sampling query profiler.
ClickHouse создаёт эту таблицу, когда задана секция конфигурации сервера trace_log. См. также настройки: query_profiler_real_time_period_ns, query_profiler_cpu_time_period_ns, memory_profiler_step, memory_profiler_sample_probability, trace_profile_events.
Для анализа журналов используйте функции интроспекции addressToLine, addressToLineWithInlines, addressToSymbol и demangle.
Столбцы:
-
hostname(LowCardinality(String)) — имя хоста сервера, выполняющего запрос. -
event_date(Date) — дата момента выборки. -
event_time(DateTime) — временная метка момента выборки. -
event_time_microseconds(DateTime64) — временная метка момента выборки с точностью до микросекунд. -
timestamp_ns(UInt64) — временная метка момента выборки в наносекундах. -
revision(UInt32) — ревизия сборки сервера ClickHouse.При подключении к серверу с помощью
clickhouse-clientвы видите строку, похожую наConnected to ClickHouse server version 19.18.1.. Это поле содержитrevision, но неversionсервера. -
trace_type(Enum8) — тип трассировки:Real— сбор stack trace по реальному времени (wall-clock time).CPU— сбор stack trace по времени работы CPU.Memory— сбор аллокаций и освобождений при превышении выделением памяти следующего watermark.MemorySample— сбор случайных аллокаций и освобождений.MemoryPeak— сбор обновлений пикового потребления памяти.ProfileEvent— сбор увеличений profile events.JemallocSample— сбор сэмплов jemalloc.MemoryAllocatedWithoutCheck— сбор значительных аллокаций (>16MiB), выполняемый с игнорированием любых лимитов памяти (только для разработчиков ClickHouse).Instrumentation— трассы, собранные инструментированием, выполняемым через XRay.
-
cpu_id(UInt64) — идентификатор CPU. -
thread_id(UInt64) — идентификатор потока. -
query_id(String) — идентификатор запроса, который можно использовать для получения деталей о выполнявшемся запросе из системной таблицы query_log. -
trace(Array(UInt64)) — stack trace в момент выборки. Каждый элемент — виртуальный адрес памяти внутри процесса сервера ClickHouse. -
size(Int64) - для типов трассировкиMemory,MemorySampleилиMemoryPeak— количество выделенной памяти, для остальных типов трассировки — 0. -
event(LowCardinality(String)) - для типа трассировкиProfileEvent— имя обновлённого profile event, для остальных типов трассировки — пустая строка. -
increment(UInt64) - для типа трассировкиProfileEvent— величина увеличения profile event, для остальных типов трассировки — 0. -
symbols, (Array(LowCardinality(String))), если символизация включена, содержит деманглированные имена символов, соответствующихtrace. -
lines, (Array(LowCardinality(String))), если символизация включена, содержит строки с именами файлов и номерами строк, соответствующихtrace. -
function_id(Nullable(Int32)), для типа трассировки Instrumentation — идентификатор, назначенный функции в секции xray_instr_map ELF-бинарного файла. -
function_name(Nullable(String)), для типа трассировки Instrumentation — имя инструментированной функции. -
handler(Nullable(String)), для типа трассировки Instrumentation — обработчик инструментированной функции. -
entry_type(Nullable(Enum('Entry' = 0, 'Exit' = 1))), для типа трассировки Instrumentation — тип события трассы (вход/выход). -
duration_nanoseconds(Nullable(UInt64)), для типа трассировки Instrumentation — время работы функции в наносекундах.
Символизацию можно включить или отключить в параметре symbolize в секции trace_log конфигурационного файла сервера.
Пример
Данные профилирования можно преобразовать в формат трассировки событий Chrome (Event Trace Format) с помощью следующего запроса. Сохраните запрос в файл chrome_trace.sql:
И выполняем его с помощью клиента ClickHouse, чтобы экспортировать в файл trace.json, который затем можно импортировать либо в Perfetto, либо в speedscope.
Мы можем опустить часть стека, если нам нужна более компактная, но менее информативная трассировка.
См. также
- SYSTEM INSTRUMENT — добавить или удалить точки инструментации.
- system.instrumentation — просмотреть функции с включённой инструментацией.