Профилирование выборки запросов
ClickHouse выполняет профилирование выборки, которое позволяет анализировать выполнение запросов. С помощью профилировщика вы можете найти рутинные функции исходного кода, которые использовались чаще всего во время выполнения запроса. Вы можете отследить время CPU и время с учетом реальных часов, включая время простоя.
Профилировщик запросов автоматически включен в 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
по идентификатору запроса и текущей дате. -
Агрегируем по стек-трейсу.
-
Используя функции инспекции, получим отчет о:
- Именах символов и соответствующих функциях исходного кода.
- Местоположениях исходного кода этих функций.