Функции интроспекции
Вы можете использовать функции, описанные в этой главе, для интроспекции 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.
Пример
Запрос:
Результат: