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(6)) — таймстамп момента выборки с точностью до микросекунд.timestamp_ns(UInt64) — Таймстамп времени выборки в наносекундах.revision(UInt32) — ревизия сборки сервера ClickHouse. При подключении к серверу с помощьюclickhouse-clientвы увидите строку видаConnected to ClickHouse server version 19.18.1.. Это поле содержит значениеrevision, а неversionсервера.trace_type(Enum8('Real' = 0, 'CPU' = 1, 'Memory' = 2, 'MemorySample' = 3, 'MemoryPeak' = 4, 'ProfileEvent' = 5, 'JemallocSample' = 6, 'MemoryAllocatedWithoutCheck' = 7, 'Instrumentation' = 8)) — Тип трейса:Realозначает сбор стек-трейсов по реальному времени.CPUозначает сбор стек-трейсов по времени CPU.Memoryозначает сбор сведений о выделении и освобождении памяти, когда объём выделяемой памяти превышает заданный порог.MemorySampleозначает сбор случайных выделений и освобождений памяти.MemoryPeakозначает сбор обновлений пикового потребления памяти.ProfileEventозначает сбор инкрементов profile events.JemallocSampleозначает сбор выборок jemalloc.MemoryAllocatedWithoutCheckозначает сбор значительных выделений памяти (>16MiB), который выполняется без учёта каких-либо ограничений памяти (только для разработчиков ClickHouse).Instrumentationозначает трейсы, собранные с помощью инструментирования через XRay.cpu_id(UInt64) — идентификатор процессора.thread_id(UInt64) — идентификатор потока.thread_name(LowCardinality(String)) — Название потока.query_id(String) — идентификатор запроса, который можно использовать для получения сведений о выполнявшемся запросе из системной таблицы query_log.trace(Array(UInt64)) — Стек вызовов на момент семплирования. Каждый элемент — виртуальный адрес памяти в процессе сервера ClickHouse.size(Int64) — для типов трейса Memory, MemorySample, MemoryAllocatedWithoutCheck или MemoryPeak это объём выделенной памяти, для остальных типов трейса — 0.ptr(UInt64) — адрес выделенного фрагмента.memory_context(Enum8('Unknown' = -1, 'Global' = 0, 'User' = 1, 'Process' = 2, 'Thread' = 3, 'Max' = 4)) — Контекст трекера памяти (только для Memory/MemoryPeak): контекстUnknownне определён для этогоtrace_type.Globalобозначает глобальный контекст сервера.Userобозначает контекст пользователя или слияния.Processобозначает контекст процесса (то есть запроса).Threadобозначает контекст потока (потока конкретного процесса).Max— это специальное значение, означающее, что трекер памяти не заблокирован (для столбцаblocked_context).memory_blocked_context(Enum8('Unknown' = -1, 'Global' = 0, 'User' = 1, 'Process' = 2, 'Thread' = 3, 'Max' = 4)) — Контекст, в котором заблокирован трекер памяти (только для разработчиков ClickHouse): контекстUnknownне определён для этогоtrace_type.Globalобозначает контекст сервера.Userобозначает контекст пользователя/слияния.Processобозначает контекст процесса (то есть запроса).Threadобозначает контекст потока (потока конкретного процесса).Max— это специальное значение, которое означает, что трекер памяти не заблокирован (для столбцаblocked_context).event(LowCardinality(String)) — Для типа трейса ProfileEvent это имя обновлённого события профиля, для других типов трейсов — пустая строка.increment(Int64) — для трейса типа ProfileEvent это величина приращения события профиля, для остальных типов трейсов — 0.symbols(Array(LowCardinality(String))) — Если символизация включена, содержит деманглированные имена символов, соответствующиетрейсу. Символизацию можно включить или отключить с помощью настройкиsymbolizeв разделеtrace_logв файле конфигурации сервера.lines(Array(LowCardinality(String))) — Если символизация включена, содержит строки с именами файлов и номерами строк, соответствующиетрейсу.function_id(Nullable(Int32)) — Для Instrumentation типа «трейс» — идентификатор, присвоенный функции в разделе xray_instr_map ELF-бинарного файла.function_name(Nullable(String)) — Для типа трейса Instrumentation: имя функции, к которой применена инструментализация.handler(Nullable(String)) — Для Instrumentation типа трейс — handler инструментируемой функции.entry_type(Nullable(Enum8('Entry' = 0, 'Exit' = 1))) — Для трейса типа Instrumentation: тип входа/выхода инструментируемой функции.duration_nanoseconds(Nullable(UInt64)) — Для типа Instrumentation в трейсе — длительность выполнения функции в наносекундах.
Псевдонимы:
build_id— псевдоним для'E2EEB60ED9503BFFA825B628D480CCDC40B2D416'.
Символизацию можно включить или отключить в параметре symbolize в секции trace_log конфигурационного файла сервера.
Пример
Преобразование в формат трассировки событий Chrome
Данные профилирования можно преобразовать в формат трассировки событий Chrome с помощью следующего запроса. Сохраните запрос в файл chrome_trace.sql:
И выполнить его в ClickHouse Client, чтобы экспортировать результат в файл trace.json, который затем можно импортировать либо в Perfetto, либо в speedscope.
Мы можем опустить часть со стеком, если хотим более компактную, но менее информативную трассировку.
См. также
- SYSTEM INSTRUMENT — Добавить или удалить точки инструментирования.
- system.instrumentation — Просматривать проинструментированные точки.
- system.symbols — Просматривать символы для добавления точек инструментирования.