本文為您介紹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:峰值記憶體使用量。