AnalyticDB PostgreSQL 6.0版提供的资源组管理功能,支持绑定数据库账号到资源组,并为资源组内的查询设置最大并发事务数、CPU使用率和内存占比等,可以使资源变得弹性,获得更高的查询速度。
版本限制
仅内核版本为v6.6.1.0及以上的AnalyticDB PostgreSQL 6.0版实例支持资源组管理功能。如何查看实例内核版本,请参见查看内核小版本。
AnalyticDB PostgreSQL 7.0版及AnalyticDB PostgreSQL版Serverless模式实例暂不支持资源组管理。
资源组(Resource Group)介绍
AnalyticDB PostgreSQL 6.0版支持使用资源组(Resource Group)对数据库进行资源管理,相对于使用资源队列(Resource Queue)管理资源的方式具有更精细化、管理资源类别更全面的优势。
资源组管理与资源队列管理不能同时使用,仅能使用一个,开启资源组管理之后资源队列自动失效。关于资源队列的更多介绍,请参见使用Resource Queue(资源队列)进行负载管理。
在使用资源组进行资源管理时,可以为资源组绑定一个或多个数据库账号,并针对每个资源组单独设置其特定的CPU、内存和并发限制等,来管理各个资源组绑定账号提交的查询,但SET、RESET和SHOW命令不受资源组配置限制。
每个资源组支持配置的资源类别如下:
参数 | 描述 | 取值 |
CONCURRENCY | 资源组内允许的最大并发事务数(并行运行的查询数)。当进入系统的查询达到所属资源组的并发数上限后,该资源组新进入的查询需要进行等待。并发限制排队时遵循先进先出的原则。 | 默认值:50,非必填。 |
CPU_RATE_LIMIT | CPU_RATE_LIMIT用于定义在多个资源组竞争CPU资源时的比例,该参数确定了一个资源组可以从空闲资源组获取的CPU资源的最大比例,如果某资源组设置了较高的CPU_RATE_LIMIT值,那么在竞争CPU时,该资源组将获得较多的CPU时间片,从而更多的执行任务,反之则限制其对CPU资源的使用。同时,资源管理功能支持CPU抢占,如果一个资源组在执行任务而其余资源组没有任务时,那么这个资源组就会占有全部CPU资源。 | 无默认值,必填; 取值范围:0-100; 各个资源组的取值之和不超过100。 |
MEMORY_LIMIT | 资源组内存占总内存的百分比,可进行全局共享内存。所有资源组(包括默认admin_group和default_group)配置的内存百分比总和为分配给各个资源组的预留部分。如果此总和小于100,则数据库会将剩余未预留的内存分配给资源组全局共享内存池。数据库以先到先得的方式为事务分配资源组全局共享内存。 当用户为全局共享内存池保留一些未分配的内存(例如10~20%)时,数据库会更有效地使用资源组内存。全局共享内存的可用性还有助于缓解内存消耗或不可预测的查询失败。 | 默认值:0,非必填; 取值范围:0-100; 各个资源组的取值之和不超过100。 |
MEMORY_SHARED_QUOTA | MEMORY_SHARED_QUOTA参数定义了资源组内部共享内存占所有内存的比例。资源组在共享内存中可以进行数据交换和共享,以便实现进程间通信和协作。如果MEMORY_SHARED_QUOTA参数设置为100%,那么资源组内部的所有内存都将被视为共享内存,所有任务都可以使用这块内存;如果MEMORY_SHARED_QUOTA参数值小于100%,系统将根据设定的比例将内存划分为固定部分和共享部分,固定部分是每个任务独占的内存,而共享部分是所有任务共享的内存空间。 | 默认值:80,非必填; 取值范围:0-100。 |
MEMORY_SPILL_RATIO | 内存敏感事务的内存使用阈值(算子落盘阈值)。默认值:0,取值范围:0~100。 在云原生数据仓库 AnalyticDB PostgreSQL 版中内存密集型算子执行过程可能会产生大量中间临时结果,会需要临时溢出到磁盘。通过调整MEMORY_SPILL_RATIO来增加或减少溢出。因此只有需要产生大量中间临时结果的操作类型受此控制。仍有很多操作是无法溢出到磁盘上的,这些操作会继续占用内存,即使内存使用超过上限值,内存仍有可能增加。
| 默认值:0; 取值范围:0-100。 |
当数据库查询同时满足以下条件时,对应查询将由于内存不足导致失败:
没有可用的组内共享内存。
没有可用的全局共享内存。
该事务请求额外的内存。
开启资源组管理
仅支持通过控制台操作。
开启资源组管理,即切换资源管理模式由资源队列变为资源组,切换过程中会重启实例,并存在5分钟左右实例不可用,请合理规划时间,避免您的业务受到影响。
- 登录云原生数据仓库AnalyticDB PostgreSQL版控制台。
- 在控制台左上角,选择实例所在地域。
- 找到目标实例,单击实例ID。
在左侧导航栏,单击工作负载管理。
单击开启资源组管理,并在弹窗中单击确定。
开启资源组管理功能后,系统会自动创建一个default_group资源组。在
页面的资源组监控页签可以查看所有资源组监控信息,以及各个segment的CPU和内存使用等。新增资源组
开启资源组管理后,您可以通过控制台或后台执行SQL的方式新增资源组。
云原生数据仓库 AnalyticDB PostgreSQL 版内部预留了admin_group资源组用于管理数据库本身的系统负载,该资源组在控制台不可见。
一个实例中所有资源组的CPU总和与Memory总和均为100,admin_group资源组预留的CPU和Memory为10,因此其他资源组(新增资源组和default_group资源组)的CPU值总和与Memory值总和不能超过90。
控制台操作
在工作负载管理页面,单击新增资源组。
按照资源组(Resource Group)介绍章节中的参数限制填写参数,并单击保存新增。
SQL操作
CREATE RESOURCE GROUP <group_name> WITH (group_attribute=value [, ... ])
其中group_attribute包含:
CPU_RATE_LIMIT=integer
MEMORY_LIMIT=integer
[ CONCURRENCY=integer ]
[ MEMORY_SHARED_QUOTA=integer ]
[ MEMORY_SPILL_RATIO=integer ]
查看资源组配置
新增资源组后,您可以通过控制台或后台执行SQL的方式查看资源组配置。
控制台操作
在工作负载管理页面的资源组配置区域,查看实例中所有资源组配置。
SQL操作
使用如下SQL查看资源组配置:
SELECT * FROM gp_toolkit.gp_resgroup_config;
修改资源组配置
您可以通过控制台或后台执行SQL的方式修改资源组配置。
控制台操作
在工作负载管理页面,单击资源组列表上方的编辑。
根据业务需求,修改资源组的并发数、CPU使用或内存百分比等,并单击保存。
SQL操作
仅数据库初始账号支持修改除admin_group资源组外其他所有资源组配置,普通账号无法操作。
ALTER RESOURCE GROUP <group_name>
SET CONCURRENCY|CPU_RATE_LIMIT|MEMORY_LIMIT|MEMORY_SHARED_QUOTA|MEMORY_SPILL_RATIO <value>;
示例如下:
修改
test
资源组的并发数为30。ALTER RESOURCE GROUP test SET CONCURRENCY 20;
修改
test_pg1
资源组的CPU使用率为20。ALTER RESOURCE GROUP test_pg1 SET CPU_RATE_LIMIT 20;
绑定数据库账号
您可以通过控制台或后台执行SQL的方式为资源组绑定数据库账号。如何创建数据库账号,请参见创建数据库账号。
每个资源组可以绑定一个或多个数据库账号,但每个账号只能绑定一个资源组。
数据初始账号默认绑定default_group资源组。
没有绑定资源组的数据库账号,会默认绑定default_group资源组。
控制台操作
在工作负载管理页面的分配资源组区域,单击目标资源组卡片上的按钮。
选择需要角色(数据库账号),并单击确定。
SQL操作
仅数据库初始账号支持绑定资源组,普通账号无法操作。
将数据库账号绑定到指定资源组,语法如下:
为已有数据库账号绑定资源组。
ALTER ROLE <user_name> RESOURCE GROUP <group_name>;
新建数据库账号时绑定资源组。
CREATE ROLE <user_name> WITH LOGIN RESOURCE GROUP <group_name>;
删除资源组
defult_group资源组不能被删除。
控制台操作
在工作负载管理页面,单击目标资源组操作列的删除,并单击确定。
SQL操作
仅数据库初始账号支持删除资源组,数据库普通账号无法操作。
DROP RESOURCE GROUP <group_name>;
关闭资源组管理
如果您需要将资源管理模式切换为资源队列,可在关闭资源组管理。
仅支持在控制台关闭资源组管理。在工作负载管理页面,单击关闭资源组管理。
- 本页导读 (1)