Перейти к основному содержимому
Перейти к основному содержимому

system.asynchronous_loader

Выполнение запросов в ClickHouse Cloud

Данные в этой системной таблице хранятся локально на каждом узле в ClickHouse Cloud. Поэтому для получения полного обзора всех данных требуется функция clusterAllReplicas. Подробности см. здесь.

Описание

Содержит информацию и статус недавних асинхронных задач (например, по загрузке таблиц). В таблице содержится по одной строке на каждую задачу. Для визуализации информации из этой таблицы существует утилита utils/async_loader_graph.

Столбцы

  • job (String) — Имя задачи (может быть неуникальным).
  • job_id (UInt64) — Уникальный идентификатор задачи.
  • dependencies (Array(UInt64)) — Список идентификаторов задач, которые должны быть выполнены до этой задачи.
  • dependencies_left (UInt64) — Текущее количество зависимостей, которые ещё нужно выполнить.
  • status (Enum8('PENDING' = 0, 'OK' = 1, 'FAILED' = 2, 'CANCELED' = 3)) — Текущий статус загрузки задачи: PENDING: задача загрузки ещё не запущена. OK: задача загрузки выполнена успешно. FAILED: задача загрузки завершилось ошибкой. CANCELED: задача загрузки не будет выполнена из-за удаления или сбоя зависимости.
  • is_executing (UInt8) — Задача в данный момент выполняется рабочим потоком.
  • is_blocked (UInt8) — Задача ожидает завершения своих зависимостей.
  • is_ready (UInt8) — Задача готова к выполнению и ожидает назначения рабочему потоку.
  • elapsed (Float64) — Количество секунд, прошедших с начала выполнения. Ноль, если задача ещё не запущена. Общее время выполнения, если задача завершена.
  • pool_id (UInt64) — Идентификатор пула, назначенного задаче в данный момент.
  • pool (String) — Имя пула pool_id.
  • priority (Int64) — Приоритет пула pool_id.
  • execution_pool_id (UInt64) — Идентификатор пула, в котором выполняется задача. До начала выполнения совпадает с изначально назначенным пулом.
  • 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 для задач со статусом failed и canceled. Содержит сообщение об ошибке, возникшей при выполнении запроса, или об ошибке, приведшей к отмене этой задачи, вместе с цепочкой сбоев зависимостей по именам задач.
  • schedule_time (DateTime64(6)) — Время, когда задача была создана и запланирована к выполнению (обычно вместе со всеми её зависимостями).
  • enqueue_time (Nullable(DateTime64(6))) — Время, когда задача стала готова и была помещена в очередь готовых задач своего пула. Null, если задача ещё не готова.
  • start_time (Nullable(DateTime64(6))) — Время, когда рабочий поток извлекает задачу из очереди готовых задач и начинает её выполнение. Null, если задача ещё не запущена.
  • finish_time (Nullable(DateTime64(6))) — Время завершения выполнения задачи. Null, если задача ещё не завершена.

Ожидающая задача может находиться в одном из следующих состояний:

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

Пример

SELECT *
FROM system.asynchronous_loader
LIMIT 1
FORMAT Vertical