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