关于内存管理:一文揭秘高效稳定的-Apache-Doris-内存管理机制
作者:SelectDB 高级研发工程师、Apache Doris Committer 邹新一背景Apache Doris 作为基于 MPP 架构的 OLAP 数据库,数据从磁盘加载到内存后,会在算子间流式传递并计算,在内存中存储计算的两头后果,这种形式缩小了频繁的磁盘 I/O 操作,充分利用多机多核的并行计算能力,可在性能上出现微小劣势。 在面临内存资源耗费微小的简单计算和大规模作业时,无效的内存调配 、统计、 管控对于零碎的稳定性起着非常要害的作用——更快的内存调配速度将无效晋升查问性能,通过对内存的调配、跟踪与限度能够保障不存在内存热点,及时精确地响应内存不足并尽可能躲避 OOM 和查问失败,这一系列机制都将显著进步零碎稳定性;更准确的内存统计,也是大查问落盘的根底。 问题和思考在内存短缺时内存治理通常对用户是无感的,但实在场景中往往面临着各式各样的极其 Case ,这些都将为内存性能和稳定性带来挑战,在过来版本中,用户在应用 Apache Doris 时在内存治理方面遭逢了以下挑战:OOM 导致 BE 过程解体。内存不足时,用户能够承受执行性能稍慢一些,或是让后到的工作排队,或是让大量工作失败,总之心愿无效限度过程的内存应用而不是宕机;BE 过程占用内存较高。用户反馈 BE 过程占用了较多内存,但很难找到对应内存耗费大的查问或导入工作,也无奈无效限度单个查问的内存应用;用户很难正当的设置每个query的内存大小,所以经常出现内存还很短缺,然而query 被cancel了;高并发性能降落重大,也无奈疾速定位到内存热点;构建 HashTable 的两头数据不反对落盘,两个大表的 Join 因为内存超限无奈实现。针对开发者而言又存在另外一些问题,比方内存数据结构性能重叠且应用凌乱,MemTracker 的构造难以了解且手动统计易出错等。 针对以上问题,咱们经验了过来多个版本的迭代与优化。从 Apache Doris 1.1.0 版本开始,咱们逐步对立内存数据结构、重构 MemTracker、开始反对查问内存软限,并引入过程内存超限后的 GC 机制,同时优化了高并发的查问性能等。在 Apache Doris 1.2.4 版本中,Apache Doris 内存管理机制已趋于欠缺,在 Benchmark、压力测试和实在用户业务场景的反馈中,根本打消了内存热点以及 OOM 导致 BE 宕机的问题,同时可定位内存 Top 的查问、反对查问内存灵便限度。而在最新的 Doris 2.0 alpha 版本中,咱们实现了查问的异样平安,并将逐渐配合 Pipeline 执行引擎和两头数据落盘 , 让用户不再受内存不足困扰。 在此咱们将零碎介绍 Apache Doris 在内存治理局部的实现与优化。 ...