资源隔离
本文介绍如何使用资源隔离功能。
自 2.2 版本起,StarRocks 支持资源组管理,集群可以通过设置资源组(Resource Group)的方式限制查询对资源的消耗,实现多租户之间的资源隔离与合理利用。在 2.3 版本中,StarRocks 支持限制大查询,集群可以进一步控制大查询对资源的消耗,避免少数的大查询耗尽系统资源,进而影响系统稳定性。StarRocks 2.5 版本支持通过资源组对导入计算进行资源隔离,从而间接控制导入任务对集群资源的消耗。
通过资源隔离功能,您可以将 BE 节点的计算资源划分成若干个资源组,并且为每个资源组关联一个或多个分类器(Classifier)。根据在分类器中设置的条件,系统将匹配查询任务的对应信息。当您发起查询任务时,分类器会根据查询任务的相关信息进行匹配。其中匹配度最高的分类器才会生效,系统则会根据生效的分类器所属的资源组为查询任务分配资源。
在后续版本中,我们将会持续强化资源隔离功能。
资源隔离功能支持计划
内部表 | 外部表 | 大查询熔断 | Short query 资源组 | 导入计算资源隔离 | Schema Change 资源隔离 | INSERT 计算资源隔离 | |
---|---|---|---|---|---|---|---|
2.2 | √ | × | × | × | × | × | × |
2.3 | √ | √ | √ | √ | × | × | × |
2.4 | √ | √ | √ | √ | × | × | × |
2.5 | √ | √ | √ | √ | √ | × | √ |
基本概念
本小节介绍资源隔离功能相关的基本概念。
资源组
通过将 BE 节点划分为若干个资源组 (resource group),系统在执行相应资源组的查询任务时,会按照为该资源组划分的资源配额(CPU 及内存)分配查询资源。
您可以为资源组设置以下资源限制:
cpu_core_limit
:该资源组在当前 BE 节点可使用的 CPU 核数软上限,实际使用的 CPU 核数会根据节点资源空闲程度按比例弹性伸缩。取值为正整数。说明:例如,在 16 核的 BE 节点中设置三个资源组 rg1、rg2、rg3,
cpu_core_limit
分别设置为2
、6
、8
。当在该 BE 节点满载时,资源组 rg1、rg2、rg3 能分配到的 CPU 核数分别为 BE 节点总 CPU 核数 ×(2/16)= 2、 BE 节点总 CPU 核数 ×(6/16)= 6、BE 节点总 CPU 核数 ×(8/16)= 8。如果当前 BE 节点资源非满载,rg1、rg2 有负载,rg3 无负载,则 rg1、rg2 分配到的 CPU 核数分别为 BE 节点总 CPU 核数 ×(2/8)= 4、 BE 节点总 CPU 核数 ×(6/8)= 12。mem_limit
:该资源组在当前 BE 节点可使用于查询的内存(query_pool)占总内存的百分比(%)。取值范围为 (0,1)。说明:query_pool 的查看方式,参见 内存管理。
concurrency_limit
:资源组中并发查询数的上限,用以防止并发查询提交过多而导致的过载。只有大于 0 时才生效,默认值为 0。
在以上资源限制的基础上,您可以通过以下大查询限制进一步对资源组进行如下的配置:
big_query_cpu_second_limit
:大查询任务可以使用 CPU 的时间上限,其中的并行任务将累加 CPU 使用时间。单位为秒。只有大于 0 时才生效,默认值为 0。big_query_scan_rows_limit
:大查询任务可以扫描的行数上限。只有大于 0 时才生效,默认值为 0。big_query_mem_limit
:大查询任务可以使用的内存上限。单位为 Byte。只有大于 0 时才生效,默认值为 0。
说明
当资源组中运行的查询超过以上大查询限制时,查询将会终止,并返回错误。您也可以在 FE 节点 fe.audit.log 的
ErrorCode
列中查看错误信息。
资源组的类型 type
支持 short_query
与 normal
。
- 默认为
normal
资源组,无需通过type
参数指定。 - 当
short_query
资源组有查询正在运行时,当前 BE 节点会为其预留short_query.cpu_core_limit
的 CPU 资源,即所有normal
资源组的总 CPU 核数使用上限会被硬限制为 BE 节点核数 -short_query.cpu_core_limit
。 - 当
short_query
资源组没有查询正在运行时,所有normal
资源组的 CPU 核数没有硬限制。
注意
- 您最多只能创建一个
short_query
资源组。- StarRocks 不会硬限制
short_query
资源组的 CPU 资源。