跳至主要内容

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。