【数据库维护】Clickhouse数据库维护关键系统表相关指标说明,支撑定位慢SQL及多实例场景下分析各实例运行情况
背景
当前使用环境上以Docker容器化部署Clickhouse服务8个实例,但在实际运行过程中,发现8个实例内存负载不均衡,ck-0实例在固定时间段内存会直线上升,直至服务报错memory exceeded max memory limit。
为排查ck-0节点内存直线上升阶段,对应实例执行任务情况等,梳理clickhouse系统库相关表关键指标说明。
system系统库关键表说明
注意点:system系统库各表数据分别存储在各实例上,各实例情况统计须查询各实例具体情况。
即:节点一的运行指标/merge进程/insert进程/查询进程等,须登录实例一查看。
system.metrics表
记录当前实例运行过程各项关键指标数据,可以支撑分析问题发生情况下各指标趋势。
表字段说明
字段名称 | 字段说明 |
---|---|
metric | 指标名称 |
value | 指标值 |
description | 指标说明 |
name | 指标别名 |
关键指标说明
指标名称 | 指标说明 |
---|---|
Query | 正在执行的查询数量 |
Merge | 正在执行的merge数量 |
TCPConnection | TCP连接数量 |
HTTPConnection | HTTP连接数量 |
PartsActive | 活跃的数据分块,小而多的数据库会对性能有影响 |
AddressesActive | 正在连接的客户端IP地址数量 |
查询方式
查询所有可用指标
select * from system.metrics;
查询特定指标的值
如查询所有Connection相关的指标
select metric,value from system.metrics where metric like '%Connection%';
system.processes表
记录当前实例正在运行的查询/插入等操作,与show processlist 命令查询结果一致。
表关键字段说明
字段名称 | 字段说明 |
---|---|
user | 执行本次操作的数据库用户 |
address | 执行本次操作的客户端IP地址,IPV6格式,K8S场景下为实例IP |
elapsed | 操作耗时,秒 |
read_rows | 读取行数 |
read_bytes | 读取字节数 |
written_rows | 读取行数 |
written_bytes | 读取字节数 |
memory_usage | 内存使用情况,字节 |
query | 执行的具体脚本,insert脚本不包含数据部分 |
is_cancelled | 是否取消查询 |
is_all_data_sent | 所有数据是否已发送给客户端,可用于判断服务端查询是否已完成 |
查询方式
关注当前实例正在运行的查询个数,可通过count计数
select count(*) from system.processes;
关注当前实例内存占用情况,可用过sum求和
select count(*) as total_process,sum(memory_usage)/1024/1024 as total_memory_Mb from system.processes;
如通过上述命令得到某实例内存占用过大,可通过下面语句查询具体详情。
select memory_usage/1024/1024 as memory_Mb,elapsed,read_rows,written_rows,address,user,query from system.processes order by memory_usage desc;
说明:
- 除以1024,是进行单位转换,方便理解
- 可以根据实际需求选择排序字段
- read_rows和written_rows两个字段,根据查询类型不同一般只有一个字段有值
system.merges
记录当前实例正在进行的merge合并操作,消耗内存的主要行为之一,将插入clcikhouse中的一个分区中的小片段数据根据系统配置阈值进行合并操作。
表关键字段说明
字段名称 | 字段说明 |
---|---|
database | 数据库名称 |
table | 表名 |
elapsed | 耗时,秒 |
progress | 进度,0-1之间 |
num_parts | 需要被merge的数据分块数量 |
result_part_name | 合并后的数据分块名称,对应磁盘上一个文件 |
total_size_bytes_compressed | 压缩数据总大小 |
rows_read | 读取行数 |
bytes_read_uncompressed | 读取未压缩字节大小 |
rows_written | 写入行数 |
bytes_written_uncompressed | 写入未压缩字节大小 |
memory_usage | 内存占用字节 |
merge_type | 合并类型 |
merge_algorithm | 合并算法 |
查询方式
查询当前实例正在执行的merge个数,可通过count(*)查询;查询当前实例正在运行的merge进程对应的内存消耗。
select count(*), sum(memory_usage)/1024/1024 as memory_Mb from system.merges;
查询具体merge进程详情(大于10秒的)
select database,tables,memory_usage/1024/1024 as memory_Mb,elapsed,num_parts,rows_read,rows_written from system.merges where elapsed > 10 order by memory_usage desc;
说明:
可根据实际关注点,参考字段说明,自行调整sql
system.query_log
记录当前实例已经运行过的SQL信息,SQL执行开始和结束均会写入一条记录,可以协助定位慢SQL等相关信息。
须注意数据保留周期。
表关键字段说明
字段名称 | 字段说明 |
---|---|
type | 类型,包含QueryStart,QueryFinish,ExceptionBeforeStart,ExceptionWhileProcessing,一般情况下关注已执行成功记录。 |
event_date | 开始日期,如20255-02-16 |
event_time | 开始时间 |
event_time_microseconds | 开始时间,带毫秒 |
query_duration_ms | 执行耗时 |
read_rows | 读取行数 |
read_bytes | 读取字节数 |
written_rows | 写入行数 |
written_bytes | 写入字节数 |
result_rows | 结果行数,read或者written |
result_bytes | 结果字节数 |
memory_usage | 内存占用情况 |
query | 执行的脚本 |
query_kind | 查询的类型 |
databases | 数据库信息 |
tables | 表信息 |
partitions | 分区信息,尽量一次查询/写入操作同一个分区,效率会更高 |
exception_code | 异常编码 |
exception | 异常信息 |
stack_trace | 堆栈信息 |
is_initial_query | 是否初始化查询,对应其他initial字段 |
user | 数据库用户 |
address | 客户端地址,即谁发起的查询 |
interface | TCP/HTTP |
查询方式
查询指定时间段内耗时大于10秒的记录
select event_time,query_duration_ms/1000 as duration_s,query_kind,result_rows,result_bytes/1024/1024 as result_Mb,memory_usage/1024/1024 as memory_usage_Mb,address,partitions,query,exception from system.query_log where query_duration_ms > 10000 order by memory_usage desc
说明:
具体查询字段,过滤字段以及排序字段,根据字段说明自行调整。
其他附录说明
多实例场景下批量查询方式
for number in 0 1 2 3 4 5 6 7;do echo "------------------"; ./clickhouse-client -h 实例IP或者K8S域名-$number --port 26734 -u clickhouse用户名 --password 用户名对应的密码 --query "select metric,value from system.metrics where metric like '%Connection%' "; echo "------------------"; done
说明:
- in后面数字代表不同的实例编号,-h使用k8s域名如clickhouse-0.xxx.com,可以通过$number获取变量,实现批量查询各个节点信息
- echo打印一堆横杠,以区分不同实例打印结果
- –query参数输入待执行的SQL脚本
K8s集群场景下,根据已查询到的客户端address确认具体的实例名称
K8s容器部署场景下,已获取address情况下,期望明确具体的发起查询的服务实例,可通过以下命令查询
kubectl get pod -A -o wide | grep 实例IP
-A可以根据实际情况修改为具体的命名空间,查询范围更具体一些,当前查询所有命名空间。
相关文章:
【数据库维护】Clickhouse数据库维护关键系统表相关指标说明,支撑定位慢SQL及多实例场景下分析各实例运行情况
背景 当前使用环境上以Docker容器化部署Clickhouse服务8个实例,但在实际运行过程中,发现8个实例内存负载不均衡,ck-0实例在固定时间段内存会直线上升,直至服务报错memory exceeded max memory limit。 为排查ck-0节点内存直线上升…...
委托构造函数与继承构造函数
委托构造函数 允许同一类中的构造函数调用另一个构造函数,以复用初始化逻辑。 委托构造函数不能同时初始化成员变量,只能委托给其他构造函数。 避免循环委托(如构造函数A委托给B,B又委托给A)。 class MyClass { pu…...

DeepSeek操作Excel,实现图表自动化生成
案例 让DeepSeek操作Excel,实现图表自动化生成。我们只要用自然语言输入我们的需求(根据哪块单元格区域做什么图表),就可以直接在Excel中自动生成图表。 操作主界面和图表效果 设置接入方式 这里提供了多种接入方式将DeepSeek接…...
3.5 企业级AI Agent运维体系构建:从容器化部署到智能监控的工业级实践指南
企业级AI Agent运维体系构建:从容器化部署到智能监控的工业级实践指南 引言:AI时代运维的范式革新 Gartner研究指出,AI Agent系统的运维复杂度是传统应用的3.2倍,但采用云原生架构可使故障恢复时间缩短82%。本文以GitHub Sentinel、LanguageMentor等企业级案例为蓝本,揭…...
基于51单片机的定时器实现LED闪烁控制(CT107D)
引言 在嵌入式开发中,定时器是一个非常重要的外设,它可以用于实现精确的时间控制。本文将介绍如何在CT107D单片机综合训练平台上,利用51单片机的定时器T0实现LED灯的定时闪烁控制。具体功能如下: L1指示灯:每隔1秒闪烁…...
【java】作业1
1.需求:(1)机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、原价、月份和头等舱或经济舱;(2)按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济…...

2025有哪些关键词优化工具好用
越来越多的企业和个人开始意识到搜索引擎优化(SEO)对于网站曝光和业务增长的重要性。在SEO优化的过程中,关键词优化占据着至关重要的地位。关键词是用户在搜索引擎中输入的词语,优化关键词有助于提高网站在搜索结果中的排名&#…...

【WPSOffice】汇总
写在前面 PPT篇 幻灯片母版 通过母版功能统一幻灯片的样式、字体、颜色等,提高整体一致性。 统一设置模板样式 字体安装 查找到字体并安装。 在WPS PPT(WPS演示)中,以下是最常用的十个功能,能够帮助用户高效制作…...

海康摄像头IPV6模式,手动,自动,路由公告
海康摄像头DS-2DC7220IW-A 网络设置中的IPv6配置选项。IPv6是互联网协议(IP)的第六版,用于替代IPv4,提供更多的IP地址和改进的网络功能。图片中的选项允许用户选择如何配置设备的IPv6网络连接: 手动:用户可…...
Transformer(3): Add Norm
文章目录 残差连接层归一化作用和其它归一化的比较 dropout基本思想实现方式 残差连接 目的是解决深层网络中梯度消失的问题。 解决方法是进行跳跃连接,即多出一条输出链路,将输入X直接接到输出层上。 公式为 F(X) X。 这样每一层求导的时候至少能够…...

SpringBoot多数据源实践:基于场景的构建、实现和事务一体化研究
1. 多数据源应用场景剖析 1.1 业务驱动的多数据源需求 数据量与业务复杂度引发的分库分表:在现代企业级应用中,随着业务的不断拓展和用户量的持续增长,数据量呈爆炸式增长。例如,在大型电商平台中,用户数据、订单数据…...

SOCKET建立简单的tcp服务端与客户端通信
socket是什么 socket可以使两台机子建立连接,就像连接风扇与电源的插座一样,socket可以使服务端与客户端建立连接,服务端就像供电厂,而客户端就像用电器,而socket就是连接二者的插座。 建立简单的连接 如果我们想在客…...

C语言-章节 1:变量与数据类型 ——「未初始化的诅咒」
在那神秘且广袤无垠的「比特大陆」上,阳光奋力地穿过「内存森林」中错综复杂的代码枝叶缝隙,洒下一片片斑驳陆离、如梦似幻的光影。林间的空气里,弥漫着一股浓郁的十六进制锈蚀味,仿佛在诉说着这片森林中隐藏的古老秘密。 一位零基…...

【HarmonyOS Next】图片选择方案
背景 封装一个选择图片和调用拍照相机的按钮,展示api13下选择图片和调用相机,可以使用不申请用户权限的方式,进行图片的选择和修改。但是,目前方案并未包含上传图片保存的功能,仅提供图片选择或者拍照后,图…...
【C语言】移除元素
移除元素 给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后…...

Python----Python高级(网络编程:网络高级:多播和广播,C/S架构,TCP,UDP,网络编程)
一、多播和广播 1.1、多播 1.1.1、定义 多播(Multicast)也称为组播,是一种一对多的通信方式,将信息从单个源发送到 多个特定的接收者。这些接收者组成一个特定的多播组,只有加入该组的设备才会接 收和处理多播数据。…...

CES 2025 上的创新方案——无电池智能纸尿裤-AP4470
这款纸尿裤采用了可重复使用的组件,通过检测液体的存在来增强老年人和婴儿的护理,即使电极上滴了几滴液体也是如此。 其原理为尿液中的水分作为电解液,将尿布里安装的两种导电性材料作为正负极,充当电池,从而产生300m…...
Java 运算符
运算符用于对变量和值执行运算。 在下面的示例中,我们使用 运算符将两个值相加: int x 100 50;尽管经常使用运算符将两个值加在一起,例如在上面的示例中,但是它也可以用于将一个变量和一个值或一个变量和另一个变量加在一…...
【一文读懂】什么是MVVM?
MVVM Vue 是一个渐进式的 JavaScript 框架,它采用了 MVVM(Model-View-ViewModel)设计模式,这使得它能够高效地进行数据绑定和用户界面的更新。 概念 1. Model(模型) 含义:Model 代表应用程序…...

GCD of Subset
法1: const int N1e6; signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n,k; cin>>n>>k;vector<int>a(n1),cnt(N10);/*桶cnt不要用map实现!!!速度太慢*/vector<vector<int>>…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...