ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

StarRocks ALTER RESOURCE GROUP 完全指南:动态增删分类器与调整资源配额

StarRocks ALTER RESOURCE GROUP 完全指南:动态增删分类器与调整资源配额 StarRocks ALTER RESOURCE GROUP 完全指南动态增删分类器与调整资源配额【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocksALTER RESOURCE GROUP 是 StarRocks 资源组Resource Group体系中用于修改既有资源组配置的 DDL 语句它允许你动态地为资源组新增/删除查询分类器Classifier或调整资源组的 CPU、内存、并发、大查询等资源限额而无需重建资源组、中断正在运行的负载。读完本文你将掌握 ALTER RESOURCE GROUP 的完整语法、每个子命令与参数的取值约束理解其底层执行链路语法解析 → 语义校验 → 元数据更新 → 广播到 BE并能在生产集群中安全地对普通资源组、系统内置资源组default_wg/default_mv_wg实施配置变更。功能概述与使用前提资源组是 StarRocks 在单集群内实现多工作负载短查询、ad-hoc 查询、ETL 任务等并发运行与资源隔离的核心机制将每个 BE 的 CPU 与内存划分给多个资源组查询按分类器匹配规则落入对应资源组由执行引擎按配额调度。ALTER RESOURCE GROUP 正是该机制中的修改入口与 CREATE RESOURCE GROUP创建、SHOW RESOURCE GROUP查看、DROP RESOURCE GROUP删除共同构成资源组的完整生命周期管理。使用 ALTER RESOURCE GROUP 前需要满足两个前提权限要求该操作需要对目标资源组拥有ALTER 权限可按照 GRANT 中的说明为用户赋权。功能开启资源组功能需要 Pipeline 引擎配合SET enable_pipeline_engine true从 v3.1.0 起资源组默认启用会话变量enable_resource_group已废弃。具体启用方式见 资源组管理。语法详解ALTER RESOURCE GROUP resource_group_name { ADD CLASSIFIER1, CLASSIFIER2, ... | DROP (CLASSIFIER_ID_1, CLASSIFIER_ID_2, ...) | DROP ALL | WITH resource_limit };该语句支持四种子命令互斥出现子命令说明resource_group_name待修改的资源组名称。ADD为资源组添加一个或多个分类器分类器定义方式与 CREATE RESOURCE GROUP 完全一致。DROP按分类器 ID删除资源组中的指定分类器分类器 ID 可通过 SHOW RESOURCE GROUP 语句查看。DROP ALL删除资源组下的全部分类器。WITH修改资源组的资源限制resource_limit设置方式与 CREATE RESOURCE GROUP 一致。从语法层看该语句的四个分支与 FE 端 ANTLR 文法 StarRocks.g4 中定义的alterResourceGroupStatement规则一一对应alterResourceGroupStatement : ALTER RESOURCE GROUP identifier ADD classifier (, classifier)* | ALTER RESOURCE GROUP identifier DROP ( INTEGER_VALUE (, INTEGER_VALUE)* ) | ALTER RESOURCE GROUP identifier DROP ALL | ALTER RESOURCE GROUP identifier WITH ( property (, property)* )注意DROP分支要求分类器 ID 必须为INTEGER_VALUE整数ADD与WITH分支可携带多个classifier/property均以逗号分隔。分类器CLASSIFIER定义ADD添加分类器时每个分类器由若干keyvalue条件组成可使用与 CREATE 相同的全部条件源码中的合法条件清单见 ResourceGroupAnalyzer.java分类器参数必填说明user否用户名。role否用户角色。query_type否查询类型支持SELECT和v2.5 起INSERT当 INSERT 任务命中query_type为insert的资源组时BE 会为其预留指定 CPU 资源。source_ip否查询发起方的 CIDR 网段如192.168.x.x/24。db否查询访问的数据库可用逗号分隔的字符串指定多个库。plan_cpu_cost_range否查询预估 CPU 开销区间取值与fe.audit.log中的PlanCpuCost字段含义一致、无单位格式为[DOUBLE, DOUBLE)默认 NULL 表示不限制v3.1.4 起支持。plan_mem_cost_range否查询预估内存开销区间与fe.audit.log中的PlanMemCost字段含义一致、无单位格式为[DOUBLE, DOUBLE)默认 NULL 表示不限制v3.1.4 起支持。源码校验逻辑会对user做用户名格式检查、对source_ip做 CIDR 规范化调用SubnetUtils生成getCidrSignature()、对db校验数据库是否存在并将名称解析为库 ID、对plan_*_cost_range校验区间格式并且分类器至少要给出user、role、query_type、db、source_ip、plan_cpu_cost_range、plan_mem_cost_range中的任意一个条件否则报错。资源限制resource_limit设置WITH修改资源限制时可设置的键值对与 CREATE 时一致按功能分为四组CPU 资源参数参数说明取值范围/默认值cpu_weight资源组在单个 BE 上的 CPU 调度权重v3.3.5 前称为cpu_core_limit决定该组任务获得的 CPU 时间相对份额BE 会按 CPU 实际可用情况比例伸缩。(0,avg_be_cpu_cores]avg_be_cpu_cores为所有 BE 的平均核数仅大于 0 时生效。cpu_weight_percentCPU 调度权重百分比v4.1 起支持运行时各 BE 按be_cpu_cores * cpu_weight_percent / 100换算为实际cpu_weight。[0, 100]仅大于 0 时生效。exclusive_cpu_coresCPU 硬隔离参数为资源组独占预留指定核数即使空闲其他组也不能用同时限制该组只能使用这些预留核。创建 Exclusive 资源组时必填。(0,min_be_cpu_cores - 1]min_be_cpu_cores为所有 BE 的最小核数仅大于 0 时生效。exclusive_cpu_percentCPU 硬隔离百分比v4.1 起支持按be_cpu_cores * exclusive_cpu_percent / 100换算。[0, 100)仅大于 0 时生效。max_cpu_cores资源组在单个 BE 上的 CPU 核数上限v3.3.5 起由type参数取代并废弃。[0,avg_be_cpu_cores]默认 0仅大于 0 时生效。cpu_weight、cpu_weight_percent、exclusive_cpu_cores、exclusive_cpu_percent四者中同时只能有一个大于 0校验逻辑见 ResourceGroupAnalyzer.java。Shared 资源组仅设cpu_weight类参数运行在共享核上Exclusive 资源组设exclusive_*运行在独占核上可通过 BE 配置enable_resource_group_cpu_borrowing默认 true控制共享组能否在独占组空闲时借用其 CPU。内存资源参数参数说明取值范围/默认值mem_limit资源组在单个 BE 上可用的查询内存占总内存的百分比CREATE 时必填。(0, 1]支持20%或0.2两种写法。mem_pool共享内存池标识v4.0 起同一mem_pool的资源组共享内存额度且必须配置相同的mem_limit未指定则归入default_mem_pool。字符串默认default_mem_pool。spill_mem_limit_threshold触发落盘的内存使用阈值v3.1.7 起。(0, 1]默认 1即不生效。mem_used_pct_limit资源组内存使用百分比上限超过则视为过载仅对资源组级查询队列生效需enable_group_level_query_queuetrue且 FE 配置enable_query_queue_v2false。[0, 1]默认 0仅大于 0 时生效。并发控制参数参数说明取值范围/默认值concurrency_limit资源组内并发查询数上限用于避免过多并发拖垮系统。非负整数默认 0仅大于 0 时生效。大查询Big Query限制参数参数说明取值范围/默认值big_query_cpu_second_limit大查询在每个 BE 上的 CPU 占用时间上限秒并发查询累计计算。非负整数默认 0仅大于 0 时生效。big_query_scan_rows_limit大查询在每个 BE 上可扫描的行数上限。非负整数默认 0仅大于 0 时生效。big_query_mem_limit大查询在每个 BE 上的内存使用上限字节。非负整数默认 0仅大于 0 时生效。注意超过大查询限制的查询会被终止并报错错误信息可在 FE 节点fe.audit.log的ErrorCode列查看。示例解析示例一为资源组rg1添加新分类器。ALTER RESOURCE GROUP rg1 ADD (userroot, query_type in (select));执行后root用户发起的SELECT查询将被匹配到rg1。ADD支持一次添加多个分类器ALTER RESOURCE GROUP rg1 ADD (useru1), (dbdb1);。示例二按 ID 删除资源组rg1中的分类器。ALTER RESOURCE GROUP rg1 DROP (300040, 300041, 300041);分类器 ID 是系统分配的全局递增 ID源码中通过GlobalStateMgr.getCurrentState().getNextId()生成必须先执行SHOW RESOURCE GROUP rg1;或SHOW RESOURCE GROUPS ALL;从结果集的classifiers列中取得该列形如(id15016, weight1.0, userrg1_user)其中id即分类器 IDweight为匹配度。示例三删除资源组rg1的全部分类器。ALTER RESOURCE GROUP rg1 DROP ALL;删除全部或部分分类器后资源组本身及其资源配额保持不变若后续新增查询不再命中任何分类器将落入系统默认资源组default_wg。示例四修改资源组rg1的资源限制。ALTER RESOURCE GROUP rg1 WITH ( cpu_weight 10 );WITH子句可同时修改多个资源限制例如将内存与并发一并调整ALTER RESOURCE GROUP rg1 WITH (mem_limit 30%, concurrency_limit 5);。底层执行链路一条 ALTER 语句如何生效结合源码可以完整还原 ALTER RESOURCE GROUP 的执行过程语法解析FE 依据 StarRocks.g4 中的alterResourceGroupStatement规则将 SQL 解析为AlterResourceGroupStmt其内部以SubCommand子类区分AddClassifiers、DropClassifiers、DropAllClassifiers、AlterProperties四种操作。语义校验ResourceGroupAnalyzer.analyzeAlterResourceGroupStmt() 完成校验包括ADD分支复用convertPredicateToClassifier()校验每个分类器条件的合法性WITH分支必须至少指定cpu_weight、cpu_weight_percent、exclusive_cpu_cores、exclusive_cpu_percent、mem_limit、max_cpu_cores、concurrency_limit、big_query_mem_limit、big_query_scan_rows_limit、big_query_cpu_second_limit、spill_mem_limit_threshold、mem_used_pct_limit、warehouses中的一项资源组type不可修改immutable系统内置资源组default_wg、default_mv_wg只能修改属性AlterProperties不能增删分类器内置资源组不能设置非空warehouses。元数据更新与持久化ResourceGroupMgr.alterResourceGroup() 加写锁后执行校验资源组存在ADD为新分类器分配 ID 并追加DROP按 ID 集合过滤移除DROP ALL清空WITH则通过AlterResourceGroupLog记录变更并通过EditLog.logAlterResourceGroup()写入 edit logWAL保证 FE 重启后可通过replayAlterResourceGroup()恢复。广播到 BE仅当修改的是资源属性AlterProperties时才会生成新的version并把WORKGROUP_OP_ALTER操作加入resourceGroupOps队列通过心跳或 RPC 下发给各 BE 生效仅增删分类器则无需下发分类器匹配在 FE 侧完成。测试验证仓库中的 ResourceGroupStmtTest.java 覆盖了DROP (id1, id2, ...)、DROP ALL、ADD多分类器、内置资源组约束如 MV 资源组不允许添加分类器等场景通过执行 ALTER 后与SHOW VERBOSE RESOURCE GROUPS的结果断言验证行为一致。约束与注意事项在生产环境使用 ALTER RESOURCE GROUP 时需特别注意以下几点权限最小化仅授予确有需要的用户/角色对目标资源组的 ALTER 权限避免越权改动其他租户的资源配额。内置资源组可改属性、不可改分类器、不可删除每个 StarRocks 实例内置default_wg与default_mv_wg。default_wg承接未匹配任何分类器的普通查询默认cpu_weight为 BE 核数、mem_limit100%default_mv_wg承接未指定资源组的异步物化视图刷新任务默认cpu_weight1、mem_limit80%。可用 ALTER 调整其资源限制但不能为其定义分类器也不能 DROP。MV 资源组不支持分类器类型为WG_MV的资源组执行ADD/DROP/DROP ALL会直接报错只能通过WITH调整资源限制。mem_pool一致性共享同一mem_pool的资源组必须配置相同的mem_limit因此在 ALTER 单独修改其中一个组的mem_limit时会被拒绝报错信息提示Property mem_limit cannot be altered for resource groups with mem_pool [...]需将同池所有组的mem_limit一并修改。CPU 参数互斥cpu_weight/cpu_weight_percent/exclusive_cpu_cores/exclusive_cpu_percent同时只能一个大于 0且exclusive_cpu_cores不能超过min_be_cpu_cores - 1需为共享组至少保留 1 个核。变更影响范围修改资源属性会触发版本号更新并向全部 BE 广播属于集群级变更建议在业务低峰期执行。分类器匹配度判断新分类器是否命中ADD新分类器后StarRocks 依据匹配度规则为查询选择资源组详见 资源组管理user、role相同匹配度各 1query_type相同1 1/分类器中query_type字段数source_ip相同1 (32 -cidr_prefix)/64db相同10权重最高查询预估 CPU/内存开销落在plan_cpu_cost_range/plan_mem_cost_range内各 1。条件数量越多、描述越精确如 CIDR 更小、query_type 更少的分类器匹配度越高匹配度相同时随机选择一个。可通过EXPLAIN VERBOSE query执行前、SHOW PROC /current_queries执行中或 FE 节点fe.audit.log的ResourceGroup字段执行后确认查询实际命中的资源组。运维闭环与 SHOW / DROP 的组合用法一个完整的资源组变更流程通常为先通过 CREATE RESOURCE GROUP 创建再用 SHOW RESOURCE GROUP 确认分类器 ID 与当前配额接着用 ALTER 增删分类器或调整配额最终用 DROP RESOURCE GROUP 下线不再需要的资源组内置资源组除外。-- 1. 查看集群内所有资源组及分类器 ID SHOW RESOURCE GROUPS ALL; -- 2. 用 SHOW VERBOSE 查看包含废弃字段在内的全量信息 SHOW VERBOSE RESOURCE GROUP rg1; -- 3. 变更后核对 SHOW RESOURCE GROUP rg1;变更完成后可结合 FE 指标如starrocks_fe_query_resource_group、starrocks_fe_query_resource_group_latency与 BE 指标如resource_group_running_queries、resource_group_mem_inuse_bytes、resource_group_inuse_cpu_cores观察新配额下各组查询延迟、并发与资源使用是否符合预期必要时再次使用 ALTER 迭代调优实现资源配额的持续、平滑调整。【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表