asynchronous_loader
包含有关最近异步作业的信息和状态(例如,用于加载表)。该表包含每个作业的一行。有一个工具可以可视化来自该表的的信息 utils/async_loader_graph
。
示例
SELECT *
FROM system.asynchronous_loader
FORMAT Vertical
LIMIT 1
列
job
(String
) - 作业名称(可能不唯一)。job_id
(UInt64
) - 作业的唯一 ID。dependencies
(Array(UInt64)
) - 应该在此作业之前完成的作业 ID 列表。dependencies_left
(UInt64
) - 当前剩余的依赖项数量。status
(Enum
) - 作业的当前加载状态:PENDING
: 加载作业尚未开始。OK
: 加载作业已执行并成功。FAILED
: 加载作业已执行并失败。CANCELED
: 由于删除或依赖项失败,加载作业将不会执行。
待处理的作业可能处于以下状态之一
is_executing
(UInt8
) - 作业当前正在由一个 worker 执行。is_blocked
(UInt8
) - 作业正在等待其依赖项完成。is_ready
(UInt8
) - 作业已准备好执行,并正在等待一个 worker。elapsed
(Float64
) - 自执行开始以来的秒数。如果作业未开始,则为零。如果作业已完成,则为总执行时间。
每个作业都与一个池关联,并在该池中启动。每个池都有一个恒定的优先级和一个可变的最大 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。