Перейти к основному содержимому
Перейти к основному содержимому

Функции интроспекции

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

Возвращаемое значение

  • Символ из объектных файлов ClickHouse. String.
  • Пустая строка, если адрес не является допустимым. String.

Пример

Включение функций интроспекции:

Выбор первой строки из системной таблицы trace_log:

Поле trace содержит стек вызовов в момент выборки.

Получение символа для единственного адреса:

Применение функции ко всему стеку вызовов:

Функция arrayMap позволяет обрабатывать каждый отдельный элемент массива trace с помощью функции addressToSymbol. Результат этой обработки вы видите в колонке 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.

Пример

Запрос:

Результат: