作者简介


马听,多年 DBA 实战经验,对 MySQL、 Redis、ClickHouse 等数据库有一定了解,专栏《一线数据库工程师带你深入理解 MySQL》、《Redis 运维实战》作者。

这篇文章来总结下 CH 常用的管理语句。


1 会话相关的管理语句

我们经常需要确定数据库当前正在执行的 SQL,CH 提供了一些系统表用于记录这些信息,具体用法如下:


1.1 获取活跃会话
SELECT query_id, user, address, elapsed, query   FROM system.processes ORDER BY query_id;


centos7 clickhouse启动脚本 clickhouse 命令_MySQL

或者跟 MySQL 一样,执行:


SHOW PROCESSLIST;
1.2 kill 查询

如果某条 SQL 运行的太久了,影响到实例性能了,则可以与业务确定后,进行 kill 操作:


kill query where query_id='a410013e-f8f6-4ba7-a23a-48ae43535041';
1.3 获取 mutation 操作

CH 的 update 和 delete 操作,算 DDL 操作,CH 称为 mutation,而要确定 mutation 队列,可以使用下面的 SQL:


SELECT * FROM system.mutations;
1.4 kill mutation 操作
KILL MUTATION mutation_id = 'trx_id';

2 磁盘空间相关的管理语句

2.1 查看表所使用的空间
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;


centos7 clickhouse启动脚本 clickhouse 命令_慢查询_02

2.2 查看库大小

下面的 SQL 是查看库大小并排序:


SELECT database, sum(bytes_on_disk) as db_size  FROM system.parts   GROUP BY database order by db_size desc;


centos7 clickhouse启动脚本 clickhouse 命令_MySQL_03

3 性能相关

3.1 慢查询

可以在 users.xml 配置文件中设置 log_queries = 1 来开启慢查询记录。

而需要定位到慢查询可以使用下面的 SQL:

SELECT  user, client_hostname AS host, client_name AS client,formatDateTime(query_start_time, '%T') AS started,query_duration_ms / 1000 AS sec, round(memory_usage / 1048576) AS MEM_MB, result_rows AS RES_CNT,toDecimal32(result_bytes / 1048576, 6) AS RES_MB, read_rows AS R_CNT, round(read_bytes / 1048576) AS R_MB, written_rows AS W_CNT, round(written_bytes / 1048576) AS W_MB, query FROM system.query_log WHERE type= 2 ORDER BY query_duration_ms DESC LIMIT 10


centos7 clickhouse启动脚本 clickhouse 命令_MySQL_04

3.2 正在执行的 SQL 概要

正在执行的查询总次数、正在发生的合并操作总次数


select * from system.metrics limit 5;


centos7 clickhouse启动脚本 clickhouse 命令_SQL_05

3.3 累积 SQL 概要

查看服务运行过程总的查询次数、总的 select 次数


select * from system.events limit 5;


centos7 clickhouse启动脚本 clickhouse 命令_慢查询_06

3.4 正在后台运行的概要信息

查看当前分配的内存、执行队列中的任务数量等


select * from system.asynchronous_metrics limit 5;


centos7 clickhouse启动脚本 clickhouse 命令_MySQL_07

4 复制相关

检查复制是否异常:


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  OR active_replicas


centos7 clickhouse启动脚本 clickhouse 命令_MySQL_08

5 SQL 基准测试

ClickHouse 自带基准测试工具 clickhouse-benchmark,用法如下:


echo "select * from testcluster_shard_1.tc_shard_all;" |clickhouse-benchmark -i 5
-i 5 表示 SQL 执行 5 次

会显示 QPS、RPS 及各百分位的查询执行时间,上面的举例语句执行结果如下:


centos7 clickhouse启动脚本 clickhouse 命令_MySQL_09