作为一款高性能列式存储数据库,ClickHouse在日常运维中离不开各类管理语句的支撑。本文将从会话管理、磁盘空间监控、性能排查、复制异常检测四个核心场景出发,整理ClickHouse常用管理语句,帮助运维与开发人员高效完成日常管理工作。
1. 会话相关管理语句
会话管理是保障ClickHouse实例稳定运行的基础,主要用于查看活跃查询、终止异常SQL及监控数据变更操作。
1.1 获取活跃会话
通过该语句可查看当前实例中所有正在执行的会话,包含查询ID、执行用户、客户端地址、执行时长等关键信息,功能类似MySQL的show processlist;。
plsql
select query_id, user, address, elapsed, query from system.processes order by query_id;

1.2 终止异常查询(kill查询)
当某条SQL执行耗时过长、占用资源过高并影响实例性能时,可与业务方确认后,通过查询ID终止该操作。
plsql
kill query where query_id='a410013e-f8f6-4ba7-a23a-48ae43535041';
注:query_id需替换为实际要终止的查询ID,可通过"获取活跃会话"语句查询获得。

1.3 mutation操作管理
ClickHouse中没有传统的update和delete,这类数据变更操作被称为mutation(属于DDL操作)。通过该语句可查看mutation队列状态,判断数据变更是否完成。
plsql
SELECT * FROM system.mutations;
关键字段说明:
is_done:突变操作完成标志,1表示已完成,0表示正在执行中。

2. 磁盘空间相关管理语句
磁盘空间监控可帮助及时清理冗余数据,避免因空间不足导致实例异常,主要包含表级和库级空间查询。
2.1 查看表所使用的空间
该语句可按数据库、表、分区维度,查看每个数据分片的磁盘占用情况,便于定位大表或大分区。
plsql
select database, table, partition, name part_name, active, bytes_on_disk
from system.parts
where database not in 'system'
order by database, table, partition, name;

关键字段说明:
bytes_on_disk:该分片在磁盘上的实际占用大小;active:分片是否处于活跃状态(非活跃分片可后续清理)。
2.2 查看数据库大小
按数据库维度统计总磁盘占用,快速定位占用空间最大的数据库,优先进行空间优化。
plsql
select database, sum(bytes_on_disk) as db_size
from system.parts
group by database
order by db_size desc;

3. 性能相关管理语句
性能排查是日常运维的核心场景,通过以下语句可定位慢查询、统计SQL执行情况及监控后台资源使用。
3.1 查找慢查询
可筛选出最近执行完成的最慢10条SQL,按执行开始时间倒序排列,帮助分析性能瓶颈。
plsql
SELECT * FROM system.query_log
WHERE type = 'QueryFinish'
ORDER BY query_start_time DESC
LIMIT 10 FORMAT Vertical;
注:FORMAT Vertical表示按垂直格式输出,便于查看长SQL语句详情。

3.2 SQL执行统计
分为"实时执行统计"和"累积执行统计"两类,满足不同监控需求:
-
实时执行统计(system.metrics):查看当前实例的实时状态,如正在执行的查询次数、合并操作次数等。
plsqlselect * from system.metrics limit 5;
-
累积执行统计(system.events) :查看实例运行以来的累积指标,如总查询次数、总
select语句执行次数等。plsqlselect * from system.events limit 5;
3.3 后台运行概要信息
查看实例当前的内存分配、执行队列任务数量等后台资源使用情况,及时发现资源过载风险。
plsql
select * from system.asynchronous_metrics limit 5;

4. 其他核心管理语句
除上述场景外,复制异常检测和SQL基准测试也是常用运维操作,保障ClickHouse集群稳定性与性能验证。
4.1 检查复制异常
针对ClickHouse副本集群,该语句可筛选出存在复制异常的表,如只读副本、队列任务过多、副本数量不足等情况。
plsql
SELECT database, table, is_leader, total_replicas, active_replicas
FROM system.replicas
WHERE is_readonly -- 副本只读
OR is_session_expired -- 会话过期
OR future_parts > 20 -- 未来分片数过多
OR parts_to_check > 10 -- 待检查分片数过多
OR queue_size > 20 -- 队列大小超限
OR inserts_in_queue > 10 -- 插入队列超限
OR log_max_index - log_pointer > 10 -- 日志同步滞后
OR total_replicas < 2 -- 总副本数不足2个
OR active_replicas < total_replicas; -- 活跃副本数少于总副本数

4.2 SQL基准测试
ClickHouse自带clickhouse-benchmark工具,可对SQL语句进行性能测试,输出QPS、RPS及各百分位执行时间。
bash
echo "select * from martin.t3;" | clickhouse-benchmark -i 5
参数说明:
-i 5:表示该SQL语句执行5次,可根据需求调整执行次数;- 测试结果包含"RPS""95%查询耗时""QPS"等关键指标,用于性能对比或优化验证。

更多工具用法可参考官方文档:https://clickhouse.com/docs/en/operations/utilities/clickhouse-benchmark
总结
本文整理的ClickHouse管理语句覆盖了会话、磁盘、性能、复制四大核心运维场景,可直接应用于日常实例监控、问题排查与性能优化。实际使用时,可根据具体需求调整SQL筛选条件(如增加时间范围、指定数据库),也可结合可视化工具将关键指标集成到监控面板,提升运维效率。