Oracle资源管理器(Oracle Database Resource Manager)资源限制与使用详解_附

教程发布:风哥 教程分类:ITPUX技术网 更新日期:2022-02-12 浏览学习:407

Oracle资源管理器(Oracle Database Resource Manager)资源限制与使用详解_附PDF_DBMS_RESOURCE_MANAGER

一、Oracle资源管理器简介

Oracle资源管理器(Oracle Database Resource Manager,以下简称DBRM)管理数据库资源,为不同的会话分配不同的数据库资源。DBRM管理的资源主要包括CPU时间。下面分以下几个章节介绍:
  Oracle DBRM帮你处理哪些问题
  Oracle DBRM是怎样处理这些问题的
  Oracle DBRM包含的内容
  Oracle DBRM资源分配方法
  Oracle DBRM的权限管理
  Oracle DBRM帮你处理哪些问题

1664

  
1、如果数据库的资源分配由操作系统决定,会遇到如下问题:
(1) Excessive overhead过度的开销
Excessive overhead results from operating system context switching (OS 上下文切换)between Oracle Database server processes when the number of server processes is high.
(2) Inefficient scheduling低效率的调度
The operating system deschedules database servers while they hold latches, which is inefficient.
(3) Inappropriate allocation of resources不适当的资源分配
The operating system distributes resources equally among all active processes and cannot prioritize one task over another.
(4) Inability to manager database-specific resources,such as parallel execution servers and active sessions

2、Resource Manager允许数据库控制硬件资源的分配,在多用户并发执行不同优先级的Job时,不同的session可以按照不同的优先级对待,Resource Manager允许我们根据session的属性将session分类到不同的groups,然后对不同的groups分配不同的资源。
使用Resource Manager可以做到如下:
(1) 保护某个session分配到最小的CPU资源,而不管系统的压力和用户的数量。
(2) 针对不同的用户和应用分配不同比例的CPU时间。
(3) 限制用户组成员任何操作的并行深度。
(4) 管理并行队列中并行的执行顺序,紧急应用的并行可以优先于其他低优先级的并行。
(5) 限制group中用户可以使用并行的数量,这样可以确保所有可用的并行资源不会被分配到某一个group用户。
(6) 创建active session pool。Active session pool由同一个group中用户session被允许并发active的最大数量组成。附加的session可以超过这个限制执行,当job队列中断后,可以指定超时时间。
(7) 通过如下方法管理和调用runaway session
1) 修改group可以消耗CPU资源的比率值。
2) 检测session或者call是否超过了指定CPU或者I/O的限制。然后自动的中断session或call,或切换其小于consumer group中指定的CPU资源数。
(8) 阻止优化器估算其运行时间超过指定限制的操作。
(9) 限制session可以被空闲的时间。
(10) 根据工作量的改变允许数据库使用不同的resource plan。可以动态的修改这些resource plan。也可以在Scheduler中使用resource plan。

二、Oracle Resource Manager的组成元素

Element
Description
Resource consumer group
A group of sessions that are grouped together based on resource requirements. The Resource Manager allocates resources to resource consumer groups, not to individual sessions.
Resource plan
A container for directives that specify how resources are allocated to resource consumer groups. You specify how the database allocates resources by activating a specific resource plan.
Resource plan directive
Associates a resource consumer group with a particular plan and specifies how resources are to be allocated to that resource consumer group.

1、 Resource Consumer Groups
(1)Resource Consumer Group是一个用户session的集合,其根据session需要的进程进行归类,当一个session创建之后,它就自动根据用户指定的规则映射到对应的consumer group。
(2)DBA也可以手工的切换session到不同的consumer group。简言之,就是使用PL/SQL包来切换session到指定的consumer group。
(3)因为Resource Manager仅分配资源到一个consumer group,当一个session变成consumer group中的一员时,它的资源分配就由该consumer group决定。
(4)在数据字典里一直存在3个特定的consumer groups,它们不能被修改和删除。

2、 Resource plans
Resource plan是预先定义好的,可以创建任意个resource plan,但是在同一时刻只有一个resource plan是激活的。当resource plan是激活时,它的每个子resource plan控制每个资源分配到不同的consumer group。每个plan必须 包含一个指令,其分配资源到OTHER_GROUPS的consumer group。OTHER_GROUPS适用于所有的session,即使不是当前激活的plan。
3、 Resource Plan Directive
Resource Manager根据当前active resource plan的Resource Plan Directive的设置分配资源到consumer groups。Resource Plan和Resource Plan Directive是父子关系,每个Resource Plan Directive只对应一个consumer group。

三、管理Resource Manager的权限

管理Resource Manager必须具有ADMINISTER_RESOURCE_MANAGER权限,在DBA的role里已经包含了这个权限。
通过DBMS_RESOURCE_MANAGER_PRIVS包来执行ADMINISTER_RESOURCE_MANAGER权限的授予和撤销。该包中两个相关的procedures:
Procedure
Description
GRANT_SYSTEM_PRIVILEGE
Grants the ADMINISTER_RESOURCE_MANAGER system privilege to a user or role.
REVOKE_SYSTEM_PRIVILEGE
Revokes the ADMINISTER_RESOURCE_MANAGER system privilege from a user or role.

如:授予TEST用户ADMINISTER_RESOURCE_MANAGER权限
SYS@ tsid > begin
2 dbms_resource_manager_privs.grant_system_privilege(
3 grantee_name =>'TEST',
4 privilege_name =>'ADMINISTER_RESOURCE_MANAGER',
5 admin_option =>FALSE);
6 end;
7 /

PL/SQL procedure successfully completed.

撤销TEST用户ADMINISTER_RESOURCE_MANAGER权限
SYS@ tsid > begin
2 dbms_resource_manager_privs.revoke_system_privilege(
3 revokee_name =>'TEST',
4 privilege_name =>'ADMINISTER_RESOURCE_MANAGER');
5 end;
6 /

PL/SQL procedure successfully completed.

该包中另外两个procedures:
GRANT_SWITCH_CONSUMER_GROUP
REVOKE_SWITCH_CONSUMER_GROUP

四、Resource Manager管理的资源类型

1、 CPU
2、 Degree of Parallelism Limit
可以限制同一个consumer group中最大的并行数,degree of parallelism是同一个操作的并行执行的数量,使用PARALLEL_DEGREE_LIMIT_P1指令来指定consumer group的并行限制。
Degree of parallelism limit仅对consumer group中的一个操作限制,其不限制同一个consumer group中所有错做的并行度。但可以通过PARALLEL_DEGREE_LIMIT_P1和PARALLEL_TARGET_PERCENTAGE指令属性来实现该功能。
3、 Parallel Target Percentage
这个功能仅从oracle 11gR2开始使用!
如果一个consumer group使用了所有的并行,那么当其他consumer group的高优先级的并行就没有parallel server来分配,可以通过限制特定consumer group的并行数来避免这个问题。
使用PARALLEL_TARGET_PERCENTAGE指令属性可以指定consumer group可以使用最大parallel server pool的比率。
例如,假设总共的parallel server是32,在初始化参数里设置MY_GROUP consumer group的PARALLEL_SERVERS_TARGET为50%,那么该组group最大就只能使用16个parallel servers。
4、 Parallel Queue Timeout
这个功能从Oracle 11gR2以后才有!
当使用并行队列时,如果数据库没有足够的资源来执行并行,那么并行就会进入队列,直到有资源时才变成可用。但是存在一种情况,就是并行等待了很长的时间才执行,可以设置并行在队列中的最长等待时间来避免这种问题。
5、 Active Session Pool with Queuing
可以控制单个consumer group中最大的并发的active sessions的数量。这个最大的数就是active session pool。
6、 Automatic Consumer Group Switching
This methodenables you to control resource allocation by specifying criteria that, if met,causes the automatic switching of a session to a specified consumer group.Typically, this method is used to switch a session from a high-priorityconsumer group—one that receives a high proportion of system resources—to alower priority consumer group because that session exceeded the expectedresource consumption for a typical session in the group.
7、 Canceling SQL and Terminating Sessions
可以使用命令取消或中止long-runing的session。
8、 Execution Time Limit
可以指定操作最大的执行时间,如果超过这个时间,操作将终止。
9、 Undo Pool
可以为每个consumer group指定undo pool,undo pool控制总的undo数量。当总的undo生成量超过了这个限制,那么当前的事务操作生成的undo会被中断,只有undo pool空间足够时,才可以执行。
10、Idle Time Limit
指定session空闲时间,当超过这个时间时,session被中断。

五、下面我们以例子的形式来介绍Oracle资源管理(resource manager)的使用。

1、授权
对于DBA,已经具有执行dbms_resource_manager程序包下的所有过程的权限,但对于其他用户,需要授予名为
administer_resource_manager的系统权限,以便使用Oracle resource manager。如下:
SQL> begin
2 dbms_resource_manager_privs.grant_system_privilege(
3 grantee_name=>'djp01',
4 privilege_name=>'administer_resource_manager',
5 admin_option=>true);
6 end;
7 /

PL/SQL procedure successfully completed.

SQL>

SQL> begin
2 dbms_resource_manager_privs.grant_system_privilege(
3 grantee_name=>'imadmin',
4 privilege_name=>'administer_resource_manager',
5 admin_option=>true);
6 end;
7 /

PL/SQL procedure successfully completed.

SQL>

说明:我们利用dbms_resource_manager_privs.包中的gratn_system_privilege过程为用户djp01和imadmin授予administer_resource_manager权限。

2、创建未决区
未决区是创建与资源消费组,资源计划,资源指示的临时工作区。创建如下:
SQL> exec dbms_resource_manager.create_pending_area;

PL/SQL procedure successfully completed.

SQL>

3、创建资源消费组
资源消费组用来根据资源需求将类似的用户放到一起。例子如下:
SQL> begin
2 dbms_resource_manager.create_consumer_group(
3 consumer_group=>'app',
4 comment=>'app user');
5 end;
6 /

PL/SQL procedure successfully completed.

SQL>

SQL> begin
2 dbms_resource_manager.create_consumer_group(
3 consumer_group=>'admin',
4 comment=>'user admin system');
5 end;
6 /

PL/SQL procedure successfully completed.

SQL>
说明:consuber_group用来指定资源消费组名,connent用来给资源消费组添加注释。还有一些默认的参数,如CPU_MTH,该参数有两个值为:run_to_completion和round_robin(默认)。run_to_completion方法为优先调度那些占用较长时间的会话,
round_robin是使用一个循环调度系统。对于上述,我们使用默认的CPU调度方法创建消费组app和admin。我们可以用如下的数据字典查看:
SQL> select consumer_group,cpu_method,mgmt_method
2 from dba_rsrc_consumer_groups
3 where consumer_group in (upper('app'),upper('admin'))
4 /

CONSUMER_GROUP
------------------------------------------------------------
CPU_METHOD
------------------------------------------------------------
MGMT_METHOD
------------------------------------------------------------
ADMIN
ROUND-ROBIN
ROUND-ROBIN

APP
ROUND-ROBIN
ROUND-ROBIN

SQL>

4、创建资源计划:
资源计划包含各资源消费组之间资源分配的指示。例子如下:
SQL> begin
2 dbms_resource_manager.create_plan(
3 plan=>'membership_plan',
4 cpu_mth=>'ratio',
5 comment=>'new membership resource plan');
6 end;
7 /

PL/SQL procedure successfully completed.

SQL>

说明:plan用来指定资源计划的名称,CPU_mth指定资源消费组之间分配CPU的方法,默认为emphasisI(百分比),另一个值为ratio(比率)。connect添加注释。还有一些其他默认的参数:active_sess_pool_mth此参数确定资源组中活动会话数目的限制;到11g版本,唯一一个值为active_sess_pool_absolute方法。parallel_degree_limit_mth此参数确定某个特定操作的并行度,到11g版本,唯一一个值为parallel_degree_limit_absolute。sub_plan此参数确定是否子计划,默认为false。queueing_mth此参数确定排队会话将执行的顺序,可以选项为fifo_timeout。

5、创建资源计划指示
资源计划指示(resource plan directive)用来把资源计划分配到资源消费组中。例子如下:
SQL> begin
2 dbms_resource_manager.create_plan_directive(
3 plan=>'membership_plan',
4 group_or_subplan=>'app',
5 comment=>'app grooup',
6 cpu_p1=>100);
7 end;
8 /

PL/SQL procedure successfully completed.

SQL> begin
2 dbms_resource_manager.create_plan_directive(
3 plan=>'membership_plan',
4 group_or_subplan=>'admin',
5 comment=>'admin group',
6 cpu_p2=>70);
7 end;
8 /

PL/SQL procedure successfully completed.

SQL>

说明:plan用于指定资源计划,group_or_subplan用于指定资源消费组或子计划,connent用于添加注释。
cpu_pn此参数指定可在消费组或子计划中分配CPU资源。可以使用多层CPU资源分配,以区分出CPU的优先级。如,保证仅在层次一需求后还剩的CPU时,层次二才能获得CPU资源。 ACTIVE_SESS_POOL_P1此参数用来设置活动会话打开的最大数目。 PARALLEL_DEGREE_LIMIT_P1此参数用来设置并行度的限制,MAX_IDLE_TIME此参数用来设置单个会话空间的最大时间。 SWITCH_GROUP此参数指定会话可根据特定的切换条件进行切换的消费组。两个切换组为cancel_sql 和kill_session。与
SWITCH_GROUP有关参数的设置,SWITCH_IO_MEGABYTES此参数指定会话在数据库在采取措施前可以传送的IO字节数据。 SWITCH_IO_REQS指定可执行的IO数目。SWITCH_FOR_CALL如果设置为true,Oracle将完成顶层后被切换以原来的会话。

6、验证并提交未决区
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.

SQL>

我们用如下的方式进行查看:
SQL> select group_or_subplan,cpu_p1,cpu_p2,cpu_p3,status
2 from dba_rsrc_plan_directives
3 where plan = upper('membership_plan')
4 /

GROUP_OR_SUBPLAN CPU_P1
------------------------------------------------------------ ----------
CPU_P2 CPU_P3
---------- ----------
STATUS
------------------------------------------------------------
APP 90
0 0

ADMIN 0
70 0

SQL>

7、指派用户到资源消费组中,如下:
创建用户后,Oracle会分配一个默认的资源消费组,为default_consumer_group,如果指派用户到其他消费组,那么,
需要授予如下权限:
SQL> exec dbms_resource_manager_privs.grant_switch_consumer_group-
> (grantee_name=>'djp01',-
> consumer_group=>'app',-
> grant_option=>true);

PL/SQL procedure successfully completed.

SQL>

SQL> exec dbms_resource_manager_privs.grant_switch_consumer_group-
> (grantee_name=>'imadmin',-
> consumer_group=>'admin',-
> grant_option=>true);

PL/SQL procedure successfully completed.

SQL>

下面我们进行用户分配:
SQL> exec dbms_resource_manager.set_initial_consumer_group('djp01','app');

PL/SQL procedure successfully completed.

SQL> exec dbms_resource_manager.set_initial_consumer_group('imadmin','admin');

PL/SQL procedure successfully completed.

SQL>

关于会话资源消费组的自动指派和消费组之间的切换及复杂管理,我这里没有列出,方法一样,只是多了几道手续而已,有需要的请查阅相关资料或给我留言。
下面,我们查看用户djp01,imadmin的属性:
SQL> select username,initial_rsrc_consumer_group
2 from dba_users
3 where username in(upper('djp01'),upper('imadmin'))
4 /

USERNAME
------------------------------------------------------------
INITIAL_RSRC_CONSUMER_GROUP
------------------------------------------------------------
IMADMIN
ADMIN

DJP01
APP

SQL>

8、启用Oracle Resource Manager
通过设置init.ora或spfile.ora文件中的resource_manager_plan参数来进行启用,如下:
SQL> alter system set resource_manager_plan = membership_plan
2 /

System altered.

SQL>

说明:如果需要停止,那么将其设置为空即可(resource_manager_plan=' ')。下面,我们查看当前的活动资源:
SQL> select name,is_top_plan
2 from v$rsrc_plan
3 /

NAME IS_TOP_PLA
---------------------------------------------------------------- ----------
MEMBERSHIP_PLAN TRUE

SQL>

该资源成功使用。

本文标签:
网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】
【下一篇】