此文已由作者赵欣授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
4.1 管理Resource Manager的权限
管理Resource Manager必须具有ADMINISTER_RESOURCE_MANAGER权限,在DBA的role里已经包含了这个权限。官方文档上特别提示只能通过DBMS_RESOURCE_MANAGER_PRIVS包来执行ADMINISTER_RESOURCE_MANAGER权限的授予和撤销。该包中两个相关的procedures:
Procedure |
Description |
GRANT_SYSTEM_PRIVILEGE |
授予 ADMINISTER_RESOURCE_MANAGER 系统权限给一个用户或角色 |
REVOKE_SYSTEM_PRIVILEGE |
取消the ADMINISTER_RESOURCE_MANAGER 系统权限 |
例:授予neusoft用户ADMINISTER_RESOURCE_MANAGER权限
begin
dbms_resource_manager_privs.grant_system_privilege(
grantee_name =>'neusoft',
privilege_name =>'ADMINISTER_RESOURCE_MANAGER',
admin_option =>FALSE);
end;
/
撤销neusoft用户ADMINISTER_RESOURCE_MANAGER权限
begin
dbms_resource_manager_privs.revoke_system_privilege(
revokee_name =>'neusoft',
privilege_name =>'ADMINISTER_RESOURCE_MANAGER');
end;
/
4.2 使用命令行配置Resource Manager的步骤
使用DBRM需要遵循以下步骤:
1) 创建未决区(pending area)
2) 创建资源用户组
3) 创建资源计划
4) 创建资源计划指令
5) 验证未决区
6) 提交未决区
7) 指派用户到消费组
8) 启动dbrm
4.2.1 创建未决区
在使用DBRM分配资源,修改旧计划或者创建新计划前需要创建未决区。要创建的所有资源计划都是存储在数据字典中,而未决区是实现资源计划前处理他们的临时区域。
创建未决区:
SQL> EXECUTE dbms_resource_manager.create_pending_area;
PL/SQL procedure successfully completed.
清除未决区:
SQL> EXECUTE dbms_resource_manager.clear_pending_area;
PL/SQL procedure successfully completed.
4.2.2 创建资源用户组
用三个参数来创建分配用户的资源用户组,它们是:资源用户组名CONSUMER_GROUP、注释COMMENT 和资源用户组活动会话之间分配cpu时间的方法CPU_MTH(官方文档显示11GR2中该参数被弃用,改用MGMT_MTH)。MGMT_MTH有两个选择:RUN_TO_COMPLETION(优先调度那些占用大多数时间的会话)以及默认的ROUND_ROBIN(循环调度系统)。
创建neusoft和G2资源用户组:
SQL> EXECUTE dbms_resource_manager.create_consumer_group (
consumer_group => 'neusoft', comment => 'neusoft');
PL/SQL procedure successfully completed.
SQL> EXECUTE dbms_resource_manager.create_consumer_group (
consumer_group => 'G2', comment => 'G2');
PL/SQL procedure successfully completed.
4.2.3 创建资源计划
资源组计划包含分配各资源用户组之间资源分配的指示,共有以下几个参数:
PLAN |
资源计划名 |
COMMENT |
注释 |
MGMT_MTH |
指定在资源用户组之间如何分配cpu的方法:默认的EMPHASIS使用百分比在各组之间分配cpu,而备用的RATIO使用比率来分配 |
ACTIVE_SESS_POOL_MTH |
确定资源用户组中活动会话数目的限制,只有一个唯一方法ACTIVE_SESS_POOL_ABSOLUTE |
PARALLEL_DEGREE_LIMIT_MTH |
|
QUEUEING_MTH |
确定排队会话将执行的顺序,只有默认的FIFO_TIMEOUT |
SUB_PLAN |
如果该参数为true,则此计划职能作为子计划。默认是false |
创建g2test资源计划
SQL> EXECUTE DBMS_RESOURCE_MANAGER.CREATE_PLAN
(PLAN => 'g2test',
CPU_MTH -> 'EMPHASIS',
COMMENT => 'New g2');
PL/SQL procedure successfully completed.
4.2.4 创建资源计划指令
通过资源计划指令来控制分配只有给数据库中各资源用户组。可通过以下参数分配资源:
PLAN |
对应资源计划名字 |
GROUP_OR_SUBPLAN |
对应资源用户组名或子计划名 |
COMMENT |
注释 |
MGMT_P1 |
定义了可以保证使用的CPU时间资源百分比 |
MGMT_P2 |
同上,对应level2 |
ACTIVE_SESS_POOL_P1 |
定义资源用户组内活动会话同时打开的最大数量,默认无限制 |
QUEUEING_P1 |
定义会话在非活动会话队列内等待的最大时间,超时就会被停止。默认无限制 |
PARALLEL_DEGREE_LIMIT_P1 |
定义同一个操作的并行执行的数量 |
SWITCH_GROUP |
定义当会话满足切换条件时将切换到的资源用户组 如果资源组名字是'CANCEL_SQL'那么该调用会被cancel 如果资源组名字是 'KILL_SESSION',那么该会话会被kill
|
SWITCH_TIME |
定义一个调用在切换动作发起前可以执行的时间 |
SWITCH_ESTIMATE |
参数为true时,数据库估算每一个调用的执行时间以及该时间是否超过了switch_time |
MAX_EST_EXEC_TIME |
定义每一个调用所能执行的最大时间,如果在调用初始估算的时间超过该值,这个调用将不会被执行。默认无限制 |
UNDO_POOL |
定义用户组总的undo生成量限制。默认无限制 |
MAX_IDLE_TIME |
定义会话的最大idle时间限制。默认无限制 |
MAX_IDLE_BLOCKER_TIME |
定义某个idle会话能阻塞其他会话的最大时间限制,默认无限制 |
SWITCH_IO_MEGABYTES |
定义会话在数据库采取切换动作前能传输的最大IO M字节数,默认无限制 |
SWITCH_IO_REQS |
定义会话在数据库采取动作前可执行的IO数目,默认无限制 |
SWITCH_FOR_CALL |
参数为true时,数据库将把切换到其他用户组的会话返回原始用户组(顶层调用结束后返回)。默认为null |
MAX_UTILIZATION_LIMIT |
限制资源用户组上CPU 资源的最大值 |
PARALLEL_TARGET_PERCENTAGE |
指定consumer group可以使用最大parallel server pool的比率 |
PARALLEL_QUEUE_TIMEOUT |
制定并行等待队列中等待超时的时间 |
例如:定义一个对应g2test资源计划、G2资源用户组的资源计划指令,限制相关的等待时间
SQL> EXECUTE dbms_resource_manager.create_plan_directive -
(plan => 'g2test',
group_or_subplan => 'G2',
comment => 'Limit idle time',
max_idle_time => 450,
max_idle_blocker_time => 150);
删除使用exec dbms_resource_manager.DELETE_PLAN_DIRECTIVE
4.2.5 验证未决区
SQL> EXEC DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
PL/SQL procedure successfully completed.
4.2.6 提交未决区
通过提交未决区,实际上是创建了所有必需的条目:资源用户组、资源计划、资源计划指令等,并且使他们活动。
SQL> EXEC DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
PL/SQL procedure successfully completed.
4.2.7 指派用户到资源用户组
用户的初始用户组是default_consumer_group(OTHER_GROUPS),假设打算将前面建立的G2用户切换到对应G2资源用户组,那么首先需要授予他们切换组的权限:
SQL> EXECUTE dbms_resource_manager_privs.grant_switch_consumer_group('G2','G2', true);
PL/SQL procedure successfully completed.
然后在正式将该用户放到G2用户组里
SQL> EXECUTE dbms_resource_manager.set_initial_consumer_group ('G2','G2');
PL/SQL procedure successfully completed.
原始命令为
EXECUTE dbms_resource_manager_privs.grant_switch_consumer_group ('user','group', true);
EXECUTE dbms_resource_manager.set_initial_consumer_group ('user','group');
需要注意的是超级用户sys和system默认在SYS_GROUP用户组
当然也可以定义一个资源组对应原则,用于自动指派资源组:
ATTRIBUTE |
会话的属性类型 |
||
VALUE |
上面属性的值 |
||
CONSUMER_GROUP |
对应的资源用户组 |
||
属性 |
类型 |
描述 |
|
ORACLE_USER |
登陆时 |
数据库用户名 |
|
SERVICE_NAME |
登陆时 |
客户端建立连接时会用 |
|
CLIENT_OS_USER |
登陆时 |
登陆客户端所在主机的操作系统用户 |
|
CLIENT_PROGRAM |
登陆时 |
用于连接数据库的客户端软件名称 |
|
CLIENT_MACHINE |
登陆时 |
建立连接的客户端名 |
|
CLIENT_ID |
登陆时 |
使用DBMS_SESSION.SET_IDENTIFIER创建的会话客户标识 |
|
MODULE_NAME |
运行时 |
应用的模块名 |
|
MODULE_NAME_ACTION |
运行时 |
当前动作和模块名相结合 |
|
SERVICE_MODULE |
运行时 |
服务和模块名的结合 |
|
SERVICE_MODULE_ACTION |
运行时 |
服务名、模块名和动作想结合 |
|
ORACLE_FUNCTION |
运行时 |
Rman或者数据泵操作 |
|
红色标示的项目是在平时经常会用的自动对应用户组属性
比如我们打算G2用户自动对应到G2资源用户组
SQL>EXECUTE DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING
(DBMS_RESOURCE_MANAGER.ORACLE_USER, 'G2', 'G2');
原始命令为:
EXECUTE DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING
(DBMS_RESOURCE_MANAGER.ORACLE_USER, 'user', 'group');
有时创建了多个自动映射,而它们之间会有冲突关系,那么可以定义会话属性的优先级来解决映射关系冲突问题。
4.2.8 启用激活DBRM
通过以下命令启用激活相关DBRM计划
SQL> ALTER SYSTEM SET resource_manager_plan=g2test;
通过以下命令关闭DBRM
SQL> ALTER SYSTEM SET resource_manager_plan='';
或者通过下面的命令也可以激活
SQL> exec DBMS_RESOURCE_MANAGER.SWITCH_PLAN ('random_plan')
另外有个隐藏参数可以让dbrm被彻底给关闭而无法激活,必须慎用
_resource_manager_always_off=TRUE
当然也可以通过时间窗口的方式激活和关闭DBRM,后面测试例中会有详细介绍
但是需要注意的是rac系统中通过时间窗口来控制plan的话,由于时间窗口是对应整个数据库的所有实例,故而该时间窗口所拥有的plan也会应用到所有的实例。
4.3 使用OEM配置Resource Manager
OEM>server选项卡中的rescource manager管理类别中可以完成OEM图形化配置DBRM。
Getting started 界面里面有相关的介绍。
由于图形界面操作较为简单,就不做详细描述,但是通过OEM可以直观而且很方便的配置命令行模式下的各个步,但在测试过程中发现仍有些步骤必须使用命令行完成。下图是通过OEM配置完成并激活的资源管理计划g2test:
4.4 数据库预设的资源计划和资源用户组
11G R2中预设的资源计划如下:
DEFAULT_MAINTENANCE_PLAN |
DEFAULT_PLAN |
DSS_PLAN |
ETL_CRITICAL_PLAN |
INTERNAL_PLAN |
INTERNAL_QUIESCE |
MIXED_WORKLOAD_PLAN |
11G R2中预设的资源用户组如下:
BATCH_GROUP
DSS_CRITICAL_GROUP
DSS_GROUP
ETL_GROUP
INTERACTIVE_GROUP
LOW_GROUP
ORA$DIAGNOSTICS
ORA$AUTOTASK_HEALTH_GROUP
ORA$AUTOTASK_MEDIUM_GROUP
ORA$AUTOTASK_SPACE_GROUP
ORA$AUTOTASK_SQL_GROUP
ORA$AUTOTASK_STATS_GROUP
ORA$AUTOTASK_URGENT_GROUP
OTHER_GROUPS
DEFAULT_CONSUMER_GROUP
SYS_GROUP
其中OTHER_GROUPS不是一个真正的组,是在资源计划活动时,other_groups用于表示所有不属于该资源活动计划的会话。
DEFAULT_CONSUMER_GROUP是用户最初始属于的组
免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐
更多网易技术、产品、运营经验分享请点击。