本文为您介绍StarRocks BE(Backend)中内存使用分类、内存配置以及如何查看内存使用。
内存分类
您可以在E-MapReduce控制台目标集群的集群服务页面,STARROCKS服务的配置页面的be.conf页签,新增或修改BE相关配置,具体操作请参见管理配置项。
标识 | Metric名称 | 描述 | BE相关配置 |
process | starrocks_be_process_mem_bytes | BE进程实际使用的内存(不包含预留的空闲内存)。 | mem_limit |
query_pool | starrocks_be_query_mem_bytes | BE查询层使用总内存。 | 无 |
load | starrocks_be_load_mem_bytes | 导入使用的总内存。 | load_process_max_memory_limit_bytes,load_process_max_memory_limit_percent |
table_meta | starrocks_be_tablet_meta_mem_bytes | 元数据总内存。 | 无 |
compaction | starrocks_be_compaction_mem_bytes | 版本合并总内存。 | compaction_max_memory_limit,compaction_max_memory_limit_percent |
column_pool | starrocks_be_column_pool_mem_bytes | Column Pool内存池,用于加速存储层数据读取的Column Cache。 | 无 |
page_cache | starrocks_be_storage_page_cache_mem_bytes | BE存储层page缓存。 | disable_storage_page_cache,storage_page_cache_limit |
chunk_allocator | starrocks_be_chunk_allocator_mem_bytes | CPU per core缓存,用于加速小块内存申请的 Cache。 | chunk_reserved_bytes_limit |
consistency | starrocks_be_consistency_mem_bytes | 定期一致性校验使用的内存。 | consistency_max_memory_limit_percent,consistency_max_memory_limit |
schema_change | starrocks_be_schema_change_mem_bytes | Schema Change任务使用的总内存。 | memory_limitation_per_thread_for_schema_change |
clone | starrocks_be_clone_mem_bytes | Tablet Clone任务使用的总内存。 | 无 |
update | starrocks_be_update_mem_bytes | 主键模型使用的总内存。 | 无 |
内存相关配置
BE配置
名称 | 默认值 | 描述 |
mem_limit | 90% | BE进程内存上限,默认硬限为BE所在机器内存的90%,软限为BE所在机器内存的80%。 如果是BE独立部署的话,不需要配置,如果是和其它占用内存比较多的服务混合部署的话,要合理配置。 |
load_process_max_memory_limit_bytes | 107374182400 | 分别表示导入最大可用内存上限和最大可用内存百分比上限。 系统会在 如果导入内存到达限制,则会触发刷盘和反压逻辑。 |
load_process_max_memory_limit_percent | 30 | |
compaction_max_memory_limit | -1 | 分别表示Compaction内存上限和内存百分比上限。 系统会在 如果Compaction内存到达限制,则会导致Compaction任务失败。 |
compaction_max_memory_limit_percent | 100 | |
disable_storage_page_cache | true | 是否禁用BE存储层page缓存,和storage_page_cache_limit配合使用,在内存资源充足和有大数据量查询的场景中可以打开,能够加速查询性能。 |
storage_page_cache_limit | 0 | BE存储层page缓存可以使用的内存上限。 |
chunk_reserved_bytes_limit | 2147483648 | 用于加速小块内存分配的Cache,默认上限为2147483648(2 GB),在内存资源充足的情况下可以考虑打开。 |
consistency_max_memory_limit | 10G | 一致性校验任务使用的内存上限和内存上限百分比。 系统会在 如果内存使用超限,则会导致任务失败。 |
consistency_max_memory_limit_percent | 20 | |
memory_limitation_per_thread_for_schema_change | 2 | 单个Schema Change任务的内存使用上限。 如果内存使用超限,则会导致Schema Change任务失败。 |
tc_use_memory_min | 10737418240 | TCmalloc最小预留内存。 如果小于该值,则StarRocks不会将空闲内存返还给操作系统。 |
Session变量
名称 | 默认值 | 描述 |
exec_mem_limit | 2147483648 | 单个instance内存限制。 |
load_mem_limit | 0 | 单个导入任务的内存限制。 默认为0,即表示不使用该变量,而使用exec_mem_limit作为内存限制。 |
查看内存使用
您可以通过以下两种方法分析BE内存使用情况:
方式一:通过Metrics接口分析BE内存使用
Metrics统计每10秒更新一次。通过curl访问示例如下。
# BE webserver_port默认是8040。
curl -XGET -s http://BE_IP:8040/metrics | grep "^starrocks_be_.*_mem_bytes\|^starrocks_be_tcmalloc_bytes_in_use"
对应的指标含义请参见内存分类。
方式二:通过mem_tracker接口分析BE内存使用
您可以通过浏览器或curl访问。本示例通过浏览器访问。
# BE webserver_port默认是8040。
http://be_ip:8040/mem_tracker
访问情况如下图所示。
各参数含义如下:
level:MemTracker是一个树型结构,第一级是BE使用总内存,第二级是分类内存使用。
Label:标识内存分类,对应的指标含义请参见内存分类。
Parent:父结点Label。
Limit:内存使用限制,none表示没有限制。
Current Consumption:当前内存使用。
Peak Consumption:峰值内存使用。