第一步 创建Pending Area
所有关于 Resource Manager 组件创建和更改都必须在 Pending Area 中完成,可以理解为一个“草稿区".
SQL> exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA
第二步 创建Resource Planing
创建资源计划时需要注意的一点是如果 sub_plan 参数指定为 TRUE,那么这个计划只能作为子计划使用,并且不需要为 OTHER_GROUPS 创建 Plan Directive,否则必须给OTHER_GROUPS 创建 Plan Directive
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN(
plan => ‘PLAN1’,
comment => ‘Test Plan…’,
sub_plan => FALSE); --默认值即为 FALSE
END;
/
第三步 创建CONSUMER_GROUP
根据实际需求创建所需要的用户组,需要注意的是虽然这一步并没有创建 OTHER_GROUPS 用户组,但是后面必须为 OTHER_GROUPS 用户组创建相对应的Plan Directive
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
consumer_group => ‘GROUP_OLTP’,
comment => ‘Group of OLTP USERS…’,
mgmt_mth => ‘ROUND-ROBIN’); --该用户组内各会话的CPU资源采取轮询的分配方法
END;
/
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
consumer_group => ‘GROUP_OLAP’,
comment => ‘Group of OLAP USERS…’,
mgmt_mth => ‘ROUND-ROBIN’);
END;
/
第四步 创建资源组和客户机的映射关系
BEGIN
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
attribute => ‘CLIENT_MACHINE’,
value => ‘ASM’, --将从“ASM”客户机发起的会话映射到“GROUP_OLAP”用户组
consumer_group => ‘GROUP_OLAP’);
END;
/
SQL> BEGIN
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
attribute => ‘CLIENT_MACHINE’,
value => ‘WORKGROUP\XIAO’, --将从“WORKGROUP\XIAO”客户机发起的会话映射到“GROUP_OLTP”用户组
consumer_group => ‘GROUP_OLTP’);
END;
/
第五步 配置资源组
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘PLAN1’, --将该Plan Directive 关联到 PLAN “Plan1”
group_or_subplan => ‘GROUP_OLAP’, --可以指定用户组,也可以指定Sub Plan,和上一个参数构成了 Plan Diretive 的唯一属性
comment => ‘Directives for OLAP consumer group…’,
active_sess_pool_p1 => 5, --最大活跃会话数,达到该限制后其他会话进入 Inactive session queue
queueing_p1 => 10, --在 Inactive session queue 的等待超时时间
parallel_degree_limit_p1 => 2, --最大并行度
switch_group => ‘KILL_SESSION’, --在满足指定条件后,对会话所采取的操作
switch_time => 3, --执行时间限制,会话操作执行时间超过该值后,即被采取上一步的相应操作(second)
switch_estimate => FALSE, --如果设置为 TRUE,在操作执行前Oracle先估算执行时间以决定是否对其切换用户组
max_est_exec_time => 5, --最大估算执行时间,优化器对操作时间进行估算,如果超过该值则直接返回“ORA-07455”
undo_pool => NULL, --uncommited undo segments 限制(KB)
max_idle_time => 300, --会话最大空闲时间
max_idle_blocker_time => 3, --Blocker会话的最大空闲时间
mgmt_p1 => 30, --CPU使用限制(Level 1)
mgmt_p2 => 0); --CPU使用限制(Level 2)
END;
/
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘PLAN1’,
group_or_subplan => ‘GROUP_OLTP’, --为“GROUP_OLTP”用户组创建指令计划
comment => ‘Directives for OLTP consumer group…’,
active_sess_pool_p1 => 10,
switch_group => ‘CANCEL_SQL’,
switch_time => 3,max_idle_time => 3,
mgmt_p1 => 60,
mgmt_p2 => 0);
END;
/
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
plan => ‘PLAN1’,
group_or_subplan => ‘OTHER_GROUPS’, --为没有映射到以上用户组中的会话创建 Plan Directive
comment => ‘Directives for the other users group…’,
parallel_degree_limit_p1 => 1,
mgmt_p1 => 0,
mgmt_p2 => 100); --CPU使用限制(Level 2 的100%,即 Level 1 分配剩下的10%)
END;
/
第六步 验证和提交资源计划
在对资源管理元素的创建及更改完成后执行校验并提交,如果出现逻辑上的错误会导致报错,比如:
. 没有定义 OTHER_GROUPS 用户组的 Plan Directive
. 一个 Plan 中各个 Plan Directive 的 mgmt_p1 或者 mgmt_p2 之和大于 100%等一些其他的错误
SQL> exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA()
PL/SQL procedure successfully completed.
SQL> exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA()
PL/SQL procedure successfully completed.
第七步 查看资源计划
可以通过动态性能视图和数据字典查看
至此,资源管理计划已经创建完成,修改初始化参数 resource_manager_plan 以启用新的资源管理计划,或者直接在EM控制台中将该计划的状态改为“Active”
附(动态性能视图及数据字典)
DBA_RSRC_CATEGORIES
DBA_RSRC_CONSUMER_GROUP_PRIVS
DBA_RSRC_CONSUMER_GROUPS
DBA_RSRC_GROUP_MAPPINGS
DBA_RSRC_IO_CALIBRATE
DBA_RSRC_MANAGER_SYSTEM_PRIVS
DBA_RSRC_MAPPING_PRIORITY
DBA_RSRC_PLAN_DIRECTIVES
DBA_RSRC_PLANS
V
R
S
R
C
C
O
N
S
G
R
O
U
P
H
I
S
T
O
R
Y
V
RSRC_CONS_GROUP_HISTORY V
RSRCCONSGROUPHISTORYVRSRC_CONSUMER_GROUP
V
R
S
R
C
C
O
N
S
U
M
E
R
G
R
O
U
P
C
P
U
M
T
H
V
RSRC_CONSUMER_GROUP_CPU_MTH V
RSRCCONSUMERGROUPCPUMTHVRSRC_PLAN
V
R
S
R
C
P
L
A
N
C
P
U
M
T
H
V
RSRC_PLAN_CPU_MTH V
RSRCPLANCPUMTHVRSRC_PLAN_HISTORY
V
R
S
R
C
S
E
S
S
I
O
N
I
N
F
O
V
RSRC_SESSION_INFO V
RSRCSESSIONINFOVRSRCMGRMETRIC
V$RSRCMGRMETRIC_HISTORY