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, если задание еще не завершено.