在 Doris 3.0.3 中,内存管理是一个关键优化点,涉及多个配置参数。以下是 FE(Frontend) 和 BE(Backend) 节点中与内存上限相关的核心参数,按模块分类整理:
一、FE(Frontend)内存配置
FE 是 Doris 的元数据管理与协调节点,主要内存消耗在 JVM 和查询管理。
1. JVM 堆内存
jvm_args
通过-Xmx
和-Xms
指定 JVM 的最大和初始堆内存。例如:
建议设置为物理内存的 70%-80%,需留出部分内存给堆外操作。-Xmx8g -Xms8g
2. 元数据与查询管理
tablet_create_timeout
创建 Tablet 的超时时间(默认10
秒),间接影响内存使用。max_conn_per_user
单用户最大连接数(默认100
),高并发场景需调整以避免内存不足。qe_max_connection
总查询连接数限制(默认1024
),控制并发查询数量。
二、BE(Backend)内存配置
BE 负责数据存储和查询执行,内存管理更为复杂,需精细化控制。
1. 进程总内存限制
mem_limit
BE 进程最大可用内存(默认80%
的物理内存)。例如:
必须显式设置,避免 BE 占用全部系统内存。mem_limit=64G
2. 查询执行内存
-
exec_mem_limit
单个查询的内存上限(默认2GB
),超限触发 Cancel。
可通过会话变量临时调整:SET exec_mem_limit=8G;
-
memory_maintenance_sleep_time
内存维护线程的检查间隔(默认10
秒),影响内存释放速度。
3. 导入任务内存
-
load_process_max_memory_limit
单个 BE 上所有导入任务的总内存上限(默认30%
ofmem_limit
)。 -
load_process_max_memory_limit_per_task
单个导入任务的内存上限(默认2GB
),适用于 Insert/Broker Load。 -
streaming_load_max_mb
Stream Load 单次导入数据最大内存(默认10GB
),超限返回错误。
4. Compaction 内存
compaction_max_memory_limit
Compaction 任务的最大内存(默认20%
ofmem_limit
),影响合并效率。
5. 存储缓存
storage_page_cache_limit
Storage Page Cache 的大小(默认20%
ofmem_limit
),用于加速数据读取。
6. 内存优化与溢出
-
enable_spill
是否启用内存溢出到磁盘(默认true
),大查询可减少 OOM。 -
disable_mem_pools
禁用内存池(默认false
),关闭后减少内存碎片但可能增加开销。
7. Chunk 内存池
chunk_reserved_bytes_limit
Chunk 内存池保留内存上限(默认20%
ofmem_limit
),用于高效内存分配。
三、高级配置与建议
-
系统参数
调整vm.overcommit_memory
(建议1
)和ulimit
,避免操作系统限制导致 OOM。 -
监控工具
通过 Doris 的 Web 界面或 Metrics 查看memory_usage
和query_mem_consumption
实时监控。 -
动态调整
部分参数可通过SET
语句动态修改,如SET global exec_mem_limit=8G;
。
四、配置示例(BE)
# 关键参数示例(be.conf)
mem_limit = 64G
exec_mem_limit = 8G
load_process_max_memory_limit = 20G
storage_page_cache_limit = 12G
compaction_max_memory_limit = 12G
enable_spill = true