system.processors_profile_log
Выполнение запросов в ClickHouse Cloud
Данные в этой системной таблице хранятся локально на каждом узле в ClickHouse Cloud. Поэтому для получения полного обзора всех данных требуется функция clusterAllReplicas. Подробности см. здесь.
Эта таблица содержит профилирующие данные на уровне процессоров (которые можно увидеть в EXPLAIN PIPELINE).
Столбцы:
hostname(LowCardinality(String)) — Имя хоста сервера, выполняющего запрос.event_date(Date) — Дата, когда произошло событие.event_time(DateTime) — Дата и время, когда произошло событие.event_time_microseconds(DateTime64) — Дата и время с точностью до микросекунд, когда произошло событие.id(UInt64) — ID процессора.parent_ids(Array(UInt64)) — ID родительских процессоров.plan_step(UInt64) — ID шага плана запроса, который создал этот процессор. Значение равно нулю, если процессор не был добавлен ни одним шагом.plan_group(UInt64) — Группа процессора, если он был создан шагом плана запроса. Группа — это логическое разбиение процессоров, добавленных одним и тем же шагом плана запроса. Группа используется только для улучшения читаемости результата EXPLAIN PIPELINE.initial_query_id(String) — ID исходного запроса (для распределённого выполнения запросов).query_id(String) — ID запроса.name(LowCardinality(String)) — Имя процессора.elapsed_us(UInt64) — Количество микросекунд, в течение которых выполнялся этот процессор.input_wait_elapsed_us(UInt64) — Количество микросекунд, в течение которых этот процессор ожидал данные (от другого процессора).output_wait_elapsed_us(UInt64) — Количество микросекунд, в течение которых этот процессор ожидал, потому что выходной порт был заполнен.input_rows(UInt64) — Количество строк, обработанных процессором.input_bytes(UInt64) — Количество байт, обработанных процессором.output_rows(UInt64) — Количество строк, сгенерированных процессором.output_bytes(UInt64) — Количество байт, сгенерированных процессором. Пример
Запрос:
Результат:
Здесь видно, что:
ExpressionTransformвыполнял функциюsleep(1), поэтому выполнение егоworkзаймет 1e6 мкс, и, следовательно,elapsed_us> 1e6.SourceFromSingleChunkдолжен ждать, потому чтоExpressionTransformне принимает данные во время выполненияsleep(1), поэтому он будет в состоянииPortFullв течение 1e6 мкс, и, следовательно,output_wait_elapsed_us> 1e6.LimitsCheckingTransform/NullSource/LazyOutputFormatдолжны ждать, покаExpressionTransformвыполнитsleep(1), чтобы обработать результат, поэтомуinput_wait_elapsed_us> 1e6.
См. также