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

system.asynchronous_loader

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

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

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

Пример:

SELECT *
FROM system.asynchronous_loader
LIMIT 1
FORMAT Vertical

Столбцы:

  • 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 для завершившихся с ошибкой и отменённых заданий. Содержит сообщение об ошибке, возникшей при выполнении запроса, или ошибку, приведшую к отмене этого задания, а также цепочку зависимостей с именами заданий.
  • 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, если задача ещё не завершена.