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)
) - Время, когда задача стала готовой и была добавлена в очередь готовых задач своего пула. Нуль, если задача еще не готова.start_time
(Nullable(DateTime64)
) - Время, когда работник извлекает задачу из очереди готовых задач и начинает ее выполнение. Нуль, если задача еще не начата.finish_time
(Nullable(DateTime64)
) - Время, когда выполнение задачи завершено. Нуль, если задача еще не завершена.