ORACLE  DBRM探讨(2)

勿忘初心2018-11-28 09:27

此文已由作者赵欣授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

                

第四章   DBRM的配置方法

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

确定某个特定操作的并行度,只有一个唯一方法 PARALLEL_DEGREE_LIMIT_ABSOLUTE

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是用户最初始属于的组



免费领取验证码、内容安全、短信发送、直播点播体验包及云服务器等套餐

更多网易技术、产品、运营经验分享请点击