用途:回答“RAM 用在哪里、下一个会 OOM 的是什么”,依据 system.asynchronous_metrics、system.metrics、system.dictionaries、system.parts、system.server_settings、system.query_log 等系统表做内存与 OOM 诊断。若连接方式、集群和时间窗口尚未确定,需先运行 altinity-expert-clickhouse-connection。
主要能力:checks.sql 含 15 项检查,覆盖 RAM 总量与 ClickHouse 常驻内存对比、组件拆解(字典、Memory/Set/Join 表、主键、缓存)、分配审计、查询/字典/Memory 引擎表/主键的顶级内存消耗、内存时间线、MEMORY_LIMIT_EXCEEDED 异常、查询与 part_log 内存时间线、服务器内存设置、非 ClickHouse 进程占用及高内存 GROUP BY 与 JOIN 形态;reference.md 提供背景(设置、容量规划、反模式),仅在需解释建议时阅读。
使用方式:从本技能目录读取检查包,逐条执行语句,不要整文件运行;语句以 ; 结尾并以 -- @check <id> <title> 开头,保留 id。按 -- @requires 跳过缺失表、缺少 Keeper/ZooKeeper 或版本不符的语句并记录原因。{cluster} 在存在集群宏时原样保留,否则按连接技能规则改写;其他 {placeholder} 需先替换真实值或跳过。出错时记录检查 id 与错误首行后继续;仅对 UNKNOWN_IDENTIFIER 运行 DESCRIBE TABLE system.<table> 并去掉缺失列。severity 列即该行结论,直接复制不要重新评级。结果按连接方式、集群或单节点、版本、时间窗口的表头,以 check/severity/object/evidence/recommendation 表格输出发现,Critical 优先,并列出 OK 检查、跳过与失败检查(不可省略)及下一步。
关键判断:memory-01 按常驻内存占总量评分(>90% Critical,>80% Major),与 memory-13 对比后再归因查询;MemoryTracking 与 MemoryResident 差距大意味着缓存、分配器碎片或 jemalloc 未归还内存,调每查询限制无用;memory-13 Critical 说明其他进程占用保留内存,应调整共置或降低比例;memory-10 为异常码 241,需看消息中的限制来源;聚合高内存可设 max_bytes_before_external_group_by、降低 max_threads、降低基数;JOIN 高内存可设 max_bytes_in_join、切换 partial_merge 或 auto、把小表放右侧;主键内存大属 schema 问题,字典占用为永久 RAM,Memory 引擎表与 Set/Join 表无溢写路径。
限制:部分检查依赖 system.asynchronous_metric_log、system.part_log 等表,缺失时须跳过;资料未提供具体版本门槛与更多环境信息。