跳到主要内容
跳到主要内容
编辑此页

asynchronous_loader

在 ClickHouse Cloud 中查询

此系统表中的数据本地保存在 ClickHouse Cloud 的每个节点上。因此,要获得所有数据的完整视图,需要使用 clusterAllReplicas 函数。有关更多详细信息,请参阅此处

包含最近异步作业(例如,用于表加载)的信息和状态。该表包含每个作业的一行。有一个工具用于可视化来自此表的信息 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)) - 作业准备就绪并排队到其池的就绪队列中的时间。如果作业尚未准备就绪,则为空。
  • start_time (Nullable(DateTime64)) - Worker 从就绪队列中取消作业并开始执行的时间。如果作业尚未启动,则为空。
  • finish_time (Nullable(DateTime64)) - 作业执行完成的时间。如果作业尚未完成,则为空。