环境是 3 台 16C/64G 跑 TiDB v6.5.3,TiKV 和 PD 混部。最近跑一批大范围聚合查询,TiKV 内存慢慢涨到 45G 左右,个别节点被 OOM kill 重启过。我已把 storage.block-cache.capacity 从默认 45% 降到 30%,重启后内存还是持续上涨。看 Grafana 上 coprocessor 相关指标,也没发现明显堆积。想请教大家:这种场景 block-cache 一般设多大合适?要不要对单条查询加内存限制,或者干脆把这类分析查询切到 TiFlash 上跑?
先确认内存到底被谁吃了。block-cache 只占一部分,大聚合查询主要在 coprocessor 侧消耗内存,调 block-cache 治标不治本。
建议几步排查:
- 看 Grafana 的 TiKV Memory 面板,区分 block-cache、coprocessor、raftstore 各占多少。
1 个赞
排查思路挺清晰。先说 block-cache:混部场景 30% 已经算合理,而且它本身有硬上限,降完还在涨说明瓶颈多半不在缓存。去 Grafana 对比 Block Cache 实际占用和 RSS 就能验证,差距持续拉大的话,基本就是 coprocessor 跑大聚合的中间结果在吃内存。tidb_mem_quota_query 压小主要保住 TiDB 侧,对 TiKV 的 cop 内存帮助有限,所以这批查询我倾向直接切 TiFlash——大范围聚合交给列存 + MPP 才是对口的。另外 6.5 后面几个 patch 修过不少内存问题,顺手升一下不亏。