Функции интроспекции
Вы можете использовать функции, описанные в этой главе, для интроспекции ELF и DWARF для профилирования запросов.
Эти функции медленные и могут создавать проблемы с безопасностью.
Для правильной работы функций интроспекции:
-
Установите пакет
clickhouse-common-static-dbg
. -
Установите настройку allow_introspection_functions в 1.
По соображениям безопасности функции интроспекции по умолчанию отключены.
ClickHouse сохраняет отчеты профилировщика в системной таблице trace_log. Убедитесь, что таблица и профилировщик настроены правильно.
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
вывода.
addressToLineWithInlines
Аналогично addressToLine
, но возвращает массив со всеми встроенными функциями. Как следствие, он медленнее, чем addressToLine
.
Если вы используете официальные пакеты ClickHouse, вам нужно установить пакет clickhouse-common-static-dbg
.
Синтаксис
Аргументы
address_of_binary_instruction
(UInt64) — Адрес инструкции в запущенном процессе.
Возвращаемое значение
- Массив, первый элемент которого — это имя файла исходного кода и номер строки в файле, разделенные двоеточием. Начиная со второго элемента, перечислены имена файлов исходного кода автоматически встроенных функций, номера строк и названия функций. Если функция не смогла найти отладочную информацию, возвращается массив с единственным элементом, равным имени бинарного файла, в противном случае возвращается пустой массив, если адрес недействителен. Array(String).
Пример
Включение функций интроспекции:
Применение функции к адресу.
Применение функции ко всей трассировке стека:
Функции arrayJoin разобьют массив на строки.
addressToSymbol
Преобразует виртуальный адрес памяти внутри процесса сервера ClickHouse в символ из объектных файлов ClickHouse.
Синтаксис
Аргументы
address_of_binary_instruction
(UInt64) — Адрес инструкции в запущенном процессе.
Возвращаемое значение
Пример
Включение функций интроспекции:
Выбор первой строки из системной таблицы trace_log
:
Поле trace
содержит трассировку стека в момент выборки.
Получение символа для одного адреса:
Применение функции ко всей трассировке стека:
Функция arrayMap позволяет обрабатывать каждый отдельный элемент массива trace
с помощью функции addressToSymbols
. Результат этой обработки вы видите в столбце trace_symbols
вывода.
demangle
Преобразует символ, который вы можете получить с помощью функции addressToSymbol, в имя функции C++.
Синтаксис
Аргументы
symbol
(String) — Символ из объектного файла.
Возвращаемое значение
- Имя C++ функции или пустая строка, если символ недействителен. String.
Пример
Включение функций интроспекции:
Выбор первой строки из системной таблицы trace_log
:
Поле trace
содержит трассировку стека в момент выборки.
Получение имени функции для одного адреса:
Применение функции ко всей трассировке стека:
Функция arrayMap позволяет обрабатывать каждый отдельный элемент массива trace
с помощью функции demangle
. Результат этой обработки вы видите в столбце trace_functions
вывода.
tid
Возвращает идентификатор потока, в котором обрабатывается текущий Block.
Синтаксис
Возвращаемое значение
- Текущий идентификатор потока. Uint64.
Пример
Запрос:
Результат:
logTrace
Отправляет сообщение трассировки в лог сервера для каждого Block.
Синтаксис
Аргументы
message
— Сообщение, которое отправляется в лог сервера. String.
Возвращаемое значение
- Всегда возвращает 0.
Пример
Запрос:
Результат: