使用 Resource Groups 管理资源
Resource Group(资源组)可用来管理和保护 Apache Cloudberry 中 CPU、内存、并发事务限制和磁盘 I/O 的资源分配。定义资源组后,可将该组分配给一个或多个 Apache Cloudberry 用户角色(Role),或分配给外部组件(如 PL/Container),以控制其使用的资源。
一个资源组所定义的限制条件适用于所有被分配该资源组的用户角色。例如,资源组定义的最大内存使用量限制会应用于所有该组用户所提交的运行事务上。
Apache Cloudberry 使用基于 Linux 的控制组来管理 CPU 资源,并使用 Runaway Detector 进行统计、跟踪和内存管理。
理解角色和组件资源组
Apache Cloudberry 支持两种类型的资源组:用于管理角色资源的组,及用于管理外部组件(如 PL/Container)资源的组。
资源组的最常见应用是管理不同角色在 Apache Cloudberry 集群中可以并发运行的活动查询数量。也可以用来管理 Apache Cloudberry 为每个查询分配的 CPU、内存资源和磁盘 I/O 的数量。
当用户运行查询时,Apache Cloudberry 会根据为资源组定义的一组限制评估该查询。如果该组的资源限制尚未达到,并且该查询不会导致该组超过并发事务限制,Apache Cloudberry 会立即运行该查询。如果这些条件不满足,Apache Cloudberry 会将查询进行队列排序。例如,如果资源组的最大并发事务数已经达到,后续查询将被排序等待,必须等待其他查询完成后才能运行。当资源组的并发性和内存限制调整到足够大的值时,Apache Cloudberry 也可能运行待处理的查询。
在角色的资源组内,事务是按照先进先出 (First-in-first-out) 原则进行评估的。Apache Cloudberry 定期评估系统的活动工作负载,根据需要重新分配资源,并启动作业或将其放入队列。
您还可以使用资源组来管理外部组件(如 PL/Container)的 CPU 和内存资源。外部组件的资源组使用 Linux cgroups 来管理该组件的总 CPU 资源。
资源组属性和限制
当创建资源组时,需提供一组参数,以确定该组可用的 CPU 和内存资源。下表列出了资源组的可用限制参数:
限制类型 | 描述 | 范围 | 默认值 |
---|---|---|---|
CONCURRENCY | 资源组中允许的最大并发事务数,包括活动和空闲事务。 | [0,max_connections] | 20 |
CPU_MAX_PERCENT | 组可使 用的 CPU 资源的最大百分比。 | [1,100] | -1(未设置) |
CPU_WEIGHT | 资源组的调度优先级。 | [1,500] | 100 |
CPUSET | 为该资源组保留的特定 CPU 逻辑核(或超线程中的逻辑线程)。 | 取决于系统核配置 | -1 |
IO_LIMIT | 读取/写入磁盘 I/O 吞吐量的最大限制,以及每秒的最大读/写 I/O 操作。按表空间设置值。 | [2,4294967295 或 max ] | -1 |
MEMORY_LIMIT | 为资源组指定的内存限制值。 | Integar (MB) | -1(未设置,使用 statement_mem 作为单个查询的内存限制) |
MIN_COST | 查询计划被包含在资源组中的最小成本。 | Integar | 0 |
对于 SET
、 RESET
和 SHOW
命令,不强制执行资源限制。