Clickhouse诊断工具之chdig

1 背景介绍

1.1 项目基本信息

项目地址:https://github.com/azat/chdig

这个项目主体开发语言为rust:

1.2 项目开发动机

总结来说:chdig 的诞生源于 "Clickhouse内核诊断需要掌握大量的系统表,但是往往我们记不住" 这一实际痛点,旨在通过 交互式 TUI 将 ClickHouse 的复杂的,通过大量学习才能掌握的技能封装为易用的调试界面。

作者最初也做了一个关于Clickhouse性能排查的PPT:Know Your ClickHouse(这里面还是有很多干货的)。

2 安装部署

项目的README文件中,给了3种安装方式:

1.预发布包安装(这意味着你可以使用yum, apt等包管理工具来安装)

2.二进制包

3.源码安装

这里我采用第一种方式。

(1)复制deb包地址

https://github.com/azat/chdig/releases/download/latest/chdig-latest_amd64.deb

(2)使用wget下载包

wget https://github.com/azat/chdig/releases/download/latest/chdig-latest_amd64.deb

(3)使用apt安装

apt install ./chdig-latest_amd64.deb

注意点:apt install 默认是从系统配置的软件源(如 Ubuntu 官方仓库)搜索并安装软件 ,而不是直接安装本地的 .deb 文件,必须加上 ./ 或完整路径,否则 apt 会误以为你要从仓库安装。

安装好后,可以使用chdig --help看一下它的基本使用:

3 测试+使用

这个文档记录了一些基本的问题和chdig的操作:https://github.com/azat/chdig/blob/main/Documentation/FAQ.md

3.1 基本使用

可以看到默认情况下chdig 连接localhost 9000的ck。

这里我们可以通过--host 和 --port指定ck的ip和端口:

连接上之后的界面为:

官网给出的demo:

chdig v0.5.0 - asciinema.org

测试所使用的语句

底表为:

CREATE TABLE agg_table

(

date Date,

user_id UInt64,

uniq1 AggregateFunction(uniqTheta, UInt64),

uniq2 AggregateFunction(uniqTheta, UInt64),

uniq3 AggregateFunction(uniqTheta, UInt64),

uniq4 AggregateFunction(uniqTheta, UInt64),

uniq5 AggregateFunction(uniqTheta, UInt64),

uniq6 AggregateFunction(uniqTheta, UInt64),

uniq7 AggregateFunction(uniqTheta, UInt64),

uniq8 AggregateFunction(uniqTheta, UInt64),

uniq9 AggregateFunction(uniqTheta, UInt64),

uniq10 AggregateFunction(uniqTheta, UInt64)

)

ENGINE = AggregatingMergeTree()

PARTITION BY toYYYYMM(date)

ORDER BY (date, user_id);

Buffer表(刷新参数调大一点,不让满足刷新条件):

CREATE TABLE buffer_table AS agg_table

ENGINE = Buffer(

default,

agg_table,

16,

3600,

36000,

1000000,

10000000,

7000000000,

10000000000

);

插入数据(插入后buffer表有40W数据):

INSERT INTO buffer_table

SELECT

toDate('2023-01-01') + (rand() % 30) AS date,

number AS user_id,

uniqThetaState(toUInt64(rand() % 1000)) AS uniq1,

uniqThetaState(toUInt64(rand() % 2000)) AS uniq2,

uniqThetaState(toUInt64(rand() % 3000)) AS uniq3,

uniqThetaState(toUInt64(rand() % 4000)) AS uniq4,

uniqThetaState(toUInt64(rand() % 5000)) AS uniq5,

uniqThetaState(toUInt64(rand() % 6000)) AS uniq6,

uniqThetaState(toUInt64(rand() % 7000)) AS uniq7,

uniqThetaState(toUInt64(rand() % 8000)) AS uniq8,

uniqThetaState(toUInt64(rand() % 9000)) AS uniq9,

uniqThetaState(toUInt64(rand() % 10000)) AS uniq10

FROM numbers(400000) group by date,user_id;

写数据的时候已经可以看到这条insert语句的资源消耗情况:

查询40W的SQL:

-- 完整查询buffer_table中的所有聚合数据

SELECT

date,

user_id,

uniqThetaMerge(uniq1) AS unique_count1,

uniqThetaMerge(uniq2) AS unique_count2,

uniqThetaMerge(uniq3) AS unique_count3,

uniqThetaMerge(uniq4) AS unique_count4,

uniqThetaMerge(uniq5) AS unique_count5,

uniqThetaMerge(uniq6) AS unique_count6,

uniqThetaMerge(uniq7) AS unique_count7,

uniqThetaMerge(uniq8) AS unique_count8,

uniqThetaMerge(uniq9) AS unique_count9,

uniqThetaMerge(uniq10) AS unique_count10

FROM buffer_table

GROUP BY date, user_id

ORDER BY date, user_id

3.2 火焰图功能测试

首先选择你要执行下列行为的Query,按F8打开动作列表,之后选择你要执行的动作。

这里我们选择查看实时火焰图:

此时我们执行的是Insert语句:

内存消耗点火焰图:

结果:

4 总结

本文初步介绍了chdig的开发动机,安装部署以及基本功能的使用。

这个工具功能还是很强大的(主要是实时性的诊断),后续可以基于这个功能做一些前端的可视化的东西。

最后这个链接是这个项目的一些TODO:https://github.com/azat/chdig/blob/main/TODO.md

https://github.com/azat/chdig/blob/main/TODO.md

相关推荐
Flynn Liang1 天前
Apache Superset 重要特性详解(三):语义层 / 权限 / 缓存 / 嵌入的实战最佳实践(2026 版)
大数据·clickhouse·数据可视化·架构设计·superset·数据分析平台
陈年老古董9 天前
ClickHouse 单机搭建记录
hive·笔记·学习·clickhouse·硬件架构
pjj1985413 天前
ClickHouse 与 Doris 数据库技术梳理:看懂分析型数据库
数据库·clickhouse
SelectDB技术团队13 天前
ClickHouse 支持存算分离吗?Doris 社区版原生存算分离怎么落地
数据库·clickhouse·云原生·开源·apache doris·技术选型·存算分层
SelectDB技术团队14 天前
ClickHouse SQL 好学吗?从 MySQL 迁移 Doris 的完整兼容验证
人工智能·sql·mysql·clickhouse·开源·apache doris·增量计算
喵了几个咪15 天前
GoWind UBA 拆解:把 Doris UNIQUE KEY 翻译成 ClickHouse——读数正确性对齐实录
开发语言·后端·clickhouse·微服务·golang·gowind
爱吃火鸡面呀15 天前
MySQL、ClickHouse、Doris、Hive、Spark SQL、Flink SQL 选型对比:优点、缺点与面试话术
hive·mysql·clickhouse
SelectDB技术团队18 天前
SelectDB 架构演进与 ClickHouse 迁移指南
大数据·数据库·clickhouse·云原生·架构·数据分析·apache doris
ClickHouseDB19 天前
使用 ClickHouse 与 Massive 构建实时市场数据应用
clickhouse
秉寒-CHO19 天前
从 ClickHouse 到 StarRocks:我在真实业务中怎么选明细、聚合、主键模型
大数据·clickhouse