Запросы в ClickHouse CloudДанные в этой системной таблице хранятся локально на каждом узле ClickHouse Cloud. Поэтому, чтобы получить полное представление обо всех данных, требуется функция
clusterAllReplicas. Дополнительные сведения см. здесь.Описание
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 необходимо определять вне сервера.
Столбцы
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)) — трассировка стека на момент сэмплирования. Для типов трассировок, собранных профилировщиком, на платформах ELF, кроме FreeBSD, адреса в основном бинарном файле ClickHouse хранятся как физические смещения в файле, а остальные адреса являются виртуальными адресами памяти в процессе сервера ClickHouse. Строки трассировки Instrumentation являются исключением: в них хранятся необработанные виртуальные адреса памяти.size(Int64) — для типов trace Memory, MemorySample, MemoryAllocatedWithoutCheck и MemoryPeak это объём выделенной памяти, для остальных типов trace — 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)) — Для типа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 символизируются независимо от этой настройки.
Пример
Преобразование в формат трассировки событий Chrome
chrome_trace.sql:
trace.json, который затем можно импортировать либо в Perfetto, либо в speedscope.
См. также
- SYSTEM INSTRUMENT — Добавить или удалить точки инструментирования.
- system.instrumentation — Просмотреть инструментированные точки.
- system.symbols — Просмотреть символы для добавления точек инструментирования.