Функции интроспекции
Функции из этого раздела могут использоваться для интроспекции ELF и DWARF в целях профилирования запросов.
Эти функции выполняются медленно и могут приводить к нежелательным последствиям в плане безопасности.
Для правильной работы функций интроспекции:
-
Установите пакет
clickhouse-common-static-dbg
. -
Установите настройку allow_introspection_functions в 1.
Из соображений безопасности данные функции отключены по умолчанию.
ClickHouse сохраняет отчеты профилировщика в журнал трассировки в системной таблице. Убедитесь, что таблица и профилировщик настроены правильно.
addressToLine
Преобразует адрес виртуальной памяти внутри процесса сервера ClickHouse в имя файла и номер строки в исходном коде ClickHouse.
Если вы используете официальные пакеты ClickHouse, вам необходимо установить следующий пакеты: clickhouse-common-static-dbg
.
Синтаксис
Аргументы
address_of_binary_instruction
(Тип UInt64)- Адрес инструкции в запущенном процессе.
Возвращаемое значение
-
Имя файла исходного кода и номер строки в этом файле разделяются двоеточием.
Например,
/build/obj-x86_64-linux-gnu/../src/Common/ThreadPool.cpp:199
, где199
— номер строки. -
Имя бинарного файла, если функция не может найти отладочную информацию.
-
Пустая строка, если адрес не является допустимым.
Тип: String.
Пример
Включение функций самоанализа:
Выбор первой строки из списка trace_log
системная таблица:
То trace
поле содержит трассировку стека в момент выборки.
Получение имени файла исходного кода и номера строки для одного адреса:
Применение функции ко всему стектрейсу:
Функция arrayMap позволяет обрабатывать каждый отдельный элемент массива trace
с помощью функции addressToLine
. Результат этой обработки вы видите в виде trace_source_code_lines
колонки выходных данных.
addressToSymbol
Преобразует адрес виртуальной памяти внутри серверного процесса ClickHouse в символ из объектных файлов ClickHouse.
Синтаксис
Аргументы
address_of_binary_instruction
(Тип uint64) — адрес инструкции в запущенном процессе.
Возвращаемое значение
- Символ из объектных файлов ClickHouse.
- Пустая строка, если адрес не является допустимым.
Тип: String.
Пример
Включение функций самоанализа:
Выбор первой строки из списка trace_log
системная таблица:
То trace
поле содержит трассировку стека в момент выборки.
Получение символа для одного адреса:
Применение функции ко всей трассировке стека:
То arrayMap функция позволяет обрабатывать каждый отдельный элемент системы. trace
массив по типу addressToSymbols
функция. Результат этой обработки вы видите в виде trace_symbols
колонка выходных данных.
demangle
Преобразует символ, который вы можете получить с помощью addressstosymbol функция имя функции C++.
Синтаксис
Аргументы
symbol
(Строка) - символ из объектного файла.
Возвращаемое значение
- Имя функции C++.
- Пустая строка, если символ не является допустимым.
Тип: Строка.
Пример
Включение функций самоанализа:
Выбор первой строки из списка trace_log
системная таблица:
То trace
поле содержит трассировку стека в момент выборки.
Получение имени функции для одного адреса:
Применение функции ко всему стектрейсу:
Функция arrayMap позволяет обрабатывать каждый отдельный элемент массива trace
с помощью функции demangle
.
tid
Возвращает id потока, в котором обрабатывается текущий Block.
Синтаксис
Возвращаемое значение
- Id текущего потока. Uint64.
Пример
Запрос:
Результат:
logTrace
Выводит сообщение в лог сервера для каждого Block.
Синтаксис
Аргументы
message
— сообщение, которое отправляется в серверный лог. String.
Возвращаемое значение
- Всегда возвращает 0.
Пример
Запрос:
Результат: