ClickHouse 实战笔记 第06期:ClickHouse 常用管理命令

2022-04-25 08:54:34 浏览数 (1)

作者简介

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

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

1 会话相关的管理语句

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

1.1 获取活跃会话
代码语言:javascript复制
SELECT query_id, user, address, elapsed, query   FROM system.processes ORDER BY query_id;

或者跟 MySQL 一样,执行:

代码语言:javascript复制
SHOW PROCESSLIST;
1.2 kill 查询

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

代码语言:javascript复制
kill query where query_id='a410013e-f8f6-4ba7-a23a-48ae43535041';
1.3 获取 mutation 操作

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

代码语言:javascript复制
SELECT * FROM system.mutations;
1.4 kill mutation 操作
代码语言:javascript复制
KILL MUTATION mutation_id = 'trx_id';

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

2.1 查看表所使用的空间
代码语言:javascript复制
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;
2.2 查看库大小

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

代码语言:javascript复制
SELECT database, sum(bytes_on_disk) as db_size  FROM system.parts   GROUP BY database order by db_size desc;

3 性能相关

3.1 慢查询

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

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

代码语言:javascript复制
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
3.2 正在执行的 SQL 概要

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

代码语言:javascript复制
select * from system.metrics limit 5;
3.3 累积 SQL 概要

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

代码语言:javascript复制
select * from system.events limit 5;
3.4 正在后台运行的概要信息

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

代码语言:javascript复制
select * from system.asynchronous_metrics limit 5;

4 复制相关

检查复制是否异常:

代码语言:javascript复制
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 < total_replicas;

5 SQL 基准测试

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

代码语言:javascript复制
echo "select * from testcluster_shard_1.tc_shard_all;" |clickhouse-benchmark -i 5
代码语言:javascript复制
-i 5 表示 SQL 执行 5 次

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

专栏《ClickHouse 实战笔记》系列文章推荐

第01期:Kafka 数据同步到 ClickHouse

第02期:ClickTail CH 实现 MySQL 慢查询实时展示

第03期:使用 Grafana 展示 ClickHouse 数据

第04期:ClickHouse 高可用集群搭建

第05期:ClickHouse 环形复制集群搭建

0 人点赞