关于 YMatrix
部署数据库
使用数据库
管理集群
最佳实践
高级功能
高级查询
资源组
联邦查询
Grafana 监控
备份恢复
灾难恢复
管理手册
性能调优
故障诊断
工具指南
系统配置参数
SQL 参考
下表列出了可配置的资源组参数
| 参数 | 描述 | 取值范围 | 默认参数 |
|---|---|---|---|
| CONCURRENCY | 资源组中允许的最大并发事务数,包括活动事务和空闲事务。 | [0 - 最大连接数] | 20 |
| CPU_MAX_PERCENT | 配置资源组可以使用的CPU资源的最大百分比。 | [1 - 100] | -1 (未启用) |
| CPU_WEIGHT | 配置资源组的调度优先级。 | [1 - 500] | 100 |
| CPUSET | 为该资源组保留的特定CPU逻辑核心(或超线程中的逻辑线程)。 | 依赖系统核心配置 | -1 |
| MEMORY_QUOTA | 为资源组指定内存限制值。 | 整数(MB) | -1 (未启用,使用 statement_mem 作为单次查询的内存限制) |
| MIN_COST | 一个查询计划被包含在资源组中的最小成本。 | 整数 | 0 |
| IO_LIMIT | 对设备 I/O 使用情况进行设置,以管理读写操作的最大吞吐量和每秒最大读写操作数。按表空间设置该值。 | [2 - 4294967295 or max] |
-1 |
注意!
针对SET/RESET/SHOW命令,资源组不会生效
当用户运行查询时,YMatrix 会根据为资源组定义的一组限制来评估查询状态。
CONCURRENCY 控制资源组允许的最大并发事务数。默认限制值为 20,值为 0 时表示此资源组不允许运行查询。
如果资源限制尚未达到且查询不会导致超出资源组的并发事务限制,YMatrix 会立即运行查询。如果已达到资源组的最大并发事务数,YMatrix 会将资源组达到其 CONCURRENCY 限制后提交的任何事务排队,并且等到其他查询完成后进行运行。
gp_resource_group_queuing_timeout 可以用来指定队列中事务取消前的等待时间。默认为 0,意味着事务无限期排队。
绕过资源组分配限制
gp_resource_group_bypass 用于启用或禁用资源组的并发事务限制,使查询可以立即执行。设为 true,查询就会跳过资源组的并发限制。此时查询的内存配额按照 statement_mem 进行分配,如果内存不足,查询就会失败。此参数只能在单个会话中设置,不能在事务或函数内设置。gp_resource_group_bypass_catalog_query 用于系统表查询是否跳过资源组的资源限制。默认为 true。适用于类似数据库的图形用户界面(GUI)客户端运行目录查询以获取元数据的情况。其资源分配在资源组之外,内存配额为每个查询的 statement_mem。gp_resource_group_bypass_direct_dispatch 用于控制直接分发查询(direct dispatch queries)是否跳过资源组的限制。将其设为 true,查询时将不再受其所属资源组分配的 CPU 或内存限制的约束,从而可以立即执行。此时查询的内存配额按照 statement_mem 进行分配,如果内存不足,查询就会失败。此参数只能在单个会话中设置,不能在事务或函数内设置。YMatrix 通过以下两种方式分配 CPU 资源:
在同一群集上可以为不同的资源组配置不同的 CPU 资源分配模式,同一资源组只能使用一种 CPU 资源分配模式。 运行时也可更改资源组的 CPU 资源分配模式。
可通过 gp_resource_group_cpu_limit 来确定要分配给每个 segment 节点的资源组的系统 CPU 资源的最大百分比。
CPUSET 用于设置要为资源组保留的 CPU 核心。当为资源组配置 CPUSET 时,YMatrix 会停用该组的 CPU_MAX_PERCENT 和 CPU_WEIGHT,并将其值设置为 -1。
使用注意:
'1;1,3-4' 在主节点上使用 core1,在 segment 上使用core 1、core 3 和 core 4。CPU_MAX_PERCENT 用于设置 segment 可以使用的 CPU 资源上线,比如设置为 40,表明最多可以使用可用 CPU 资源的 40%。当资源组中的任务处于空闲状态且未使用任何 CPU 时间时,剩余时间将被收集到未使用 CPU 周期的全局池中,其他资源组可以从此池中借用 CPU 周期。
CPU_WEIGHT 用于分配当前组的调度优先级。默认值是 100,取值范围是 1 到 500。该值指定了资源组中任务可获得的相对份额的 CPU 时间。
使用注意:
CPU_MAX_PERCENT 值都设置为 100)时,第一个资源组将获得 50% 的总 CPU 时间,另外两个组各获得 25%。CPU_MAX_PERCENT 设置为 100)的组,则第一个组只能使用 33% 的 CPU,剩下的组分别获得 16.5%、16.5% 和 33%。配置说明
| Group Name | CONCURRENCY | CPU_MAX_PERCENT | CPU_WEIGHT |
|---|---|---|---|
| default_group | 20 | 50 | 10 |
| admin_group 10 | 70 | 30 | |
| system_group | 10 | 30 | 10 |
| test | 10 | 10 | 10 |
default_group)中角色根据 CPU_WEIGHT 参数所确定的可用 CPU 百分比为 10/(10+30+10+10)=16%。这意味着在系统负载较高时,它们至少可以使用 16% 的CPU资源。当系统存在空闲 CPU 资源时,它们可以使用更多资源,因为硬限制(由 CPU_MAX_PERCENT 设置)为50%。admin_group)中角色在系统负载较高时的可用 CPU 百分比为 30/(10+30+10+10)=50%。当系统有空闲 CPU 资源时,它们可以使用的资源上限由硬限制 70% 决定。test)中角色的可用 CPU 百分比为 10/(10+30+10+10)=16%。然而,由于硬限制(由CPU_MAX_PERCENT 确定)为 10%。因此即使在系统空闲时,它们也只能使用最多 10% 的资源。MEMORY_QUOTA 表示 Segment 上为该资源组保留的最大内存量。这是查询执行期间 Segment 上所有查询的工作进程可以消耗的总内存量。分配给某个查询的内存量是该组内存限制除以该组并发限制:MEMORY_QUOTA / CONCURRENCY。
如果一个查询需要更大内存,可以使用 gp_resgroup_memory_query_fixed_mem 在会话级别为查询设置所需内存量,该配置可覆盖并超过资源组分配的内存。
使用注意
gp_resgroup_memory_query_fixed_mem,会使用设置值来绕过资源组设置。gp_resgroup_memory_query_fixed_mem,会使用 MEMORY_QUOTA / CONCURRENCY 作为查询分配的内存量。MEMORY_QUOTA,则查询内存分配的值默认为 statement_mem。gp_workfile_limit_files_per_query 时,YMatrix 会生成内存不足 (OOM) 错误。配置示例
考虑一个名为 adhoc 的资源组,MEMORY_QUOTA 设置为 1.5 GB,CONCURRENCY 设置为 3。默认情况下,提交给该组的每个语句都分配 500MB 的内存。现在考虑以下一系列事件:
ADHOC_1 提交查询 Q1,覆盖 gp_resgroup_memory_query_fixed_mem 到800MB。Q1 语句被允许进入系统。ADHOC_2 提交查询 Q2,使用默认的 500MB。Q1 和 Q2 仍在运行的情况下,用户 ADHOC_3 提交查询 `Q3,使用默认的 500MB 。Q1 和 Q2 已经使用了该资源组 1500MB 中的 1300MB。但是,如果某些时段系统有足够的可用内存用于查询 Q3,Q3 则可以正常运行。ADHOC_4 提交查询 Q4,使用 gp_resgroup_memory_query_fixed_mem 设置为 700MB。
由于查询 Q4 绕过资源组限制,他会立即运行。特殊使用注意事项
gp_resource_group_bypass 或 gp_resource_group_bypass_catalog_query 设置配置参数以绕过资源组限制,则查询的内存限制值为 statement_mem。MEMORY_QUOTA / CONCURRENCY)< statement_mem 时,则使用 statement_mem 作为查询分配的固定内存量。statement_mem 的最大值上限为 max_statement_mem。MIN_COST 的查询语句,使用 statement_mem 作为内存配额。IO_LIMIT 限制分配给特定资源组查询的最大读写磁盘 I/O 吞吐量,以及每秒最大读写 I/O 操作数。确保高优先级资源组的使用,并避免磁盘带宽的过度使用。该参数的值需按表空间来进行设置。
注意!
IO_LIMIT仅 Cgroup v2 支持。
在进行磁盘 I/O 限制时,可通过以下参数进行配置:
* 为所有表空间设置限制。rbps 和 wbps 用于限制资源组中磁盘 I/O 的最大读写吞吐量,单位为 MB/s。默认值为 max,表示无限制。riops 和 wiops 用于限制资源组中每秒的最大读写 I/O 操作数。默认值为 max,表示无限制。 配置说明
如果未设置 IO_LIMIT 参数,则 rbps、wpbs、riops 和 wiops 的默认值将设置为 max,这意味着磁盘 I/O 无限制。如果仅设置了 IO_LIMIT 的部分值(如,rbps),则未设置的参数将默认为 max(在本例中,则为 wbps、riops、wiops 为默认值 `max)。