system.asynchronous_loader
Данные в этой системной таблице хранятся локально на каждом узле в ClickHouse Cloud. Для получения полного представления о всех данных необходимо использовать функцию clusterAllReplicas
. Подробности см. здесь.
Содержит информацию и статус актуальных асинхронных заданий (например, для загрузки таблиц). Таблица содержит строку для каждого задания. Существует инструмент для визуализации информации из этой таблицы utils/async_loader_graph
.
Пример:
Колонки:
job
(String
) - Название задания (может не быть уникальным).job_id
(UInt64
) - Уникальный ID задания.dependencies
(Array(UInt64)
) - Список ID заданий, которые должны быть выполнены перед этим заданием.dependencies_left
(UInt64
) - Текущее количество зависимостей, которые еще нужно выполнить.status
(Enum
) - Текущий статус загрузки задания:PENDING
: Задание на загрузку еще не начато.OK
: Задание на загрузку выполнено и завершено успешно.FAILED
: Задание на загрузку выполнено и завершилось с ошибкой.CANCELED
: Задание на загрузку не будет выполнено из-за удаления или сбоя зависимости.
Ожидающее задание может находиться в одном из следующих состояний:
is_executing
(UInt8
) - Задание в настоящее время выполняется рабочим.is_blocked
(UInt8
) - Задание ждет выполнения своих зависимостей.is_ready
(UInt8
) - Задание готово к выполнению и ждет рабочего.elapsed
(Float64
) - Секунды, прошедшие с начала выполнения. Ноль, если задание не начато. Общее время выполнения, если задание завершено.
Каждое задание связано с пулом и запускается в этом пуле. Каждый пул имеет постоянный приоритет и изменяемое максимальное количество рабочих. Задания с более высоким приоритетом (меньшее значение priority
) выполняются в первую очередь. Ни одно задание с низким приоритетом не запускается, пока есть хотя бы одно задание с более высоким приоритетом, готовое к выполнению или выполняемое. Приоритет задания может быть повышен (но не может быть понижен) при его приоритизации. Например, задания для загрузки и запуска таблицы будут приортизированы, если входящий запрос требует эту таблицу. Возможно повышать приоритет задания во время его выполнения, но задание не перемещается из своего execution_pool
в новый pool
. Задание использует pool
для создания новых заданий, чтобы избежать инверсии приоритета. Уже начатые задания не прерываются заданиями с более высоким приоритетом и всегда доводятся до завершения после старта.
-
pool_id
(UInt64
) - ID пула, в настоящее время назначенного заданию. -
pool
(String
) - Название пулаpool_id
. -
priority
(Int64
) - Приоритет пулаpool_id
. -
execution_pool_id
(UInt64
) - ID пула, в котором выполняется задание. Равно первоначально назначенному пулу до начала выполнения. -
execution_pool
(String
) - Название пулаexecution_pool_id
. -
execution_priority
(Int64
) - Приоритет пулаexecution_pool_id
. -
ready_seqno
(Nullable(UInt64)
) - Не ноль для готовых заданий. Рабочий получает следующее задание для выполнения из очереди готовых заданий своего пула. Если есть несколько готовых заданий, выбирается задание с наименьшим значениемready_seqno
. -
waiters
(UInt64
) - Количество потоков, ожидающих выполнения этого задания. -
exception
(Nullable(String)
) - Не ноль для неудачных и отмененных заданий. Содержит сообщение об ошибке, возникшей во время выполнения запроса, или ошибку, приводящую к отмене этого задания вместе с цепочкой сбоев зависимостей заданий.
Временные моменты в жизни задания:
schedule_time
(DateTime64
) - Время, когда задание было создано и запланировано для выполнения (обычно вместе со всеми его зависимостями).enqueue_time
(Nullable(DateTime64)
) - Время, когда задание стало готовым и было добавлено в очередь готовых заданий своего пула. Null, если задание еще не готово.start_time
(Nullable(DateTime64)
) - Время, когда рабочий извлекает задание из очереди готовых заданий и начинает его выполнение. Null, если задание еще не начато.finish_time
(Nullable(DateTime64)
) - Время, когда выполнение задания завершено. Null, если задание еще не завершено.