高级DBA教你clickhouse数据库查询正在执行的SQL语句的汇总方法全网最详细_clickhouse 代码中实现 查询进度

278 阅读5分钟

img img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

SELECT query FROM system.query_log where current_database ='数据库名称' ORDER BY event_time DESC LIMIT 100


![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/d1f58414f59047efaaab750303f296c0~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1775549817&x-signature=g3X5%2BNCHjapBeLwxVqU04eOuvRk%3D)  
 `system.query_log`表中的字段含义可能会因 ClickHouse 的版本和配置而有所不同。以下是一些常见字段及其可能的含义:


* `query`:执行的查询 SQL 语句。
* `event_time`:查询执行的时间戳。
* `user`:执行查询的用户。
* `query_id`:查询的唯一标识符。
* `elapsed`:查询执行的耗时(以毫秒为单位)。
* `result_rows`:查询返回的结果行数。
* `read_rows`:查询从表中读取的行数。
* `written_rows`:查询写入到表中的行数。
* `memory_usage`:查询执行期间使用的内存量。
* `query_type`:查询的类型,例如 SELECT、INSERT、UPDATE 等。
* `database`:查询所属的数据库。
* `table`:查询涉及的表。


这些字段的具体含义和名称可能会有所变化,取决于你的 ClickHouse 安装和配置。你可以查阅 ClickHouse 的官方文档或系统表的定义来获取更准确的信息。


通过分析`system.query_log`表中的这些字段,你可以了解查询的执行情况、性能指标以及用户活动等信息,有助于监控和优化数据库的使用。


### 二、clickhouse数据库查询正在执行的SQL语句的方法


***当前正在执行的SQL:***


要查询 ClickHouse 中正在执行的 SQL 语句,可以使用`system.processes`系统表。该表记录了所有正在运行的查询相关信息,包括查询 ID、用户、IP 地址、执行时间、查询语句等。以下为查询正在执行的 SQL 语句的示例代码:



SELECT query_id,read_rows,total_rows_approx,memory_usage,initial_user, initial_address,elapsed,query FROM system.processes;


其中,字段含义如下:


* `query_id`:查询 ID。
* `read_rows`:从表中读取的行数。
* `total_rows_approx`:应读取的行总数的近似值。
* `memory_usage`:请求使用的内存量。
* `initial_user`:进行查询的用户。
* `initial_address`:请求的 IP 地址。
* `elapsed`:查询执行开始以来的秒数。
* `query`:查询语句。


请注意,这只是一个基本示例,具体的查询可能会根据你的 ClickHouse 安装和配置而有所不同。你可以查阅 ClickHouse 的官方文档或系统表的定义来获取更准确的信息。


### 三、杀掉当前执行的SQL语句按查询唯一键


在 ClickHouse 中要杀掉当前执行的 SQL 语句,可以使用以下步骤:


1. 执行以下 SQL 语句,查看正在执行的 SQL 语句的 `query_id`

SELECT query_id FROM system.processes;

2. 执行 `KILL QUERY` 命令,根据 `query_id` 杀掉对应的 SQL 语句,语法如下:

KILL QUERY WHERE query_id = 'your_query_id';

 其中,`your_query_id` 是你要杀掉的 SQL 语句的 `query_id`。


请注意,ClickHouse 中的 `query_id` 会在查询执行完成后释放,因此在杀掉 SQL 语句后,对应的 `query_id` 可能会被其他查询使用。


### 四、查询某个表占用的硬盘空间


要查询 ClickHouse 中每个表占用的硬盘大小,可以使用以下 SQL 语句:



SELECT database, table, formatReadableSize(sum(data_compressed_bytes) AS size) AS compressed, formatReadableSize(sum(data_uncompressed_bytes) AS usize) AS uncompressed, round(usize / size, 2) AS compr_rate, sum(rows) AS rows, count() AS part_count FROM system.parts WHERE (active = 1) AND (database LIKE '数据库名称%') AND (table LIKE '表名称%') GROUP BY database, table ORDER BY size DESC;


该查询语句使用 `system.parts` 系统表,通过 `WHERE` 子句筛选出活动状态为 `1`,并且数据库和表名匹配任意字符的记录。接着,使用 `GROUP BY` 子句按数据库和表名进行分组,然后使用聚合函数 `sum` 计算每个分组中数据压缩后的字节数 `data_compressed_bytes` 和未压缩的字节数 `data_uncompressed_bytes`。最后,使用 `formatReadableSize` 函数将字节数转换为易读的大小表示,并计算压缩率 `compr_rate`。结果将按照表大小降序排序。


请注意,这只是一个基本示例,具体的查询可能会根据你的 ClickHouse 安装和配置而有所不同。你可以查阅 ClickHouse 的官方文档或系统表的定义来获取更准确的信息。


![在这里插入图片描述](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/119f2c93db354e4eb129b0ea46eef809~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1775549817&x-signature=5fGKICrrgXLCLjVGstsSl3CYlIo%3D)


### 五、查询某更新删除SQL语句是否执行成功


ClickHouse 中更新数据的语句是异步执行的,应用并不知道 ClickHouse 何时能更新数据,如果要做到强一致性,需要应用反查确认。可以通过下面的语句查询具体删除或更新操作的执行情况:



![img](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/9ec38868ad6f48a9a7bcc6bf4bb968eb~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1775549817&x-signature=a7yxOwuB5ZmZUqEogQtTVlZUp%2FI%3D)
![img](https://p9-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/4bf76c5650de4582ae80e0dc503e9579~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg55So5oi3MzM5MTQ5MjgwNjA=:q75.awebp?rk3s=f64ab15b&x-expires=1775549817&x-signature=MJ2nYgfJ7FA9zBJu%2Bmz9GDTn1oo%3D)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://gitee.com/vip204888)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**