① 标题党#
主标题:Doris 内存 OOM?它其实会"把大象塞回冰箱"
备选:大查询一跑就爆内存?Doris 的 spill 了解一下
② 开场钩子#
一条超大 GROUP BY 或 JOIN 下去,内存直接打爆。Doris 是怎么活下来的?靠一个”内存不够就往外吐”的机制。
③ 主角特性:内存管理 / 溢写(Spill)#
- Doris 有内存统计 + 限制,BE 内存分块管理,防止单查询吃光整机。
- 查询内存超阈值时,部分中间结果溢写(spill)到磁盘,腾出内存继续算,而不是 OOM。
- 用
memory_limit约束查询,避免”一山不容二虎”。
关键:spill 上限调太高=磁盘 IO 拖慢;太低=频繁溢写。要在”内存省”和”磁盘 IO”间平衡。
④ 最小可复现#
-- 会话级限制查询内存
SET exec_mem_limit = 2147483648; -- 2GB
-- 观察
SHOW PROCESSLIST;sql⑤ 结论#
Doris 处理大查询不是硬扛,是”该溢磁盘就溢磁盘”。看懂它,你才敢放开跑大查询,而不是怕它崩。
⑥ 配图脚本#
内存水位线 / spill 到磁盘示意 / exec_mem_limit 调参 / 平衡曲线