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

Профилирование Запросов с Использованием Выборки

ClickHouse запускает профайлер выборки, который позволяет анализировать выполнение запросов. С помощью профайлера вы можете найти рутинные функции исходного кода, которые использовались наиболее часто во время выполнения запросов. Вы можете отслеживать время процессора и реальное время, затраченное на выполнение, включая время простоя.

Профайлер запросов автоматически включен в ClickHouse Cloud, и вы можете выполнить выборочный запрос следующим образом:

примечание
Если вы выполняете следующий запрос в ClickHouse Cloud, убедитесь, что изменили FROM system.trace_log на FROM clusterAllReplicas(default, system.trace_log), чтобы выбрать данные со всех узлов кластера.

В развертываниях с управлением собственными силами, для использования профайлера запросов:

  • Настройте секцию trace_log в конфигурации сервера.

    Эта секция настраивает системную таблицу trace_log, содержащую результаты работы профайлера. Она настроена по умолчанию. Имейте в виду, что данные в этой таблице действительны только для работающего сервера. После перезапуска сервера ClickHouse не очищает таблицу, и все сохраненные адреса виртуальной памяти могут стать недействительными.

  • Настройте параметры query_profiler_cpu_time_period_ns или query_profiler_real_time_period_ns. Оба параметра могут использоваться одновременно.

    Эти параметры позволяют настраивать таймеры профайлера. Поскольку это параметры сессии, вы можете получить разную частоту выборки для всего сервера, отдельных пользователей или профилей пользователей, для вашей интерактивной сессии и для каждого отдельного запроса.

Стандартная частота выборки составляет один образец в секунду, и оба таймера CPU и реального времени включены. Эта частота позволяет собирать достаточно информации о кластере ClickHouse. В то же время, работая с этой частотой, профайлер не влияет на производительность сервера ClickHouse. Если вам необходимо профилировать каждый отдельный запрос, попробуйте использовать более высокую частоту выборки.

Для анализа системной таблицы trace_log:

  • Установите пакет clickhouse-common-static-dbg. См. Установка из DEB пакетов.

  • Разрешите функции интроспекции с помощью параметра allow_introspection_functions.

    По соображениям безопасности функции интроспекции отключены по умолчанию.

  • Используйте функции интроспекции addressToLine, addressToLineWithInlines, addressToSymbol и demangle функции интроспекции для получения имен функций и их позиций в коде ClickHouse. Чтобы получить отчет для какого-либо запроса, вам необходимо агрегировать данные из таблицы trace_log. Вы можете агрегировать данные по отдельным функциям или по целым стек-трейсам.

Если вам нужно визуализировать информацию из trace_log, попробуйте flamegraph и speedscope.

Пример

В этом примере мы:

  • Фильтруем данные trace_log по идентификатору запроса и текущей дате.

  • Агрегируем по стек-трейсу.

  • Используя функции интроспекции, мы получим отчет о:

    • Названиях символов и соответствующих им функциях исходного кода.
    • Местоположениях функций в исходном коде.