clickhouse 检查是否有删除语句在执行
clickhouse 检查是否有删除语句在执行
在 ClickHouse 中检查是否有 DELETE
(或 ALTER TABLE ... DELETE
)语句正在执行,可以通过以下几种方式实现:
✅ 方法 1:通过 system.mutations 表查看
ClickHouse 的删除操作本质上是一个 mutation(数据变更任务),可以在 system.mutations
系统表中查看执行状态。
SELECTdatabase,table,mutation_id,command,create_time,is_done,parts_to_do,parts_to_do_names
FROM system.mutations
WHERE command LIKE '%DELETE%'
ORDER BY create_time DESC;
解释:
command
:变更命令内容,比如DELETE WHERE id = 123
is_done
:是否完成(0 表示还在执行)parts_to_do
:还剩多少数据分区未处理create_time
:任务创建时间
如果你看到
is_done = 0
的记录,就说明删除任务仍在执行中。
✅ 方法 2:查看当前后台任务
ClickHouse 也会在 system.processes
中记录正在运行的查询,包括后台 mutation 任务。
SELECTquery_id,query,elapsed,read_rows,memory_usage
FROM system.processes
WHERE query LIKE '%DELETE%';
但注意:mutation 通常不会显示在这里(因为它们由后台线程执行),更可靠的还是查
system.mutations
。
✅ 方法 3:查看是否卡住或失败的删除任务
有时 mutation 会失败或卡住,可以检查:
SELECTdatabase,table,mutation_id,command,latest_failed_part,latest_fail_reason
FROM system.mutations
WHERE latest_fail_reason != '';
这能帮助排查 DELETE
为什么长时间没完成。
✅ 方法 4:强制取消卡住的 mutation
如果确认某个删除任务卡住,可以强制杀掉:
KILL MUTATION WHERE mutation_id = '0000000000';
⚠️ 注意:这会终止 mutation,可能导致部分数据未删除,需要重新执行一次
DELETE
。