七万号·数据平台实战手记

Back

① 标题党#

主标题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 调参 / 平衡曲线


大查询内存告急?Doris 的 Spill 与节流
https://realcpf.tech/blog/doris-09
Author 刘佳成
Published at 2026年9月1日