#DBMS_RESOURCE_MANAGER
DBMS_RESOURCE_MANAGER包提供了一组资源管理的存储过程/函数,用于创建和删除资源计划、资源指令、资源映射及相关操作。
Note:
- 仅SYS用户可调用该高级包的存储过程/函数。
- 该高级包不适用于共享集群/分布式集群部署。
- 存算一体分布式集群部署下,该高级包的所有存储过程/函数只允许在CN节点上逐条调用。
该高级包的存储过程/函数适用对象如下:
| 作用域 | 相关子程序 | 适用对象 |
|---|---|---|
| 容器数据库全局资源管理 | CREATE_CDB_PLAN CREATE_CDB_PLAN_DIRECTIVE CREATE_CDB_PROFILE_DIRECTIVE SET_PDB_PROFILE UPDATE_CDB_DEFAULT_DIRECTIVE UPDATE_CDB_PLAN_DIRECTIVE UPDATE_CDB_PROFILE_DIRECTIVE DELETE_CDB_PLAN_DIRECTIVE DELETE_CDB_PROFILE_DIRECTIVE DELETE_CDB_PLAN | 仅可在单机部署的容器数据库中,直连根容器上执行 若为高可用部署,则需直连主根容器,且资源管理目前仅对主库生效 |
| 非容器数据库资源管理 容器数据库本地资源管理 | CREATE_CONSUMER_GROUP CREATE_PLAN CREATE_PLAN_DIRECTIVE SET_CONSUMER_GROUP_MAPPING UPDATE_PLAN_DIRECTIVE DELETE_CONSUMER_GROUP_MAPPING DELETE_PLAN_DIRECTIVE DELETE_PLAN DELETE_CONSUMER_GROUP | * 非容器数据库 * PDB(不包括种子容器) |
# CREATE_CDB_PLAN
DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(
PLAN IN VARCHAR(64),
COMMENT IN VARCHAR(2000) DEFAULT NULL);
该程序用于创建CDB资源计划,目前仅支持创建一级计划,不支持创建子计划。
在容器数据库中,系统包含默认资源计划DEFAULT_CDB_PLAN,其指令各项资源管理参数均为默认值且默认关联所有PDB。
| 参数 | 描述 |
|---|---|
| PLAN | CDB资源计划名,名称唯一且符合YashanDB的对象命名规范,允许使用系统保留关键字,但不满足双引号的通用规则 |
| COMMENT | 注释 |
示例(单机部署)
EXEC DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(
PLAN => 'RES_CDB_PLAN',
COMMENT => 'RESOURCE PLAN FOR CDB MANAGEMENT');
# CREATE_CDB_PLAN_DIRECTIVE
DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(
PLAN IN VARCHAR(64),
PLUGGABLE_DATABASE IN VARCHAR(64),
COMMENT IN VARCHAR(2000) DEFAULT NULL,
SHARES IN NUMBER DEFAULT NULL,
UTILIZATION_LIMIT IN NUMBER DEFAULT NULL,
PARALLEL_SERVER_LIMIT IN NUMBER DEFAULT NULL,
MEMORY_LIMIT IN NUMBER DEFAULT NULL,
MEMORY_MIN IN NUMBER DEFAULT NULL);
该程序用于创建CDB资源计划指令,并同时将该指令与指定PDB进行关联。
资源计划指令只能与一个PDB进行关联,如需为多个PDB配置相同的资源配额可使用CDB资源模板指令。
| 参数 | 参数分类 | 描述 |
|---|---|---|
| PLAN | 通用参数 | 现有CDB资源计划的名称 |
| PLUGGABLE_DATABASE | 通用参数 | PDB名称 |
| COMMENT | 通用参数 | 注释信息 |
| SHARES | CPU/IOPS资源管理参数 | CPU/IOPS的使用份额(单位:%),取值范围是[1,100]中的整数或NULL值。默认值NULL表示最小值1。 |
| UTILIZATION_LIMIT | CPU/IOPS资源管理参数 | CPU/IOPS的使用最大上限(单位:%),取值范围是[1,100]中的整数或NULL值。默认值NULL表示最大值100。 |
| PARALLEL_SERVER_LIMIT | 并行执行资源管理参数 | 可用的最大并行资源百分比(单位:%),取值范围是[0,100]中的整数或NULL值。默认值NULL表示最大值100。 |
| MEMORY_LIMIT | 内存管理参数 | 可用内存的上限百分比(单位:%),取值范围是[MEMORY_MIN,100]中的整数或NULL值,该值允许超配(即所有容器的MEMORY_LIMIT之和大于100)。默认值NULL表示最大值100。 |
| MEMORY_MIN | 内存管理参数 | 可用内存的下限百分比(单位:%),取值范围是[1,MEMORY_LIMIT]中的整数或NULL值。默认值NULL表示最小值1。 |
使用说明:
CPU资源上限值计算公式为
UTILIZATION_LIMIT * CPU个数,例如某用户映射的资源使用组中MAX_UTILIZATION_LIMIT为10,环境中各节点的CPU个数为2,则该用户在每个节点的最大CPU使用率为20%。IOPS资源项及其上限值计算公式分别为:
每秒读写字节数上限:计算公式为
UTILIZATION_LIMIT * MAX_BPS,MAX_BPS参数默认为0,即不对相应资源进行限制。每秒IO操作次数上限:计算公式为
UTILIZATION_LIMIT * MAX_IOPS,MAX_IOPS参数默认为0,即不对相应资源进行限制。
内存资源上下限值计算公式为CDB_MAX_MEMORY_SIZE乘以对应百分比,PDB的使用量仅以内存相关参数配置值为标准(而非当前实际使用量),包括DATA_BUFFER_SIZE、SHARE_POOL_SIZE、COLUMNAR_BUFFER_SIZE等。
若PDB的使用量配置 > 上限CDB_MAX_MEMORY_SIZE * MEMORY_LIMIT,无法启动PDB。若在PDB运行中,则无法调整相应配置至使用量超过上限。
若PDB的使用量配置 < 下限CDB_MAX_MEMORY_SIZE * MEMORY_MIN,不影响PDB运行,会生成告警日志进行记录。
示例(单机部署)
EXEC DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(
PLAN => 'RES_CDB_PLAN',
PLUGGABLE_DATABASE => 'pdb1',
COMMENT => 'RESOURCE PLAN DIRECTIVE FOR PLUGGABLE DATABASE pdb1',
SHARES => 25,
UTILIZATION_LIMIT => 50,
PARALLEL_SERVER_LIMIT => 100,
MEMORY_LIMIT => 50,
MEMORY_MIN => 20);
# CREATE_CDB_PROFILE_DIRECTIVE
DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
PLAN IN VARCHAR(64),
PROFILE IN VARCHAR(64),
COMMENT IN VARCHAR(2000) DEFAULT NULL,
SHARES IN NUMBER DEFAULT NULL,
UTILIZATION_LIMIT IN NUMBER DEFAULT NULL,
PARALLEL_SERVER_LIMIT IN NUMBER DEFAULT NULL,
MEMORY_LIMIT IN NUMBER DEFAULT NULL,
MEMORY_MIN IN NUMBER DEFAULT NULL);
该程序用于创建CDB资源模板指令,通过CDB资源模板指令可以同时为多个PDB关联相同的资源配额。
| 参数 | 参数分类 | 描述 |
|---|---|---|
| PLAN | 通用参数 | 现有CDB资源计划的名称 |
| PROFILE | 通用参数 | CDB资源模板的名称 |
| COMMENT | 通用参数 | 注释信息 |
| SHARES | CPU/IOPS资源管理参数 | CPU/IOPS的使用份额(单位:%),取值范围是[1,100]中的整数或NULL值。默认值NULL表示最小值1。 |
| UTILIZATION_LIMIT | CPU/IOPS资源管理参数 | CPU/IOPS的使用最大上限(单位:%),取值范围是[1,100]中的整数或NULL值。默认值NULL表示最大值100。 |
| PARALLEL_SERVER_LIMIT | 并行执行资源管理参数 | 可用的最大并行资源百分比(单位:%),取值范围是[0,100]中的整数或NULL值。默认值NULL表示最大值100。 |
| MEMORY_LIMIT | 内存管理参数 | 可用内存的上限百分比(单位:%),取值范围是[MEMORY_MIN,100]中的整数或NULL值,该值允许超配(即所有容器的MEMORY_LIMIT之和大于100)。默认值NULL表示最大值100。 |
| MEMORY_MIN | 内存管理参数 | 可用内存的下限百分比(单位:%),取值范围是[1,MEMORY_LIMIT]中的整数或NULL值。默认值NULL表示最小值1。 |
使用说明:
CPU资源上限值计算公式为
UTILIZATION_LIMIT * CPU个数,例如某用户映射的资源使用组中MAX_UTILIZATION_LIMIT为10,环境中各节点的CPU个数为2,则该用户在每个节点的最大CPU使用率为20%。IOPS资源项及其上限值计算公式分别为:
每秒读写字节数上限:计算公式为
UTILIZATION_LIMIT * MAX_BPS,MAX_BPS参数默认为0,即不对相应资源进行限制。每秒IO操作次数上限:计算公式为
UTILIZATION_LIMIT * MAX_IOPS,MAX_IOPS参数默认为0,即不对相应资源进行限制。
内存资源上下限值计算公式为CDB_MAX_MEMORY_SIZE乘以对应百分比,PDB的使用量仅以内存相关参数配置值为标准(而非当前实际使用量),包括DATA_BUFFER_SIZE、SHARE_POOL_SIZE、COLUMNAR_BUFFER_SIZE等。
若PDB的使用量配置 > 上限CDB_MAX_MEMORY_SIZE * MEMORY_LIMIT,无法启动PDB。若在PDB运行中,则无法调整相应配置至使用量超过上限。
若PDB的使用量配置 < 下限CDB_MAX_MEMORY_SIZE * MEMORY_MIN,不影响PDB运行,会生成告警日志进行记录。
示例(单机部署)
EXEC DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
PLAN => 'RES_CDB_PLAN',
PROFILE => 'RES_CDB_PROFILE',
COMMENT => 'RESOURCE PROFILE DIRECTIVE',
SHARES => 10,
UTILIZATION_LIMIT => 30,
PARALLEL_SERVER_LIMIT => 50,
MEMORY_LIMIT => 25,
MEMORY_MIN => 10);
# SET_PDB_PROFILE
DBMS_RESOURCE_MANAGER.SET_PDB_PROFILE(
PLUGGABLE_DATABASE IN VARCHAR(64),
PROFILE IN VARCHAR(64) DEFAULT NULL);
该程序用于设置PDB与CDB资源模板指令的映射关系。
各类指令对PDB生效的优先级为CDB资源计划指令(CDB_PLAN_DIRECTIVE) > CDB资源计划模板(CDB_PROFILE_DIRECTIVE) > CDB默认资源计划指令(CDB_DEFAULT_DIRECTIVE)。
| 参数 | 参数分类 | 描述 |
|---|---|---|
| PLUGGABLE_DATABASE | 通用参数 | PDB名称,单次只能指定一个PDB。 |
| PROFILE | 通用参数 | CDB资源模板的名称,默认值NULL表示解除PDB到资源模板的映射关系 |
示例(单机部署)
-- 设置PDB的资源模板
EXEC DBMS_RESOURCE_MANAGER.SET_PDB_PROFILE(
PLUGGABLE_DATABASE => 'pdb1',
PROFILE => 'RES_CDB_PROFILE');
-- 删除PDB的资源模板
EXEC DBMS_RESOURCE_MANAGER.SET_PDB_PROFILE(
PLUGGABLE_DATABASE => 'pdb1');
# UPDATE_CDB_DEFAULT_DIRECTIVE
DBMS_RESOURCE_MANAGER.UPDATE_CDB_DEFAULT_DIRECTIVE(
PLAN IN VARCHAR(64),
COMMENT IN VARCHAR(2000) DEFAULT NULL,
SHARES IN NUMBER DEFAULT NULL,
UTILIZATION_LIMIT IN NUMBER DEFAULT NULL,
PARALLEL_SERVER_LIMIT IN NUMBER DEFAULT NULL,
MEMORY_LIMIT IN NUMBER DEFAULT NULL,
MEMORY_MIN IN NUMBER DEFAULT NULL);
该程序用于更新CDB默认资源计划指令的配置,初始配置为:
- SHARES = 1
- UTILIZATION_LIMIT = 100
- MEMORY_LIMIT = 100
- MEMORY_MIN = 1
| 参数 | 参数分类 | 描述 |
|---|---|---|
| PLAN | 通用参数 | 默认CDB资源计划的名称 |
| COMMENT | 通用参数 | 注释信息 |
| SHARES | CPU/IOPS资源管理参数 | CPU/IOPS的使用份额(单位:%),取值范围是[1,100]中的整数或NULL值 |
| UTILIZATION_LIMIT | CPU/IOPS资源管理参数 | CPU/IOPS的使用最大上限(单位:%),取值范围是[1,100]中的整数或NULL值 |
| PARALLEL_SERVER_LIMIT | 并行执行资源管理参数 | 可用的最大并行资源百分比(单位:%),取值范围是[0,100]中的整数或NULL值 |
| MEMORY_LIMIT | 内存管理参数 | 可用内存的上限百分比(单位:%),取值范围是[MEMORY_MIN,100]中的整数或NULL值,该值允许超配(即所有容器的MEMORY_LIMIT之和大于100) |
| MEMORY_MIN | 内存管理参数 | 可用内存的下限百分比(单位:%),取值范围是[1,MEMORY_LIMIT]中的整数或NULL值 |
使用说明:
- 可选参数不设置值或输入为NULL时,不对该参数做任何处理。
示例(单机部署)
EXEC DBMS_RESOURCE_MANAGER.UPDATE_CDB_DEFAULT_DIRECTIVE(
PLAN => 'RES_CDB_PLAN',
COMMENT => 'DEFAULT DIRECTIVE FOR RES_CDB_PLAN',
SHARES => 10,
UTILIZATION_LIMIT => 50,
PARALLEL_SERVER_LIMIT => 25,
MEMORY_LIMIT => 50,
MEMORY_MIN => 25);
# UPDATE_CDB_PLAN_DIRECTIVE
DBMS_RESOURCE_MANAGER.UPDATE_CDB_PLAN_DIRECTIVE(
PLAN IN VARCHAR(64),
PLUGGABLE_DATABASE IN VARCHAR(64),
COMMENT IN VARCHAR(2000) DEFAULT NULL,
SHARES IN NUMBER DEFAULT NULL,
UTILIZATION_LIMIT IN NUMBER DEFAULT NULL,
PARALLEL_SERVER_LIMIT IN NUMBER DEFAULT NULL,
MEMORY_LIMIT IN NUMBER DEFAULT NULL,
MEMORY_MIN IN NUMBER DEFAULT NULL);
该程序用于更新CDB资源计划指令的配置信息。
| 参数 | 参数分类 | 描述 |
|---|---|---|
| PLAN | 通用参数 | 待更新的CDB资源计划指令所属CDB资源计划的名称 |
| PLUGGABLE_DATABASE | 通用参数 | PDB名称,如果更新PDB名称则表示将该计划指令从原PDB解绑再关联到另外的PDB |
| COMMENT | 通用参数 | 注释信息 |
| SHARES | CPU/IOPS资源管理参数 | CPU/IOPS的使用份额(单位:%),取值范围是[1,100]中的整数或NULL值 |
| UTILIZATION_LIMIT | CPU/IOPS资源管理参数 | CPU/IOPS的使用最大上限(单位:%),取值范围是[1,100]中的整数或NULL值 |
| PARALLEL_SERVER_LIMIT | 并行执行资源管理参数 | 可用的最大并行资源百分比(单位:%),取值范围是[0,100]中的整数或NULL值 |
| MEMORY_LIMIT | 内存管理参数 | 可用内存的上限百分比(单位:%),取值范围是[MEMORY_MIN,100]中的整数或NULL值,该值允许超配(即所有容器的MEMORY_LIMIT之和大于100) |
| MEMORY_MIN | 内存管理参数 | 可用内存的下限百分比(单位:%),取值范围是[1,MEMORY_LIMIT]中的整数或NULL值 |
使用说明:
- 可选参数不设置值或输入为NULL时,不对该参数做任何处理。
示例(单机部署)
EXEC DBMS_RESOURCE_MANAGER.UPDATE_CDB_PLAN_DIRECTIVE(
PLAN => 'RES_CDB_PLAN',
PLUGGABLE_DATABASE => 'pdb1',
COMMENT => NULL,
SHARES => 50,
UTILIZATION_LIMIT => 50,
PARALLEL_SERVER_LIMIT => 50,
MEMORY_LIMIT => 100,
MEMORY_MIN => 50);
# UPDATE_CDB_PROFILE_DIRECTIVE
DBMS_RESOURCE_MANAGER.UPDATE_CDB_PROFILE_DIRECTIVE(
PLAN IN VARCHAR(64),
PROFILE IN VARCHAR(64),
COMMENT IN VARCHAR(2000) DEFAULT NULL,
SHARES IN NUMBER DEFAULT NULL,
UTILIZATION_LIMIT IN NUMBER DEFAULT NULL,
PARALLEL_SERVER_LIMIT IN NUMBER DEFAULT NULL,
MEMORY_LIMIT IN NUMBER DEFAULT NULL,
MEMORY_MIN IN NUMBER DEFAULT NULL);
该程序用于更新CDB资源模板指令的信息。
| 参数 | 参数分类 | 描述 |
|---|---|---|
| PLAN | 通用参数 | 待更新的CDB资源模板指令所属CDB资源计划的名称 |
| PROFILE | 通用参数 | 目标CDB资源模板指令的名称 |
| COMMENT | 通用参数 | 注释信息 |
| SHARES | CPU/IOPS资源管理参数 | CPU/IOPS的使用份额(单位:%),取值范围是[1,100]中的整数或NULL值 |
| UTILIZATION_LIMIT | CPU/IOPS资源管理参数 | CPU/IOPS的使用最大上限(单位:%),取值范围是[1,100]中的整数或NULL值 |
| PARALLEL_SERVER_LIMIT | 并行执行资源管理参数 | 可用的最大并行资源百分比(单位:%),取值范围是[0,100]中的整数或NULL值 |
| MEMORY_LIMIT | 内存管理参数 | 可用内存的上限百分比(单位:%),取值范围是[MEMORY_MIN,100]中的整数或NULL值,该值允许超配(即所有容器的MEMORY_LIMIT之和大于100) |
| MEMORY_MIN | 内存管理参数 | 可用内存的下限百分比(单位:%),取值范围是[1,MEMORY_LIMIT]中的整数或NULL值 |
使用说明:
- 可选参数不设置值或输入为NULL时,不对该参数做任何处理。
示例(单机部署)
EXEC DBMS_RESOURCE_MANAGER.UPDATE_CDB_PROFILE_DIRECTIVE(
PLAN => 'RES_CDB_PLAN',
PROFILE => 'RES_CDB_PROFILE',
COMMENT => NULL,
SHARES => 50,
UTILIZATION_LIMIT => 100,
PARALLEL_SERVER_LIMIT => 100,
MEMORY_LIMIT => 100,
MEMORY_MIN => 50);
# DELETE_CDB_PLAN_DIRECTIVE
DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN_DIRECTIVE(
PLAN IN VARCHAR(64),
PLUGGABLE_DATABASE IN VARCHAR(64));
该程序用于删除CDB资源计划指令。删除成功后,对应PDB将会使用已关联的资源模板指令或默认指令。
| 参数 | 参数分类 | 描述 |
|---|---|---|
| PLAN | 通用参数 | 待删除的CDB资源计划指令所属CDB资源计划的名称 |
| PLUGGABLE_DATABASE | 通用参数 | 待删除的CDB资源计划指令所关联的PDB |
示例(单机部署)
EXEC DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN_DIRECTIVE(
PLAN = > 'RES_CDB_PLAN',
PLUGGABLE_DATABASE => 'pdb1');
# DELETE_CDB_PROFILE_DIRECTIVE
DBMS_RESOURCE_MANAGER.DELETE_CDB_PROFILE_DIRECTIVE(
PLAN IN VARCHAR(64),
PROFILE IN VARCHAR(64));
该程序用于删除CDB资源模板指令,删除前需执行SET_PDB_PROFILE解除目标资源模板与PDB的关联。
| 参数 | 参数分类 | 描述 |
|---|---|---|
| PLAN | 通用参数 | 待删除的CDB资源模板指令所属CDB资源计划的名称 |
| PROFILE | 通用参数 | 待删除的CDB资源模板指令的名称 |
示例(单机部署)
EXEC DBMS_RESOURCE_MANAGER.DELETE_CDB_PROFILE_DIRECTIVE(
PLAN => 'RES_CDB_PLAN',
PROFILE => 'RES_CDB_PROFILE');
# DELETE_CDB_PLAN
DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN(
PLAN IN VARCHAR(64));
该程序用于删除CDB资源计划,无法删除正在生效的资源计划以及内置资源计划DEFAULT_CDB_PLAN。
| 参数 | 描述 |
|---|---|
| PLAN | 现有CDB资源计划的名称 |
示例(单机部署)
EXEC DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN(
PLAN => 'RES_CDB_PLAN');
# CREATE_CONSUMER_GROUP
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
CONSUMER_GROUP IN VARCHAR(64),
COMMENT IN VARCHAR(2000) DEFAULT NULL);
该程序用于创建一个资源使用组。
系统包含如下默认资源使用组:
- SYS_GROUP:包括系统用户sys和系统进程,不允许修改与删除SYS_GROUP的相关配置与映射关系。
- DEFAULT_CONSUMER_GROUP:不存在资源映射关系的资源使用者默认划分至该组。
YashanDB最多支持用户自定义创建126个资源使用组。
| 参数 | 描述 |
|---|---|
| CONSUMER_GROUP | 资源使用组,名称唯一且符合YashanDB的对象命名规范,允许使用系统保留关键字,但不满足双引号的通用规则 |
| COMMENT | 注释 |
示例(单机部署、存算一体分布式集群部署)
-- 忽略参数名
EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
'RESGROUP1',
'GROUP FOR CPU RESOURCE1');
-- 缺省注释
EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
'RESGROUP2');
-- 注释信息为空
EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
'RESGROUP3',
NULL);
-- 指定参数名
EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
CONSUMER_GROUP => 'RESGROUP4',
COMMENT => 'GROUP FOR CPU RESOURCE4');
EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
CONSUMER_GROUP => 'RESGROUP5');
EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
CONSUMER_GROUP => 'RESGROUP6',
COMMENT => NULL);
# CREATE_PLAN
DBMS_RESOURCE_MANAGER.CREATE_PLAN (
PLAN IN VARCHAR(64),
COMMENT IN VARCHAR(2000) DEFAULT NULL);
该程序用于创建资源计划,目前仅支持创建一级计划,不支持创建子计划。
系统包含如下默认资源计划:
- TOALL: 一级资源计划,包含关联内部进程和DEFAULT_CONSUMER_GROUP的指令。
- SYS_GROUP: 二级资源计划,属于TOALL的子计划,包含关联系统用户sys和系统进程的指令。
| 参数 | 描述 |
|---|---|
| PLAN | CDB资源计划名,名称唯一且符合YashanDB的对象命名规范,允许使用系统保留关键字,但不满足双引号的通用规则 |
| COMMENT | 注释 |
示例(单机部署、存算一体分布式集群部署)
-- 忽略参数名
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN(
'RESPLAN1',
'PLAN FOR CPU RESOURCE1');
-- 缺省注释
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN(
'RESPLAN2');
-- 注释信息为空
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN(
'RESPLAN3',
NULL);
-- 指定参数名
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN(
PLAN => 'RESPLAN4',
COMMENT => 'PLAN FOR CPU RESOURCE4');
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN(
PLAN => 'RESPLAN5');
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN(
PLAN => 'RESPLAN6',
COMMENT => NULL);
# CREATE_PLAN_DIRECTIVE
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN IN VARCHAR(64),
GROUP_OR_SUBPLAN IN VARCHAR(64),
MGMT_P1 IN NUMBER DEFAULT NULL,
MAX_UTILIZATION_LIMIT IN NUMBER DEFAULT NULL,
UTILIZATION_LIMT IN NUMBER DEFAULT NULL,
SHARES IN NUMBER DEFAULT NULL,
PARALLEL_SERVER_LIMIT IN NUMBER DEFAULT NULL,
SPA_LIMIT IN NUMBER DEFAULT NULL,
SPA_LIMIT_RESERVED IN NUMBER DEFAULT NULL,
SESSION_SPA_LIMIT IN NUMBER DEFAULT NULL,
EXECUTION_QUEUE_TIMEOUT IN NUMBER DEFAULT NULL
CONCURRENCY_LIMIT IN NUMBER DEFAULT NULL);
该程序用于创建资源计划指令。
| 参数 | 参数分类 | 描述 |
|---|---|---|
| PLAN | 通用参数 | 现有资源计划的名称 |
| GROUP_OR_SUBPLAN | 通用参数 | 资源使用组 |
| SHARES | CPU资源管理参数 | CPU共享模式下的使用份额(单位:%),须为[1,100]中的整数,默认值NULL表示最小值1 |
| PARALLEL_SERVER_LIMIT | 并行执行资源管理参数 | 资源使用组可以使用的最大并行资源百分比,须为[0,100]中的整数,默认值NULL表示最大值100 |
| UTILIZATION_LIMIT | CPU资源管理参数 | CPU最大使用上限(单位:%),须为[1,100]中的整数,默认值NULL表示最大值100 |
| MAX_UTILIZATION_LIMIT | CPU资源管理参数 | 与字段UTILIZATION_LIMIT相同表现 |
| MGMT_P1 | CPU资源管理参数 | 与字段SHARES相同表现 |
| SPA_LIMIT | 内存管理参数 | 资源使用组占用用户内存的上限百分比(单位:%),公共内存使用不在限制内。须为[1,100]的整数,默认值NULL表示最大值100 |
| SPA_LIMIT_RESERVED | 内存管理参数 | 资源使用组内用户内存预留一定比例作为各会话私有部分(单位:%)。预留范围内的用户内存,会话无需向资源使用组申请。须为[0,100]的整数,默认值NULL表示最小值0 |
| SESSION_SPA_LIMIT | 内存管理参数 | 会话占用资源组可用内存的上限百分比(单位:%)。须为[1,100]的正整数,默认值NULL表示最大值100 |
| EXECUTION_QUEUE_TIMEOUT | 执行调度管理参数 | 当资源不足时在队列中等待的超时时间,单位是s。须为[-1, 4294967295]的整数,-1表示无限超时,默认值NULL等同最小值-1 |
| CONCURRENCY_LIMIT | 执行调度管理参数 | 资源使用组内允许同时执行资源密集型SQL的数量,需为[0, 2147483647]中的整数,NULL表示不限制 |
使用说明:
- 当同时设置MGMT_P1和SHARES参数时,以SHARES参数为准。
- 当同时设置MAX_UTILIZATION_LIMIT和UTILIZATION_LIMIT参数时,以UTILIZATION_LIMIT参数为准。
- 最大CPU使用率计算公式为
MAX_UTILIZATION_LIMIT * CPU个数,例如某用户映射的资源使用组中MAX_UTILIZATION_LIMIT为10,环境中各节点的CPU个数为2,则该用户在每个节点的最大CPU使用率为20%。 - 为保障SYS_GROUP具备足够的资源可用,当该组的共享资源(MGMT_P1)较少或较多时,系统会在用户输入时做动态调整。若SYS_GROUP的MGMT_P1全局占比小于40%或大于60%时,系统会将SYS_GROUP的MGMT_P1动态调整为剩余资源组的MGMT_P1总和,此时SYS_GROUP的MGMT_P1值可能会超过100(可查看视图DBA_RSRC_PLAN_DIRECTIVES的MGMT_P1字段,全局占比计算公式:
SYS_GROUP的MGMT_P1 / 所有资源使用组的MGMT_P1总和))。 - 较低版本的数据库升级后,如果原本已将MGMT_P1或MAX_UTILIZATION_LIMIT参数配置为0,实际表现与当前版本中将其对应配置为100相同。
- 在容器数据库中,如果某个PDB同时配置了全局资源管理和本地资源管理,SHARES和UTILIZATION_LIMIT的配额将是全局和本地的乘积,例如全局和本地的资源管理计划指令均配置UTILIZATION_LIMIT=80则其实际配额为
80 * 80 = 64。
示例(单机部署、存算一体分布式集群部署)
-- 不配置可选参数
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
'RESPLAN1',
'RESGROUP1');
-- 忽略参数名
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
'RESPLAN2',
'RESGROUP2',
10,
20,
30,
40,
50);
-- 指定参数名
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'RESPLAN3',
GROUP_OR_SUBPLAN => 'RESGROUP3',
MGMT_P1 => 10,
MAX_UTILIZATION_LIMIT => 20,
UTILIZATION_LIMIT => 30,
SHARES => 40,
PARALLEL_SERVER_LIMIT => 50);
-- 只配置MGMT_P1和MAX_UTILIZATION_LIMIT参数
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'RESPLAN4',
GROUP_OR_SUBPLAN => 'RESGROUP4',
MGMT_P1 => 10,
MAX_UTILIZATION_LIMIT => 20);
-- 只配置PARALL_SERVER_LIMIT参数
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'RESPLAN5',
GROUP_OR_SUBPLAN => 'RESGROUP5',
PARALLEL_SERVER_LIMIT => 50);
-- 指定参数名后的参数只能继续指定参数名,以下示例会报错
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'RESPLAN6',
GROUP_OR_SUBPLAN => 'RESGROUP6',
10);
YAS-04253 PL/SQL compiling errors:
[1:104] YAS-00003 invalid parameter, reason: param => input order error
# SET_CONSUMER_GROUP_MAPPING
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
ATTRIBUTE IN VARCHAR(64),
VALUE IN VARCHAR(64),
CONSUMER_GROUP IN VARCHAR(64) DEFAULT NULL);
该程序用于把资源使用者映射到资源使用组,无法修改SYS用户与SYS_GROUP组的映射关系。
如果不存在映射,将创建到对应资源组的映射;如果已经存在映射,则尝试更新映射到新的资源组。
| 参数 | 描述 |
|---|---|
| ATTRIBUTE | 映射属性 仅支持USER,即资源使用者以用户为维度 |
| VALUE | 待映射的用户名,必须为已存在的用户 |
| CONSUMER_GROUP | 待映射的资源使用组,为NULL时表示删除对应映射 |
如果映射的资源使用组没有对应的计划指令,则表现与DEFAULT_CONSUMER_GROUP保持一致;当创建新的计划指令时,需要用户重新登录会话才能生效。
示例(单机部署、存算一体分布式集群部署)
-- 缺省CONSUMER_GROUP参数,效果等同于DELETE_CONSUMER_GROUP_MAPPING
EXEC DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
'USER',
'SALES1');
-- 忽略参数名
EXEC DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
'USER',
'SALES1',
'RESGROUP1');
-- 指定参数名
EXEC DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
ATTRIBUTE => 'USER',
VALUE => 'SALES2',
CONSUMER_GROUP => 'RESGROUP2');
# UPDATE_PLAN_DIRECTIVE
DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
PLAN IN VARCHAR(64),
GROUP_OR_SUBPLAN IN VARCHAR(64),
MGMT_P1 IN NUMBER DEFAULT NULL,
MAX_UTILIZATION_LIMIT IN NUMBER DEFAULT NULL,
UTILIZATION_LIMT IN NUMBER DEFAULT NULL,
SHARES IN NUMBER DEFAULT NULL,
PARALLEL_SERVER_LIMIT IN NUMBER DEFAULT NULL,
SPA_LIMIT IN NUMBER DEFAULT NULL,
SPA_LIMIT_RESERVED IN NUMBER DEFAULT NULL,
SESSION_SPA_LIMIT IN NUMBER DEFAULT NULL,
EXECUTION_QUEUE_TIMEOUT IN NUMBER DEFAULT NULL
CONCURRENCY_LIMIT IN NUMBER DEFAULT NULL);
该程序用于更新资源计划指令。
| 参数 | 参数分类 | 描述 |
|---|---|---|
| PLAN | 通用参数 | 现有资源计划的名称 |
| GROUP_OR_SUBPLAN | 通用参数 | 资源使用组 |
| SHARES | CPU资源管理参数 | CPU共享模式下的使用份额,须为[1,100]中的整数 |
| PARALLEL_SERVER_LIMIT | 并行执行资源管理参数 | 资源使用组可以使用的最大并行资源百分比,须为[0,100]中的整数 |
| UTILIZATION_LIMIT | CPU资源管理参数 | CPU最大使用上限,须为[1,100]中的整数 |
| MAX_UTILIZATION_LIMIT | CPU资源管理参数 | 与字段UTILIZATION_LIMIT相同表现 |
| MGMT_P1 | CPU资源管理参数 | 与字段SHARES相同表现 |
| SPA_LIMIT | 内存管理参数 | 资源使用组占用用户内存的上限百分比(单位:%),公共内存使用不在限制内。须为[1,100]的整数 |
| SPA_LIMIT_RESERVED | 内存管理参数 | 资源使用组内用户内存预留一定比例作为各会话私有部分(单位:%)。预留范围内的用户内存,会话无需向资源使用组申请。须为[0,100]的整数 |
| SESSION_SPA_LIMIT | 内存管理参数 | 会话占用资源组可用内存的上限百分比(单位:%)。须为[1,100]的整数 |
| EXECUTION_QUEUE_TIMEOUT | 执行调度管理参数 | 当资源不足时在队列中等待的超时时间,单位是s。须为[-1, 4294967295]的整数,-1表示无限超时,默认值NULL等同最小值-1 |
| CONCURRENCY_LIMIT | 执行调度管理参数 | 资源使用组内允许同时执行资源密集型SQL的数量,需为[0, 2147483647]中的整数,NULL表示不限制 |
使用说明:
- 可选参数不设置值或输入为NULL时,不对该参数做任何处理。
示例(单机部署、存算一体分布式集群部署)
-- 不配置可选参数
EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
'RESPLAN1',
'RESGROUP1');
-- 忽略参数名
EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
'RESPLAN2',
'RESGROUP2',
10,
20,
30,
40,
50);
-- 指定参数名
EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
PLAN => 'RESPLAN3',
GROUP_OR_SUBPLAN => 'RESGROUP3',
MGMT_P1 => 10,
MAX_UTILIZATION_LIMIT => 20,
UTILIZATION_LIMIT => 30,
SHARES => 40,
PARALLEL_SERVER_LIMIT => 50);
-- 只配置MGMT_P1和MAX_UTILIZATION_LIMIT参数
EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
PLAN => 'RESPLAN4',
GROUP_OR_SUBPLAN => 'RESGROUP4',
MGMT_P1 => 10,
MAX_UTILIZATION_LIMIT => 20);
-- 只配置PARALL_SERVER_LIMIT参数
EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(
PLAN => 'RESPLAN5',
GROUP_OR_SUBPLAN => 'RESGROUP5',
PARALLEL_SERVER_LIMIT => 50);
# DELETE_CONSUMER_GROUP_MAPPING
DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP_MAPPING(
ATTRIBUTE IN VARCHAR(64),
VALUE IN VARCHAR(64));
该程序用于删除资源使用者到资源使用组的映射,无法删除SYS用户与SYS_GROUP组的映射关系。
| 参数 | 描述 |
|---|---|
| ATTRIBUTE | 映射属性,仅支持USER |
| VALUE | 映射关系中的用户名,不能为SYS用户 |
示例(单机部署、存算一体分布式集群部署)
-- 忽略参数名
EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP_MAPPING(
'USER',
'SALES1');
-- 指定参数名
EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP_MAPPING(
ATTRIBUTE => 'USER',
VALUE => 'SALES2');
# DELETE_PLAN_DIRECTIVE
DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(
PLAN IN VARCHAR(64),
GROUP_OR_SUBPLAN IN VARCHAR(64));
该程序用于删除资源计划指令。
| 参数 | 描述 |
|---|---|
| PLAN | 通用参数 |
| GROUP_OR_SUBPLAN | 资源使用组 |
示例(单机部署、存算一体分布式集群部署)
-- 忽略参数名
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(
'RESPLAN1',
'RESGROUP1');
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(
'RESPLAN2',
'RESGROUP2');
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(
'RESPLAN3',
'RESGROUP3');
-- 指定参数名
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(
PLAN => 'RESPLAN4',
GROUP_OR_SUBPLAN => 'RESGROUP4');
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(
PLAN => 'RESPLAN5',
GROUP_OR_SUBPLAN => 'RESGROUP5');
# DELETE_PLAN
DBMS_RESOURCE_MANAGER.DELETE_PLAN (
PLAN IN VARCHAR(64));
该程序用于删除资源计划,无法删除正在生效的资源计划及内置资源计划TOALL和SYS_GROUP。
| 参数 | 描述 |
|---|---|
| PLAN | 现有资源计划的名称 |
示例(单机部署、存算一体分布式集群部署)
-- 忽略参数名
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN(
'RESPLAN1');
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN(
'RESPLAN2');
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN(
'RESPLAN3');
-- 指定参数名
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN(
PLAN => 'RESPLAN4');
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN(
PLAN => 'RESPLAN5');
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN(
PLAN => 'RESPLAN6');
# DELETE_CONSUMER_GROUP
DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP(
CONSUMER_GROUP IN VARCHAR(64));
该程序用于删除一个资源使用组。
| 参数 | 描述 |
|---|---|
| CONSUMER_GROUP | 资源使用组 |
示例(单机部署、存算一体分布式集群部署)
-- 忽略参数名
EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP(
'RESGROUP1');
EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP(
'RESGROUP2');
EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP(
'RESGROUP3');
-- 指定参数名
EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP(
CONSUMER_GROUP => 'RESGROUP4');
EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP(
CONSUMER_GROUP => 'RESGROUP5');
EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP(
CONSUMER_GROUP => 'RESGROUP6');

