说明

计算规则

成效

BE中缓存内存设置,有两个参数query cache max size和query cache elasticity size两部分组成(单位MB),内存超过query cache max size + cache elasticity size会开始清理,并把内存控制到query cache max size以下可以根据BE节点数量,节点内存大小,和缓存命中率来设置这两个参数。计算方法:

假如缓存10000个Query,每个Querv缓存1000行,每行是128个字节,分布在10台BE上,则每个BE需要约128M内存(10000 1000 128/10)。

计算方法:

假如缓存10000个Query,每个Querv缓存1000行,每行是128个字节,分布在10台BE上,则每个BE需要约128M内存(10000 1000 128/10)。

跑批内存平稳在5G内存左右

chunk_reserved_bytes_limit

描述:Chunk Allocator的reserved bytes 限制,通常被设置为 mem_limit 的百分比。默认单位字节,值必须是2的倍数,且必须大于0,如果大于物理内存,将被设置为物理内存大小。增加这个变量可以提高性能,但是会获得更多其他模块无法使用的空闲内存。

mem_limit:限制 BE 进程使用服务器最大内存百分比。用于防止 BE 内存挤占太多的机器内存,该参数必须大于 0,当百分大于 100% 之后,该值会默认为 100%。默认值:90%

chunk_reserved_bytes_limit在不设置情况下使用mem_limit的配置。设置了该参数则使用当前设置参数。

按照上边参数进行计算:设置百分比进行数据同步可使用内存。

跑批完成以后,内存快速下降稳定定内存在3G左右

描述:buffer pool 之中最大的可分配内存

BE 缓存池最大的内存可用量,buffer pool 是 BE 新的内存管理结构,通过 buffer page 来进行内存管理,并能够实现数据的落盘。并发的所有查询的内存申请都会通过 buffer pool 来申请。当前 buffer pool 仅作用在AggregationNode与ExchangeNode。

降低缓存池的内存释放到可用内存。建议设置2%

描述:缓存存储页大小

开启 PageCache 后,StarRocks 会缓存最近扫描过的数据,对于查询重复性高的场景,会大幅提升查询效率。true 表示不开启。该配置项与 storage_page_cache_limit 配合使用,在内存资源充足和有大数据量 Scan 的场景中启用能够加速查询性能。storage_page_cache_limit BE 存储层 page 缓存可以使用的内存上限。

默认值:20%

查询缓存减少,使用可用内存减少缓存,达到快速释放。建议设置4%

线程池中最大线程数量的最大值

max_cumu_compaction_threads = 60

线程池中线程闲置的最大值

max_base_compaction_threads = 2

线程池数量设置2,保证线程池持续有,但是不占用没有必要内存

在 free 函数的最先处理部分,首先是检查释放块是否页对齐及前后堆块的释放情况,便优先放入 tcache 结构中。

内存申请:

在内存分配的 malloc 函数中有多处,会将内存块移入 tcache 中。

(1)首先,申请的内存块符合 fastbin 大小时并且找到在 fastbin 内找到可用的空闲块时,会把该 fastbin 链上的其他内存块放入 tcache 中。

(2)其次,申请的内存块符合 smallbin 大小时并且找到在 smallbin 内找到可用的空闲块时,会把该 smallbin 链上的其他内存块放入 tcache 中。

(3)当在 unsorted bin 链上循环处理时,当找到大小合适的链时,并不直接返回,而是先放到 tcache 中,继续处理。

直接使用物理内存,

减少内存开销则选择不实用tcache的缓存

doris内存过高优化_线程池