system.asynchronous_loader
该系统表中的数据保存在 ClickHouse Cloud 中每个节点的本地。因此,如需获得所有数据的完整视图,需要使用 clusterAllReplicas 函数。更多详情请参阅此处。
描述
包含近期异步作业的信息和状态 (例如表加载作业) 。该表中每个作业对应一行记录。可以使用工具 utils/async_loader_graph 对该表中的信息进行可视化。
列
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) — 该作业当前正在由工作线程执行。is_blocked(UInt8) — 该作业正在等待其依赖完成。is_ready(UInt8) — 该作业已可执行,正在等待工作线程。elapsed(Float64) — 自开始执行以来经过的秒数。若作业尚未开始,则为 0。若作业已完成,则为总执行时间。pool_id(UInt64) — 当前分配给该作业的池 ID。pool(String) —pool_id对应池的名称。priority(Int64) —pool_id对应池的优先级。execution_pool_id(UInt64) — 执行该作业所在池的 ID。在执行开始前,它等于最初分配的池 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(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) - 自开始执行以来经过的秒数。如果作业尚未开始,则为 0;如果作业已完成,则为总执行时间。
每个作业都有一个与之关联的池,并在该池中启动。每个池都有一个固定的优先级,以及一个可变的最大 工作线程 数量。优先级越高 (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。