跳到主要内容
跳到主要内容

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) — 任务的唯一 ID。
  • dependencies (Array(UInt64)) — 在此任务之前必须完成的任务 ID 列表。
  • dependencies_left (UInt64) — 当前尚未完成的依赖数量。
  • status (Enum8('PENDING' = 0, 'OK' = 1, 'FAILED' = 2, 'CANCELED' = 3)) — 任务当前的加载状态:PENDING:加载任务尚未开始。OK:加载任务已执行并成功完成。FAILED:加载任务已执行但失败。CANCELED:由于任务被移除或其依赖失败而不会被执行。
  • is_executing (UInt8) — 该任务当前正由某个 worker 执行。
  • is_blocked (UInt8) — 该任务正在等待其依赖完成。
  • is_ready (UInt8) — 该任务已准备好执行并正在等待 worker。
  • elapsed (Float64) — 自开始执行以来经过的秒数。如果任务尚未开始则为零;如果任务已结束则为总执行时间。
  • pool_id (UInt64) — 当前分配给该任务的 pool 的 ID。
  • pool (String) — pool_id 对应的 pool 名称。
  • priority (Int64) — pool_id 对应的 pool 优先级。
  • execution_pool_id (UInt64) — 实际执行该任务的 pool 的 ID。在执行开始之前等于最初分配的 pool。
  • execution_pool (String) — execution_pool_id 对应的 pool 名称。
  • execution_priority (Int64) — execution_pool_id 对应的 pool 优先级。
  • ready_seqno (Nullable(UInt64)) — 对于就绪任务为非空。worker 会从其 pool 的就绪队列中拉取下一个待执行任务。如果有多个就绪任务,则选择 ready_seqno 值最小的任务。
  • waiters (UInt64) — 等待该任务的线程数。
  • exception (Nullable(String)) — 对于失败和被取消的任务为非空。保存查询执行期间抛出的错误消息,或者导致该任务被取消的错误消息,以及依赖失败的任务名称链。
  • schedule_time (DateTime64(6)) — 任务被创建并计划执行的时间(通常包括其所有依赖)。
  • enqueue_time (Nullable(DateTime64(6))) — 任务变为就绪并被入队到其 pool 的就绪队列中的时间。如果任务尚未就绪则为 NULL。
  • start_time (Nullable(DateTime64(6))) — worker 从就绪队列中将任务出队并开始执行的时间。如果任务尚未开始则为 NULL。
  • finish_time (Nullable(DateTime64(6))) — 任务执行完成的时间。如果任务尚未结束则为 NULL。

挂起的作业可能处于以下任一状态:

  • is_executing (UInt8) - 该作业当前正由某个 worker 执行。
  • is_blocked (UInt8) - 该作业正在等待其依赖完成。
  • is_ready (UInt8) - 该作业已准备好执行,正在等待 worker。
  • elapsed (Float64) - 自开始执行以来经过的秒数。如果作业尚未开始,则为 0;如果作业已完成,则为总执行时间。

每个作业都有一个关联的池,并在该池中启动。每个池都有固定的优先级以及可变的最大 worker 数量。优先级更高(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)) - 对于就绪作业为非空。worker 会从其池的就绪队列中拉取下一个要执行的作业。如果有多个就绪作业,则选择 ready_seqno 值最小的作业。

  • waiters (UInt64) - 正在等待该作业的线程数量。

  • exception (Nullable(String)) - 对于失败和被取消的作业为非空。包含在查询执行期间抛出的错误消息,或导致取消该作业的错误,以及因依赖失败而形成的作业名称链。

作业生命周期中的时间点:

  • schedule_time (DateTime64) - 作业被创建并被调度执行的时间(通常包括其所有依赖)。
  • enqueue_time (Nullable(DateTime64)) - 作业变为就绪并被加入其池的就绪队列的时间。如果作业尚未就绪,则为 Null。
  • start_time (Nullable(DateTime64)) - worker 从就绪队列中取出作业并开始执行的时间。如果作业尚未开始,则为 Null。
  • finish_time (Nullable(DateTime64)) - 作业执行结束的时间。如果作业尚未完成,则为 Null。