跳转到主内容
跳转到主内容

system.mutations

描述

该表包含 MutationMergeTree 表上的执行信息及其进度。每条 mutation 命令对应一行记录。

列:

  • database (String) — 应用了该 mutation 的数据库名称。
  • table (String) — 应用了该 mutation 的表名称。
  • mutation_id (String) — mutation 的 ID。对于复制表,这些 ID 对应于 ClickHouse Keeper 中 <table_path_in_clickhouse_keeper>/mutations/ 目录下的 znode 名称。对于非复制表,这些 ID 对应于表数据目录中的文件名。
  • command (String) — mutation 命令字符串 (即 ALTER TABLE [db.]table 之后的查询部分) 。
  • create_time (DateTime) — 提交 mutation 命令执行的日期和时间。
  • block_numbers.partition_id (Array(String)) — 对于复制表的 mutation,该数组包含各分区的 ID (每个分区一条记录) 。对于非复制表的 mutation,该数组为空。
  • block_numbers.number (Array(Int64)) — 对于复制表的 mutation,该数组对每个分区包含一条记录,其中记录了该 mutation 获取的块号。只有包含块号小于该编号的块的数据分区片段,才会在该分区中执行 mutation。对于非复制表,所有分区中的块号构成一个统一序列。这意味着对于非复制表的 mutation,该列将包含一条记录,其中带有该 mutation 获取的单个块号。
  • parts_in_progress_names (Array(String)) — 当前正在执行 mutation 的数据分区片段名称数组。
  • parts_to_do_names (Array(String)) — 为完成该 mutation 而仍需执行 mutation 的数据分区片段名称数组。
  • parts_to_do (Int64) — 为完成该 mutation 而仍需执行 mutation 的数据分区片段数量。注意:即使 parts_to_do = 0,复制表的 mutation 也可能仍未完成,因为可能存在一个长时间运行的 INSERT,正在创建一个之后也需要执行 mutation 的新数据分区片段。
  • parts_postpone_reasons (Map(String, String)) — 从 part 名称到其被延后原因的映射。
  • is_done (UInt8) — 标记该 mutation 是否已完成。可能的值:mutation 已完成时为 1,mutation 仍在进行中时为 0。
  • is_killed (UInt8) — 表示 mutation 是否已被终止。仅在 ClickHouse Cloud 中可用。注意:is_killed=1 并不一定表示该 mutation 已完全结束。mutation 可能会在较长时间内保持 is_killed=1 且 is_done=0 的状态。如果另一个长时间运行的 mutation 阻塞了这个已终止的 mutation,就可能发生这种情况。这是正常现象。
  • latest_failed_part (String) — 最近一个无法执行 mutation 的 part 名称。
  • latest_fail_time (DateTime) — 最近一次 part 执行 mutation 失败的日期和时间。
  • latest_fail_reason (String) — 导致最近一次 part 执行 mutation 失败的异常消息。
  • latest_fail_error_code_name (String) — 导致最近一次 part 执行 mutation 失败的异常错误代码名称。
注意
  • 如果某个 part 名称不在 parts_postpone_reasons 中,且尚未发生 mutation,则表示该 part 还未被调度执行 mutation。

  • part 名称 all_parts 表示所有尚未发生 mutation 的 parts。

  • is_killed (UInt8) — 表示某个 mutation 是否已被终止。仅在 ClickHouse Cloud 中可用。
注意

is_killed=1 并不一定意味着该 mutation 已完全结束。mutation 可能会长时间处于 is_killed=1is_done=0 的状态。如果有另一个长时间运行的 mutation 阻塞了这个已被终止的 mutation,就可能出现这种情况。这是正常现象。

  • is_done (UInt8) — 指示mutation是否完成的标志。可能的值:
    • 1 表示mutation已完成,
    • 0 表示mutation仍在进行中。
注意

即使 parts_to_do = 0,复制表的mutation也可能尚未完成,因为长时间运行的 INSERT 查询会创建需要mutation的新数据分区片段。

如果在mutation某些数据分区片段时出现问题,以下列包含附加信息:

  • latest_failed_part (String) — 无法mutation的最新数据分区片段的名称。
  • latest_fail_time (DateTime) — 最近一次数据分区片段mutation失败的日期和时间。
  • latest_fail_reason (String) — 导致最近一次数据分区片段mutation失败的异常消息。

监控 Mutation

要跟踪 system.mutations 表中的进度,请使用以下查询:

SELECT * FROM clusterAllReplicas('cluster_name', 'system', 'mutations')
WHERE is_done = 0 AND table = 'tmp';

-- or

SELECT * FROM clusterAllReplicas('cluster_name', 'system.mutations')
WHERE is_done = 0 AND table = 'tmp';

注意:这需要对 system.* 表具有读取权限。

Cloud 使用说明

在 ClickHouse Cloud 中,每个节点上的 system.mutations 表都包含集群中的所有 mutation,因此无需使用 clusterAllReplicas

另请参阅