个性化建网站定制,金融软件网站建设公司,鹤壁做网站多少钱,百度一下你就知道网页背景
当前使用环境上以Docker容器化部署Clickhouse服务8个实例#xff0c;但在实际运行过程中#xff0c;发现8个实例内存负载不均衡#xff0c;ck-0实例在固定时间段内存会直线上升#xff0c;直至服务报错memory exceeded max memory limit。 为排查ck-0节点内存直线上升…背景
当前使用环境上以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数量TCPConnectionTCP连接数量HTTPConnectionHTTP连接数量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场景下为实例IPelapsed操作耗时秒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类型包含QueryStartQueryFinishExceptionBeforeStartExceptionWhileProcessing一般情况下关注已执行成功记录。event_date开始日期如20255-02-16event_time开始时间event_time_microseconds开始时间带毫秒query_duration_ms执行耗时read_rows读取行数read_bytes读取字节数written_rows写入行数written_bytes写入字节数result_rows结果行数read或者writtenresult_bytes结果字节数memory_usage内存占用情况query执行的脚本query_kind查询的类型databases数据库信息tables表信息partitions分区信息尽量一次查询/写入操作同一个分区效率会更高exception_code异常编码exception异常信息stack_trace堆栈信息is_initial_query是否初始化查询对应其他initial字段user数据库用户address客户端地址即谁发起的查询interfaceTCP/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可以根据实际情况修改为具体的命名空间查询范围更具体一些当前查询所有命名空间。