processors_profile_log
Querying in ClickHouse Cloud
The data in this system table is held locally on each node in ClickHouse Cloud. Obtaining a complete view of all data, therefore, requires the clusterAllReplicas
function. See here for further details.
This table contains profiling on processors level (that you can find in EXPLAIN PIPELINE
).
Columns:
hostname
(LowCardinality(String)) — Hostname of the server executing the query.event_date
(Date) — The date when the event happened.event_time
(DateTime) — The date and time when the event happened.event_time_microseconds
(DateTime64) — The date and time with microseconds precision when the event happened.id
(UInt64) — ID of processorparent_ids
(Array(UInt64)) — Parent processors IDsplan_step
(UInt64) — ID of the query plan step which created this processor. The value is zero if the processor was not added from any step.plan_group
(UInt64) — Group of the processor if it was created by query plan step. A group is a logical partitioning of processors added from the same query plan step. Group is used only for beautifying the result of EXPLAIN PIPELINE result.initial_query_id
(String) — ID of the initial query (for distributed query execution).query_id
(String) — ID of the queryname
(LowCardinality(String)) — Name of the processor.elapsed_us
(UInt64) — Number of microseconds this processor was executed.input_wait_elapsed_us
(UInt64) — Number of microseconds this processor was waiting for data (from other processor).output_wait_elapsed_us
(UInt64) — Number of microseconds this processor was waiting because output port was full.input_rows
(UInt64) — The number of rows consumed by processor.input_bytes
(UInt64) — The number of bytes consumed by processor.output_rows
(UInt64) — The number of rows generated by processor.output_bytes
(UInt64) — The number of bytes generated by processor. Example
Query:
EXPLAIN PIPELINE
SELECT sleep(1)
┌─explain─────────────────────────┐
│ (Expression) │
│ ExpressionTransform │
│ (SettingQuotaAndLimits) │
│ (ReadFromStorage) │
│ SourceFromSingleChunk 0 → 1 │
└─────────────────────────────────┘
SELECT sleep(1)
SETTINGS log_processors_profiles = 1
Query id: feb5ed16-1c24-4227-aa54-78c02b3b27d4
┌─sleep(1)─┐
│ 0 │
└──────────┘
1 rows in set. Elapsed: 1.018 sec.
SELECT
name,
elapsed_us,
input_wait_elapsed_us,
output_wait_elapsed_us
FROM system.processors_profile_log
WHERE query_id = 'feb5ed16-1c24-4227-aa54-78c02b3b27d4'
ORDER BY name ASC
Result:
┌─name────────────────────┬─elapsed_us─┬─input_wait_elapsed_us─┬─output_wait_elapsed_us─┐
│ ExpressionTransform │ 1000497 │ 2823 │ 197 │
│ LazyOutputFormat │ 36 │ 1002188 │ 0 │
│ LimitsCheckingTransform │ 10 │ 1002994 │ 106 │
│ NullSource │ 5 │ 1002074 │ 0 │
│ NullSource │ 1 │ 1002084 │ 0 │
│ SourceFromSingleChunk │ 45 │ 4736 │ 1000819 │
└─────────────────────────┴────────────┴───────────────────────┴────────────────────────┘
Here you can see:
ExpressionTransform
was executingsleep(1)
function, so itwork
will takes 1e6, and soelapsed_us
> 1e6.SourceFromSingleChunk
need to wait, becauseExpressionTransform
does not accept any data during execution ofsleep(1)
, so it will be inPortFull
state for 1e6 us, and sooutput_wait_elapsed_us
> 1e6.LimitsCheckingTransform
/NullSource
/LazyOutputFormat
need to wait untilExpressionTransform
will executesleep(1)
to process the result, soinput_wait_elapsed_us
> 1e6.
See Also