system.asynchronous_loader
Данные в этой системной таблице хранятся локально на каждом узле в ClickHouse Cloud. Поэтому для получения полного обзора всех данных требуется функция clusterAllReplicas. Подробности см. здесь.
Содержит информацию и статус недавних асинхронных задач (например, по загрузке таблиц). В таблице содержится по одной строке на каждую задачу. Для визуализации информации из этой таблицы существует утилита utils/async_loader_graph.
Пример:
Столбцы:
Ожидающая задача может находиться в одном из следующих состояний:
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)) — Не равноNULLдля готовых задач. Воркер забирает следующую задачу для выполнения из очереди готовых задач своего пула. Если есть несколько готовых задач, выбирается задача с наименьшим значениемready_seqno. -
waiters(UInt64) — Количество потоков, ожидающих эту задачу. -
exception(Nullable(String)) — Не равноNULLдля задач, завершившихся с ошибкой и отменённых задач. Содержит сообщение об ошибке, возникшей во время выполнения запроса, или об ошибке, которая привела к отмене этой задачи, а также цепочку зависимостей с именами задач, завершившихся с ошибкой.
Моменты времени в течение жизненного цикла задачи:
schedule_time(DateTime64) — Время, когда задача была создана и запланирована к выполнению (обычно вместе со всеми её зависимостями).enqueue_time(Nullable(DateTime64)) — Время, когда задача стала готовой и была помещена в очередь готовых задач своего пула.NULL, если задача ещё не готова.start_time(Nullable(DateTime64)) — Время, когда воркер извлекает задачу из очереди готовых задач и начинает её выполнение.NULL, если задача ещё не запущена.finish_time(Nullable(DateTime64)) — Время завершения выполнения задачи.NULL, если задача ещё не завершена.