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)
) - Время, когда выполнение задачи завершено. Нуль, если задача еще не завершена.