clickhouse 检查是否有删除语句在执行

clickhouse 检查是否有删除语句在执行

在 ClickHouse 中检查是否有 DELETE (或 ALTER TABLE ... DELETE)语句正在执行,可以通过以下几种方式实现:


✅ 方法 1:通过 system.mutations 表查看

ClickHouse 的删除操作本质上是一个 mutation(数据变更任务) ,可以在 system.mutations 系统表中查看执行状态。

sql 复制代码
SELECT
    database,
    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 任务。

sql 复制代码
SELECT
    query_id,
    query,
    elapsed,
    read_rows,
    memory_usage
FROM system.processes
WHERE query LIKE '%DELETE%';

但注意:mutation 通常不会显示在这里(因为它们由后台线程执行),更可靠的还是查 system.mutations。


✅ 方法 3:查看是否卡住或失败的删除任务

有时 mutation 会失败或卡住,可以检查:

sql 复制代码
SELECT
    database,
    table,
    mutation_id,
    command,
    latest_failed_part,
    latest_fail_reason
FROM system.mutations
WHERE latest_fail_reason != '';

这能帮助排查 DELETE 为什么长时间没完成。


✅ 方法 4:强制取消卡住的 mutation

如果确认某个删除任务卡住,可以强制杀掉:

sql 复制代码
KILL MUTATION WHERE mutation_id = '0000000000';

⚠️ 注意:这会终止 mutation,可能导致部分数据未删除,需要重新执行一次 DELETE。

相关推荐
数据库小学妹5 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo5 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人6 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
美狐美颜SDK开放平台8 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
花间相见9 小时前
【计算基础|MySQL01】【上手】安装连接、数据类型与建库建表
数据库·后端
花间相见9 小时前
【计算基础|MySQL02】【上手】SQL 增删改查
数据库·后端
ITxiaobing20239 小时前
IP 库与 AppsFlyer 国家/地区数据不一致,如何系统地对账?
数据库·网络协议·tcp/ip
这个DBA有点耶10 小时前
从时间到语义:时序数据库与向量数据库的核心机制、选型与多模融合趋势
数据库·mysql·架构
对空六课10 小时前
RFM分层边界变化的回溯计算
大数据·服务器·前端·数据库·人工智能·算法·数据分析
小羊没烦恼!10 小时前
如何在IIS6,7中部署ASP.NET网站?
数据库·后端·python·web安全·asp.net