#DBMS_RESOURCE_MANAGER
DBMS_RESOURCE_MANAGER包提供了一组资源管理的存储过程/函数,用于创建和删除资源使用组、资源映射及相关操作。
Note:
- 调用DBMS_RESOURCE_MANAGER高级包下的所有子程序时,都需要以SYS用户连接数据库,否则报错。
- 分布式部署下,高级包DBMS_RESOURCE_MANAGER下的所有过程/函数只允许逐条调用,且只能在CN节点上操作。
# 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 | 资源计划名,名称唯一且符合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 INTEGER DEFAULT NULL,
MAX_UTILIZATION_LIMIT IN INTEGER DEFAULT NULL,
UTILIZATION_LIMT IN INTEGER DEFAULT NULL,
SHARES IN INTEGER DEFAULT NULL,
PARALLEL_SERVER_LIMIT IN INTEGER DEFAULT NULL,
SPA_LIMIT IN NUMBER DEFUALT NULL,
SPA_LIMIT_RESERVED IN NUMBER DEFAULT NULL,
SESSION_SPA_LIMIT IN NUMBER DEFAULT NULL,
EXECUTION_QUEUE_TIMEOUT IN NUMBER DEFAULT NULL);
该程序用于创建资源计划指令。
参数 | 参数分类 | 描述 |
---|---|---|
PLAN | 通用参数 | 资源计划名 |
GROUP_OR_SUBPLAN | 通用参数 | 资源使用组 |
MGMT_P1 | CPU资源管理参数 | CPU共享模式下的使用份额,须为[1,100]中的整数,默认值NULL表示最小值1 |
MAX_UTILIZATION_LIMIT | CPU资源管理参数 | CPU最大使用上限,须为[1,100]中的整数,默认值NULL表示最大值100 |
UTILIZATION_LIMIT | CPU资源管理参数 | 与字段MAX_UTILIZATION_LIMIT相同表现 |
SHARES | CPU资源管理参数 | 与字段MGMT_P1相同表现 |
PARALLEL_SERVER_LIMIT | 并行执行资源管理参数 | 资源使用组可以使用的最大并行资源百分比,须为[0,100]中的整数,默认值NULL表示最大值100 |
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 |
使用说明:
- 当同时设置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相同。
示例
-- 不配置可选参数
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 INTEGER DEFAULT NULL,
MAX_UTILIZATION_LIMIT IN INTEGER DEFAULT NULL,
UTILIZATION_LIMT IN INTEGER DEFAULT NULL,
SHARES IN INTEGER DEFAULT NULL,
PARALLEL_SERVER_LIMIT IN INTEGER DEFAULT NULL,
SPA_LIMIT IN NUMBER DEFUALT NULL,
SPA_LIMIT_RESERVED IN NUMBER DEFAULT NULL,
SESSION_SPA_LIMIT IN NUMBER DEFAULT NULL,
EXECUTION_QUEUE_TIMEOUT IN NUMBER DEFAULT NULL);
该程序用于更新资源计划指令。
参数 | 参数分类 | 描述 |
---|---|---|
PLAN | 通用参数 | 资源计划名 |
GROUP_OR_SUBPLAN | 通用参数 | 资源使用组 |
MGMT_P1 | CPU资源管理参数 | CPU共享模式下的使用份额,须为[1,100]中的整数 |
MAX_UTILIZATION_LIMIT | CPU资源管理参数 | CPU最大使用上限,须为[1,100]中的整数 |
UTILIZATION_LIMIT | CPU资源管理参数 | 与字段MAX_UTILIZATION_LIMIT相同表现 |
SHARES | CPU资源管理参数 | 与字段MGMT_P1相同表现 |
PARALLEL_SERVER_LIMIT | 并行执行资源管理参数 | 资源使用组可以使用的最大并行资源百分比,须为[0,100]中的整数 |
SPA_LIMIT | 内存管理参数 | 资源使用组占用用户内存的上限比例,单位为%,公共内存使用不在限制内。须为[1,100]的整数 |
SPA_LIMIT_RESERVED | 内存管理参数 | 资源使用组内用户内存预留一定比例作为各会话私有部分,单位为%。预留范围内的用户内存,会话无需向资源使用组申请。须为[0,100]的整数 |
SESSION_SPA_LIMIT | 内存管理参数 | 会话占用资源组可用内存的上限比例,单位是%。须为[1,100]的整数 |
EXECUTION_QUEUE_TIMEOUT | 内存管理参数 | 当内存分配不足时在队列中等待的超时时间,单位是s。须为[-1, 4294967295]的整数 |
使用说明:
- 可选参数不设置值或输入为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');