中间结果落盘
本文介绍如何将大算子的中间计算结果落盘 (Spill to disk) 至本地磁盘或对象存储。
概述
对于依靠内存计算处理查询的数据库系统,例如 StarRocks,它们在大数据集上处理聚合、排序以及连接等运算时,会消耗大量内存资源。当达到内存限制时,这些查询将被强制终止。
但在某些场景下,您可能希望使用有限的内存资源稳定地完成某些任务,甚至愿意为此牺牲部分性能,例如,构建物化视图或使用 INSERT INTO SELECT 执行轻量级 ETL。这类任务会大量消耗内存资源,进而阻塞集群中运行的其他查询。通常,您需要通过手动调整参数解决这个问题,并且依靠集群资源隔离策略来控制查询并发。这种方式不仅较为不便,并且在极端情况下,可能依然会失败。
从 v3.0.1 开始,StarRocks 支持将一些大算子的中间结果落盘。 使用此功能,您可以在牺牲一部分性能的前提下,大幅降低大规模数据查询上的内存消耗,进而提高整个系统的可用性。
目前,StarRocks 支持将以下算子的中间结果落盘:
- 聚合算子
- 排序算子
- Hash join(LEFT JOIN、RIGHT JOIN、FULL JOIN、OUTER JOIN、SEMI JOIN 以及 INNER JOIN)算子
- CTE 算子(自 v3.3.4 起支持)
开启中间结果落盘
根据以下步骤开启中间结果落盘: