【数据库维护】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>>…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
