Запросы в ClickHouse CloudДанные в этой системной таблице хранятся локально на каждом узле ClickHouse Cloud. Поэтому, чтобы получить полное представление обо всех данных, требуется функция
clusterAllReplicas. Дополнительные сведения см. здесь.Описание
Содержит трассировки стека, собранные выборочным профилировщиком запросов и другими источниками, указанными в столбцеtrace_type.
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.
Когда символизация включена (по умолчанию), деманглированные имена функций и местоположения в исходном коде уже доступны в столбцах symbols и lines, поэтому журналы можно анализировать напрямую без функций интроспекции. Настройка symbolize применяется к типам трассировок, собранным профилировщиком; строки с типом трассировки Instrumentation символизируются независимо от этой настройки. Символизация поддерживается на платформах ELF (таких как Linux) и macOS; в FreeBSD столбцы symbols и lines всегда пусты. Имена функций в symbols берутся из таблицы символов бинарного файла и доступны по умолчанию, а местоположения в исходном коде в lines определяются по мере возможности: для них требуется отладочная информация (пакет .dSYM в macOS), а на платформах ELF они определяются только для кадров внутри основного бинарного файла ClickHouse; для неразрешенных кадров записи lines пусты.
Если символизация отключена или вы хотите определить необработанные адреса в столбце trace на лету (например, чтобы раскрыть inline-кадры), используйте функции интроспекции addressToLine, addressToLineWithInlines, addressToSymbol и demangle. Эти функции доступны на тех же платформах, что и символизация (платформах ELF, таких как Linux, и macOS); в FreeBSD они также не скомпилированы, поэтому адреса в trace необходимо определять вне сервера.
Преобразование в формат трассировки событий Chrome
Данные профилирования можно преобразовать в формат трассировки событий Chrome с помощью следующего запроса. Сохраните запрос в файлchrome_trace.sql:
trace.json, который затем можно импортировать либо в Perfetto, либо в speedscope.
Столбцы
hostname(LowCardinality(String)) — Имя хоста сервера, выполняющего запрос.clickhouse_version(LowCardinality(String)) — Версия сервера ClickHouse, создавшего строку.system_processor(LowCardinality(String)) — Архитектура CPU сервера ClickHouse, создавшего строку.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, ‘MemoryLargeAllocation’ = 9)) — Тип трассировки:Realозначает сбор трассировок стека по астрономическому времени.CPUозначает сбор трассировок стека по времени CPU.Memoryозначает сбор событий выделения и освобождения памяти, когда её выделение превышает следующую водяную метку.MemorySampleозначает сбор случайных событий выделения и освобождения памяти.MemoryPeakозначает сбор обновлений пикового потребления памяти.ProfileEventозначает сбор приращений profile events.JemallocSampleозначает сбор сэмплов jemalloc.MemoryAllocatedWithoutCheckозначает сбор значительных выделений памяти (>16MiB), который выполняется без учёта каких-либо ограничений памяти (только для разработчиков ClickHouse).Instrumentationозначает трассы, собранные с помощью инструментирования через XRay.MemoryLargeAllocationозначает единичное списание в глобальном трекере памяти, размер которого достигmin_allocation_size_to_log_stack_trace; такая трасса также записывается в лог сервера (только для разработчиков ClickHouse).cpu_id(UInt64) — идентификатор процессора.thread_id(UInt64) — идентификатор потока.thread_name(LowCardinality(String)) — имя потока.query_id(String) — идентификатор запроса, который можно использовать для получения сведений о выполнявшемся запросе из системной таблицы query_log.trace(Array(UInt64)) — трассировка стека на момент сэмплирования. Для типов трассировок, собранных профилировщиком, на платформах ELF, кроме FreeBSD, адреса в основном бинарном файле ClickHouse хранятся как физические смещения в файле, а остальные адреса являются виртуальными адресами памяти в процессе сервера ClickHouse. Строки трассировки Instrumentation являются исключением: в них хранятся необработанные виртуальные адреса памяти.size(Int64) — Для типов трассировок, связанных с памятью, это размер в байтах: выделенный размер для Memory и MemoryAllocatedWithoutCheck; выделенный размер, взятый с отрицательным знаком при освобождении, для MemorySample и JemallocSample; новое пиковое значение трекера для MemoryPeak; размер списания в глобальном трекере памяти для MemoryLargeAllocation. Для остальных типов трассировок — 0.ptr(UInt64) — адрес выделенного фрагмента.memory_context(Enum8(‘Unknown’ = -1, ‘Global’ = 0, ‘User’ = 1, ‘Process’ = 2, ‘Thread’ = 3, ‘Max’ = 4)) — контекст трекера памяти (только для Memory, MemoryPeak и MemoryLargeAllocation): контекст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)) — Для типаtraceProfileEventэто имя обновлённого события профиля, для других типовtraceэто пустая строка.increment(Int64) — для трассировки типа ProfileEvent это величина приращения события профиля, для остальных типов трассировки — 0.symbols(Array(LowCardinality(String))) — Если символизация включена, содержит деманглированные имена символов, соответствующиеtrace. Символизацию можно включить или отключить с помощью настройкиsymbolizeв разделеtrace_logфайла конфигурации сервера; настройка применяется к типам трассировок, собираемым профилировщиком, тогда как строки с типом трассировкиInstrumentationсимволизируются независимо от неё. Символизация поддерживается на платформах ELF (таких как Linux) и macOS; на FreeBSD этот столбец всегда пуст.lines(Array(LowCardinality(String))) — Если символизация включена, содержит строки с именами файлов и номерами строк, соответствующимиtrace. Настройкаsymbolizeприменяется к типам трассировок, собираемым профилировщиком, тогда как строки с типом трассировкиInstrumentationсимволизируются независимо от неё. Символизация поддерживается на платформах ELF (таких как Linux) и macOS; на FreeBSD этот столбец всегда пуст. Местоположения в исходном коде определяются по возможности: для них требуется отладочная информация (пакет.dSYMв macOS), а на платформах ELF они определяются только для кадров внутри основного бинарного файла ClickHouse; для неразрешённых кадров записи пусты.function_id(Nullable(Int32)) — Для типа trace Instrumentation — идентификатор, присвоенный функции в разделе xray_instr_map ELF-бинарного файла.function_name(Nullable(String)) — Для Instrumentation типа trace — имя функции, в которую добавлена инструментация.handler(Nullable(String)) — Для трассировок типа Instrumentation — обработчик функции с инструментированием.entry_type(Nullable(Enum8(‘Entry’ = 0, ‘Exit’ = 1))) — Для трассы типа Instrumentation: тип Entry/Exit инструментируемой функции.duration_nanoseconds(Nullable(UInt64)) — для trace-типа Instrumentation: время выполнения функции в наносекундах.
build_id— псевдоним для ID сборки бинарного файла работающего сервера ClickHouse.
symbolize в разделе trace_log файла конфигурации сервера. По умолчанию она включена. Эта настройка применяется к типам трассировки, собранным профилировщиком; строки с типом трассировки Instrumentation символизируются независимо от этой настройки.
Пример
См. также
- SYSTEM INSTRUMENT — Добавить или удалить точки инструментирования.
- system.instrumentation — Просмотреть инструментированные точки.
- system.symbols — Просмотреть символы для добавления точек инструментирования.