尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

StarRocks Resource Group 资源组深度指南:在同一集群中隔离 CPU 与内存、混合运行多类工作负载

StarRocks Resource Group 资源组深度指南:在同一集群中隔离 CPU 与内存、混合运行多类工作负载 StarRocks Resource Group 资源组深度指南在同一集群中隔离 CPU 与内存、混合运行多类工作负载【免费下载链接】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/starrocksResource Group资源组是 StarRocks 提供的计算资源隔离与管理特性你可以在单个集群的每个 BE 节点上划分出多个资源组为短查询、Ad-hoc 查询、ETL 作业、数据导入等不同类型的工作负载分配独立的 CPU 与内存配额并借助 classifier分类器自动将查询路由到对应资源组从而在不额外部署多套集群的前提下实现资源隔离、避免相互干扰、保障系统稳定性。读完本文你将掌握资源组从参数含义、创建与修改、分类器匹配规则到运行期监控与源码级调度原理的完整实战方案。功能演进与能力矩阵Resource Group 自 v2.2 引入以来能力逐步增强v2.2支持为查询限制资源消耗实现同一集群内多租户间的资源隔离与高效利用。v2.3可进一步限制大查询Big Query的资源消耗防止超大查询请求耗尽集群资源保证系统稳定性。v2.5支持限制数据导入INSERT的计算资源消耗。v3.3.5 起支持对 CPU 资源施加硬限制Hard Limit即 Exclusive Resource Group 与独占 CPU 核。各版本对能力维度的支持情况如下版本Internal TableExternal TableBig Query RestrictionINSERT INTOBroker LoadRoutine Load / Stream Load / Schema ChangeCPU Hard Limit2.2√××××××2.3√√√××××2.5√√√√×××3.1 与 3.2√√√√√××3.3.5 及以后√√√√√×√从 v3.1.0 起Resource Group 默认启用会话变量enable_resource_group已废弃。核心概念resource group 与 classifierresource group每个资源组resource group是某个 BE 上一组计算资源的集合。你可以把集群中的每个 BE 划分成多个资源组当一个查询被分配到某资源组时StarRocks 会根据该组配置的资源配额为它分配 CPU 和内存。在一个 BE 上可通过以下参数为资源组指定 CPU 与内存配额参数说明取值范围默认值cpu_weight该资源组在 BE 节点上的 CPU 调度权重。(0,avg_be_cpu_cores]大于 0 时生效0cpu_weight_percent该资源组在 BE 节点上的 CPU 调度权重百分比。v4.1 起支持。[0, 100]大于 0 时生效0exclusive_cpu_cores该资源组的 CPU 硬隔离参数独占核数。(0,min_be_cpu_cores - 1]大于 0 时生效0exclusive_cpu_percent该资源组的 CPU 硬隔离百分比。v4.1 起支持。[0, 100]大于 0 时生效0mem_limit该资源组在当前 BE 节点上可用于查询的内存百分比。(0, 1]必填-mem_pool将若干资源组归入同一个共享内存池共同受mem_limit约束。Stringdefault_mem_poolspill_mem_limit_threshold触发落盘spill to disk的内存使用阈值。(0, 1]1.0concurrency_limit该资源组中最大的并发查询数。Integer大于 0 时生效0mem_used_pct_limit该资源组的内存使用百分比上限。需要启用enable_group_level_query_queue且仅当enable_query_queue_v2为false时可用。[0, 1]大于 0 时生效0big_query_cpu_second_limit大查询任务在每个 BE 节点上可用的最大 CPU 时间秒。Integer大于 0 时生效0big_query_scan_rows_limit大查询任务在每个 BE 节点上可扫描的最大行数。Integer大于 0 时生效0big_query_mem_limit大查询任务在每个 BE 节点上可使用的最大内存。Integer大于 0 时生效0系统内置资源组每个 StarRocks 实例内置两个系统资源组default_wg与default_mv_wg。你可以通过ALTER RESOURCE GROUP修改它们的配置但不能为其定义 classifier也不能删除它们。default_wg分配给受资源组管理但未匹配到任何 classifier 的普通查询。默认配额cpu_weight为 BE 的 CPU 核数、mem_limit为 100%、concurrency_limit为 0、big_query_cpu_second_limit/big_query_scan_rows_limit/big_query_mem_limit均为 0、spill_mem_limit_threshold为 1、mem_used_pct_limit为 0。default_mv_wg分配给在创建物化视图时未通过属性resource_group指定资源组的异步物化视图刷新任务。默认配额cpu_weight为 1、mem_limit为 80%、concurrency_limit为 0、spill_mem_limit_threshold为 80%、mem_used_pct_limit为 0。在 FE 端源码中这两个内置组的名称被定义为常量DEFAULT_RESOURCE_GROUP_NAME default_wg与DEFAULT_MV_RESOURCE_GROUP_NAME default_mv_wg见 ResourceGroup.java。classifier每个 classifier分类器包含一个或多个条件用于匹配查询的属性。StarRocks 根据匹配条件为每个查询找出匹配度最高的 classifier并据此分配运行资源。classifier 支持以下条件user用户名。role用户角色。query_type查询类型支持SELECT与v2.5 起INSERT。当 INSERT INTO 或 BROKER LOAD 任务命中query_type为insert的资源组时BE 会为任务预留指定的 CPU 资源。source_ip查询发起的 CIDR 网段。db查询访问的数据库可用逗号,分隔的字符串指定多个。plan_cpu_cost_range查询的预估 CPU 消耗区间格式为(DOUBLE, DOUBLE]默认 NULL 表示不限制。fe.audit.log中的PlanCpuCost列即系统对查询 CPU 成本的预估。v3.1.4 起支持。plan_mem_cost_range查询的预估内存消耗区间格式为(DOUBLE, DOUBLE]默认 NULL 表示不限制。fe.audit.log中的PlanMemCost列即系统对查询内存成本的预估。v3.1.4 起支持。一个 classifier 只有在“一个或全部”条件与查询信息匹配时才匹配该查询。若多个 classifier 同时匹配StarRocks 会计算每个 classifier 与查询的匹配度选择匹配度最高的那个。匹配度的计算规则如下与查询的user相同匹配度 1。与查询的role相同匹配度 1。与查询的query_type相同匹配度 1 1/(该 classifier 中query_type字段的数量)。与查询的source_ip相同匹配度 1 (32 -cidr_prefix)/64。与查询的db相同匹配度 10。查询 CPU 成本落在plan_cpu_cost_range内匹配度 1。查询内存成本落在plan_mem_cost_range内匹配度 1。在 FE 端ResourceGroupClassifier.weight()见 ResourceGroupClassifier.java封装了上述匹配度的计算而 ResourceGroupMgr.java 在对候选 classifier 排序时正是以weight()作为比较键。匹配规则的进一步细化条件更多的 classifier 匹配度更高-- Classifier B 的条件多于 Classifier A因此 B 的匹配度更高。 classifier A (userAlice) classifier B (userAlice, source_ip 192.168.1.0/24)条件数相同时描述更精确的 classifier 匹配度更高-- Classifier B 的 CIDR 网段比 Classifier A 更小因此 B 的匹配度更高。 classifier A (userAlice, source_ip 192.168.1.0/16) classifier B (userAlice, source_ip 192.168.1.0/24) -- Classifier C 指定的查询类型比 Classifier D 更少因此 C 的匹配度更高。 classifier C (userAlice, query_type in (select)) classifier D (userAlice, query_type in (insert,select))若多个 classifier 匹配度相同则随机选择其中一个-- 如果某查询同时访问 db1 和 db2且 classifier E、F 在所有命中分类器中匹配度并列最高则随机选择 E 或 F。 classifier E (dbdb1) classifier F (dbdb2)资源参数详解CPU 资源参数cpu_weight与cpu_weight_percent这两个参数指定资源组在单个 BE 节点上的 CPU 调度权重决定该组任务可获得的 CPU 时间相对份额。v3.3.5 之前它们被统称为cpu_core_limit。两种设置方式二选一cpu_weight直接设置 CPU 调度权重取值范围 (0,avg_be_cpu_cores]其中avg_be_cpu_cores是所有 BE 节点的平均 CPU 核数仅在大于 0 时生效。cpu_weight_percentv4.1 起支持以百分比形式设置权重取值范围 [0, 100]仅在大于 0 时生效。若min_be_cpu_cores * cpu_weight_percent / 100 1系统会报错其中min_be_cpu_cores是所有 BE 节点中最小的 CPU 核数。运行时每个 BE 会依据自身核数be_cpu_cores将百分比换算成实际权重cpu_weight be_cpu_cores * cpu_weight_percent / 100。注意cpu_weight、cpu_weight_percent、exclusive_cpu_cores、exclusive_cpu_percent四者中同一时刻只能有一个大于 0。说明例如有三个资源组 rg1、rg2、rg3cpu_weight 分别为 2、6、8。在满负载的 BE 节点上三组分别获得 12.5%、37.5%、50% 的 CPU 时间若节点并非满负载只有 rg1 和 rg2 有负载而 rg3 空闲则 rg1 和 rg2 分别获得 25% 和 75% 的 CPU 时间。从源码看BE 端采用基于vruntime的调度实体来保证权重公平WorkGroupSchedState维护每个组的_vruntime_ns调度时按runtime_ns vruntime_ns * cpu_weight参与比较见 work_group.h权重越大同等运行时间内 vruntime 增长越慢从而获得更多 CPU 份额。exclusive_cpu_cores与exclusive_cpu_percent这两个参数定义资源组的 CPU 硬隔离v3.3.5 起包含两层含义独占Exclusive为该资源组预留指定数量的 CPU 核即使空闲其他组也不可使用。配额Quota限制该资源组只能使用这些预留核不能占用其他组的可用 CPU 资源。两种设置方式二选一exclusive_cpu_cores直接设置预留核数取值范围 (0,min_be_cpu_cores - 1]仅在大于 0 时生效。exclusive_cpu_percentv4.1 起支持以百分比形式设置预留核数取值范围 [0, 100]仅在大于 0 时生效。若min_be_cpu_cores * exclusive_cpu_percent / 100 1系统会报错。运行时每个 BE 会将exclusive_cpu_percent按自身核数换算为实际核数exclusive_cpu_cores be_cpu_cores * exclusive_cpu_percent / 100。要点说明设置了exclusive_cpu_cores/exclusive_cpu_percent大于 0的资源组称为Exclusive Resource Group独占资源组分配给它的核称为Exclusive Cores独占核其他组称为Shared Resource Group共享资源组运行在Shared Cores共享核上。所有独占资源组的exclusive_cpu_cores总和不能超过min_be_cpu_cores - 1若使用exclusive_cpu_percent系统先按min_be_cpu_cores * exclusive_cpu_percent / 100换算成核数再求和。上限预留至少 1 个共享核。独占资源组在自己预留的独占核上运行无需通过cpu_weight/cpu_weight_percent争取 CPU 时间。是否允许共享资源组在独占资源组空闲时借用独占核由 BE 配置enable_resource_group_cpu_borrowing控制设为true默认值时允许借用。该配置可动态修改UPDATE information_schema.be_configs SET VALUE false WHERE NAME enable_resource_group_cpu_borrowing;在 BE 端线程池管理器PipelineExecutorSetManager见 pipeline_executor_set_manager.h直接接收borrowed_cpuids参数并维护enable_resource_group_cpu_borrowing开关运行在借用核上的任务需要“让位”yield给独占核的属主资源组新到达的任务从而保证独占组的核心不受影响。thrift 协议层见 WorkGroup.thrift中定义了exclusive_cpu_cores、cpu_weight_percent、exclusive_cpu_percent等字段用于 FE 与 BE 之间同步资源组定义。说明作用域CPU 与内存资源参数均以单个 BE 节点为作用域生效。typev3.3.5 起已废弃v3.3.5 之前StarRocks 允许把资源组的type设置为short_query该参数现已被exclusive_cpu_cores取代。升级到 v3.3.5 后系统会自动把此类资源组转换为 Exclusive Resource Group转换后exclusive_cpu_cores的值等于原cpu_weight。FE 端 ResourceGroup.java 中保留了此兼容逻辑short_query类型沿用cpu_weight作为独占核数。内存资源参数mem_limit指定资源组在当前 BE 节点上可用的查询内存query pool百分比取值范围 (0, 1]创建资源组时为必填项。mem_poolv4.0 起支持。指定共享内存池标识。具有相同mem_pool标识的资源组共享一个内存池共同受mem_limit约束若未指定资源组归入default_mem_pool其内存使用仅受自身mem_limit限制。所有共享同一mem_pool的资源组必须配置相同的mem_limit。例如将两个资源组的总内存消耗共同限制在 50%CREATE RESOURCE GROUP rg1 TO (dbdb1) WITH ( mem_limit 50%, mem_pool shared_pool ); CREATE RESOURCE GROUP rg2 TO (dbdb1) WITH ( mem_limit 50%, mem_pool shared_pool );spill_mem_limit_threshold定义触发落盘spill to disk的内存使用阈值取值范围 (0, 1]默认 1 表示不生效。v3.1.7 引入。BE 端构造WorkGroup时会据此计算_spill_mem_limit_bytes _spill_mem_limit_threshold * _memory_limit_bytes见 work_group.cpp。启用自动落盘spill_mode为auto但未启用资源组时当查询内存使用超过query_mem_limit的 80% 时系统将中间结果落盘。启用资源组时满足以下任一条件即触发落盘组内所有查询的内存总量超过当前 BE 内存上限 * mem_limit * spill_mem_limit_threshold当前查询的内存使用超过query_mem_limit的 80%。查询并发参数concurrency_limit定义资源组内最大并发查询数用于防止系统过载。仅在大于 0 时生效默认 0。mem_used_pct_limit定义该资源组在 BE 节点上的内存使用百分比上限超过后该资源组被视为过载overloaded。取值范围 [0, 1]仅在大于 0 时生效默认 0。若资源组使用共享mem_pool非default_mem_pool则按该 BE 上池级别的内存使用与上限进行评估。该参数仅对资源组级查询队列生效且需要全局会话变量enable_group_level_query_queue为true它仅在 FE 配置项enable_query_queue_v2为false时可用。大查询资源参数以下参数用于为大型查询单独配置资源上限均在大于 0 时生效默认 0big_query_cpu_second_limit大查询任务在每个 BE 节点上可用的最大 CPU 时间秒并行任务的真实 CPU 时间累加计算。big_query_scan_rows_limit大查询任务在每个 BE 节点上可扫描的最大行数。big_query_mem_limit大查询任务在每个 BE 节点上可使用的最大内存字节。注意当资源组中的查询超过上述大查询限制时查询会被终止并报错。你也可以在 FE 节点fe.audit.log的ErrorCode列查看错误信息。BE 端为每个资源组维护了WorkGroupQueryStatscpu_runtime_ns、scan_rows、scan_rows_limit见 work_group.h用于在运行时累计 CPU 时间与扫描行数并触发大查询限制。隔离计算资源实操手册启用资源组使用资源组前需确保集群已启用 Pipeline Engine-- 在当前会话启用 Pipeline Engine。 SET enable_pipeline_engine true; -- 全局启用 Pipeline Engine。 SET GLOBAL enable_pipeline_engine true;注意从 v3.1.0 起Resource Group 默认启用会话变量enable_resource_group已废弃。创建资源组与分类器CREATE RESOURCE GROUP用于创建资源组、关联 classifier 并分配计算资源需要 SYSTEM 级 CREATE RESOURCE GROUP 权限可通过 GRANT 授予。完整语法参见 CREATE_RESOURCE_GROUP.mdCREATE RESOURCE GROUP group_name TO ( userstring, rolestring, query_type in (select), source_ipcidr ) -- 创建 classifier。若创建多个 classifier用逗号 (,) 分隔。 WITH ( { cpu_weight | exclusive_cpu_cores } INT, mem_limit m%, concurrency_limit INT, type str -- 资源组类型取值 normal。 );示例一创建共享资源组rg1附带多个 classifier并配置大查询限制CREATE RESOURCE GROUP rg1 TO (userrg1_user1, rolerg1_role1, query_type in (select), source_ip192.168.x.x/24), (userrg1_user2, query_type in (select), source_ip192.168.x.x/24), (userrg1_user3, source_ip192.168.x.x/24), (userrg1_user4), (dbdb1) WITH ( cpu_weight 10, mem_limit 20%, big_query_cpu_second_limit 100, big_query_scan_rows_limit 100000, big_query_mem_limit 1073741824 );示例二创建独占资源组rg2通过exclusive_cpu_cores预留 10 个 CPU 核CREATE RESOURCE GROUP rg2 TO (userrg1_user5, rolerg1_role5, query_type in (select), source_ip192.168.x.x/24), (userrg1_user6, query_type in (select), source_ip192.168.x.x/24), (userrg1_user7, source_ip192.168.x.x/24), (userrg1_user8), (dbdb2) WITH (exclusive_cpu_cores 10, mem_limit 20%, type normal, big_query_cpu_second_limit 100, big_query_scan_rows_limit 100000, big_query_mem_limit 1073741824 );为当前会话指定资源组可选你可以为当前会话直接指定资源组包括default_wg和default_mv_wgSET resource_group group_name;查看资源组与分类器查看所有资源组与分类器SHOW RESOURCE GROUPS ALL;查看当前登录用户可见的资源组与分类器SHOW RESOURCE GROUPS;查看指定资源组及其分类器SHOW RESOURCE GROUP group_name;示例输出mysql SHOW RESOURCE GROUPS ALL; --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | name | id | cpu_weight | exclusive_cpu_cores | mem_limit | big_query_cpu_second_limit | big_query_scan_rows_limit | big_query_mem_limit | concurrency_limit | spill_mem_limit_threshold | classifiers | mem_used_pct_limit | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | default_mv_wg | 3 | 1 | 0 | 80.0% | 0 | 0 | 0 | null | 80% | (id0, weight0.0) | null | | default_wg | 2 | 1 | 0 | 100.0% | 0 | 0 | 0 | null | 100% | (id0, weight0.0) | null | | rge1 | 15015 | 0 | 6 | 90.0% | 0 | 0 | 0 | null | 100% | (id15016, weight1.0, userrg1_user) | null | | rgs1 | 15017 | 8 | 0 | 90.0% | 0 | 0 | 0 | null | 100% | (id15018, weight1.0, userrgs1_user) | null | | rgs2 | 15019 | 8 | 0 | 90.0% | 0 | 0 | 0 | null | 100% | (id15020, weight1.0, userrgs2_user) | null | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------注意上例中weight表示匹配度。如需查看资源组的全部字段含已废弃字段如type、max_cpu_cores可在上述三条命令中加入关键字VERBOSESHOW VERBOSE RESOURCE GROUPS ALL; SHOW VERBOSE RESOURCE GROUPS; SHOW VERBOSE RESOURCE GROUP group_name;管理资源组与分类器修改已有资源组的资源配额ALTER RESOURCE GROUP group_name WITH ( cpu_core_limit INT, mem_limit m% );提示语法细节与全部可用参数可参考 ALTER_RESOURCE_GROUP.md。删除资源组DROP RESOURCE GROUP group_name;为资源组添加 classifierALTER RESOURCE GROUP group_name ADD (userstring, rolestring, query_type in (select), source_ipcidr);按 classifier ID 删除指定 classifierALTER RESOURCE GROUP group_name DROP (CLASSIFIER_ID_1, CLASSIFIER_ID_2, ...);删除资源组的所有 classifierALTER RESOURCE GROUP group_name DROP ALL;观察资源组查询归属、监控指标与线程信息查看查询所属的资源组未执行的查询通过EXPLAIN VERBOSE query返回的RESOURCE GROUP字段查看。运行中的查询通过SHOW PROC /current_queries和SHOW PROC /global_current_queries返回的ResourceGroup字段查看。已完成的查询查看 FE 节点fe.audit.log中的ResourceGroup字段。若查询不受资源组管理该列值为空字符串若查询受资源组管理但未匹配任何 classifier则被分配到默认资源组default_wg。监控资源组你可以为资源组配置监控与告警。以下 FE 与 BE 指标均带有name标签标识其对应的资源组。FE 指标以下 FE 指标仅统计当前 FE 节点内的数据Metric单位类型说明starrocks_fe_query_resource_groupCountInstantaneous该资源组历史运行的查询数含当前运行中。starrocks_fe_query_resource_group_latencymsInstantaneous该资源组的查询延迟百分位。标签type表示具体百分位包括mean、75_quantile、95_quantile、98_quantile、99_quantile、999_quantile。starrocks_fe_query_resource_group_errCountInstantaneous该资源组中发生错误的查询数。starrocks_fe_resource_group_query_queue_totalCountInstantaneous该资源组历史排队查询总数含当前运行中。v3.1.4 起支持仅在启用查询队列时有效。starrocks_fe_resource_group_query_queue_pendingCountInstantaneous该资源组当前队列中的查询数。v3.1.4 起支持仅在启用查询队列时有效。starrocks_fe_resource_group_query_queue_timeoutCountInstantaneous该资源组中在队列中等待超时的查询数。v3.1.4 起支持仅在启用查询队列时有效。BE 指标Metric单位类型说明resource_group_running_queriesCountInstantaneous该资源组当前正在运行的查询数。resource_group_total_queriesCountInstantaneous该资源组历史运行的查询数含当前运行中。resource_group_bigquery_countCountInstantaneous该资源组中触发大查询限制的查询数。resource_group_concurrency_overflow_countCountInstantaneous该资源组中触发concurrency_limit限制的查询数。resource_group_mem_limit_bytesBytesInstantaneous该资源组的内存上限。resource_group_mem_inuse_bytesBytesInstantaneous该资源组当前已使用的内存。resource_group_cpu_limit_ratioPercentageInstantaneous该资源组的cpu_core_limit占所有资源组cpu_core_limit总和的比例。resource_group_inuse_cpu_coresCountAverage该资源组当前使用的 CPU 核数估计值近似值为相邻两次指标采集统计的平均值。v3.1.4 起支持。resource_group_cpu_use_ratioPercentageAverage已废弃该资源组使用的 Pipeline 线程时间片占所有资源组 Pipeline 线程时间片总数的比例相邻两次采集的平均值。resource_group_connector_scan_use_ratioPercentageAverage已废弃该资源组使用的外表 Scan 线程时间片占所有资源组 Pipeline 线程时间片总数的比例相邻两次采集的平均值。resource_group_scan_use_ratioPercentageAverage已废弃该资源组使用的内表 Scan 线程时间片占所有资源组 Pipeline 线程时间片总数的比例相邻两次采集的平均值。查看资源组使用信息v3.1.4 起可用 SQL 语句 SHOW USAGE RESOURCE GROUPS 查看各资源组在各 BE 上的使用情况该操作无需权限。字段说明Name资源组名称。Id资源组 ID。BackendBE 的 IP 或 FQDN。BEInUseCpuCores该资源组在该 BE 上当前使用的 CPU 核数近似估计值。BEInUseMemBytes该资源组在该 BE 上当前使用的内存字节数。BERunningQueries该资源组在该 BE 上仍在运行的查询数。注意事项BE 会以report_resource_usage_interval_ms指定的间隔默认 1 秒定期向 Leader FE 上报该资源使用信息。结果只显示BEInUseCpuCores/BEInUseMemBytes/BERunningQueries中至少一项为正数的行即资源组在某 BE 上实际占用资源时才展示。示例MySQL [(none)] SHOW USAGE RESOURCE GROUPS; ------------------------------------------------------------------------------- | Name | Id | Backend | BEInUseCpuCores | BEInUseMemBytes | BERunningQueries | ------------------------------------------------------------------------------- | default_wg | 0 | 127.0.0.1 | 0.100 | 1 | 5 | ------------------------------------------------------------------------------- | default_wg | 0 | 127.0.0.2 | 0.200 | 2 | 6 | ------------------------------------------------------------------------------- | wg1 | 0 | 127.0.0.1 | 0.300 | 3 | 7 | ------------------------------------------------------------------------------- | wg2 | 0 | 127.0.0.1 | 0.400 | 4 | 8 | -------------------------------------------------------------------------------查看独占与共享资源组的线程信息查询执行主要涉及三个线程池pip_exec、pip_scan和pip_con_scan。Exclusive Resource Group运行在专属线程池中并绑定到分配给它的 Exclusive Cores。Shared Resource Group运行在共享线程池中并绑定到剩余的 Shared Cores。这三个线程池中的线程命名遵循{ pip_exec | pip_scan | pip_con_scan }_{ com | resource_group_id }规则其中com表示共享线程池resource_group_id表示独占资源组的 ID。可通过系统视图information_schema.be_threads查看每个 BE 线程绑定的 CPU 信息其中BE_ID、NAME、BOUND_CPUS分别表示 BE 的 ID、线程名与绑定的 CPU 核数select * from information_schema.be_threads where name like %pip_exec%; select * from information_schema.be_threads where name like %pip_scan%; select * from information_schema.be_threads where name like %pip_con_scan%;示例select BE_ID, NAME, FINISHED_TASKS, BOUND_CPUS from information_schema.be_threads where name like %pip_exec_com% and be_id 10223; ------------------------------------------------- | BE_ID | NAME | FINISHED_TASKS | BOUND_CPUS | ------------------------------------------------- | 10223 | pip_exec_com | 2091295 | 10 | | 10223 | pip_exec_com | 2088025 | 10 | | 10223 | pip_exec_com | 1637603 | 6 | | 10223 | pip_exec_com | 1641260 | 6 | | 10223 | pip_exec_com | 1634197 | 6 | | 10223 | pip_exec_com | 1633804 | 6 | | 10223 | pip_exec_com | 1638184 | 6 | | 10223 | pip_exec_com | 1636374 | 6 | | 10223 | pip_exec_com | 2095951 | 10 | | 10223 | pip_exec_com | 2095248 | 10 | | 10223 | pip_exec_com | 2098745 | 10 | | 10223 | pip_exec_com | 2085338 | 10 | | 10223 | pip_exec_com | 2101221 | 10 | | 10223 | pip_exec_com | 2093901 | 10 | | 10223 | pip_exec_com | 2092364 | 10 | | 10223 | pip_exec_com | 2091366 | 10 | -------------------------------------------------源码视角资源组在 BE 端如何生效从源码结构看资源组的运行时实现集中在 BE 端的be/src/compute_env/workgroup/目录与 FE 端的com.starrocks.catalog.ResourceGroup*类中定义与调度状态work_group.h 定义了WorkGroup及其调度实体WorkGroupSchedEntity/WorkGroupSchedState。其中WorkGroupSchedState通过维护vruntime虚拟运行时间实现按权重的公平调度runtime_ns vruntime_ns * cpu_weight调度器据此决定各资源组任务的执行顺序与 CPU 份额这正对应前文cpu_weight的“相对份额”语义。内存阈值换算work_group.cpp 在构造WorkGroup时执行_spill_mem_limit_bytes _spill_mem_limit_threshold * _memory_limit_bytes将spill_mem_limit_threshold百分比换算为字节级阈值同时从 thrift 对象twg中读取spill_mem_limit_threshold等字段完成参数装载。大查询统计WorkGroupQueryStats在运行时累计cpu_runtime_ns与scan_rows用于对big_query_cpu_second_limit/big_query_scan_rows_limit/big_query_mem_limit的实时判定与超限终止。CPU 硬隔离与线程池绑定pipeline_executor_set_manager.h 负责为独占资源组创建专属执行器集合并绑定 Exclusive Cores同时通过enable_resource_group_cpu_borrowing与borrowed_cpuids机制支持共享组在空闲时借用独占核并在属主任务到达时让位。FE 端参数与兼容ResourceGroup.java 定义了全部参数常量cpu_weight、cpu_weight_percent、exclusive_cpu_cores、exclusive_cpu_percent、spill_mem_limit_threshold、mem_used_pct_limit等与内置组default_wg/default_mv_wg并兼容 v3.3.5 前的short_query类型自动转换ResourceGroupClassifier.java 则实现了 classifier 匹配度weight()的计算。相关参考资源组 SQL 语句参考CREATE_RESOURCE_GROUP.md、ALTER_RESOURCE_GROUP.md、DROP_RESOURCE_GROUP.md、SHOW_RESOURCE_GROUP.md、SHOW_USAGE_RESOURCE_GROUPS.md相邻主题查询队列 Query Queues、落盘 Spill to Disk、内存管理 Memory Management、监控与告警【免费下载链接】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),仅供参考
返回列表