ITPub博客

首页 > 数据库 > Oracle > Oracle 资源管理(resource manager)

Oracle 资源管理(resource manager)

原创 Oracle 作者:gholay 时间:2014-05-17 16:46:27 0 删除 编辑
假如管理一下具有如下问题的产品数据库:
后台批作业占用了大量的资源,将会阻碍了其他要同时运行的更重要的作业。
如要调度大型作业,但不能预计它们何时才能完成。
作业的优先次序没有得到区分,而致使重要的作业不能预先完成。
某些用户使用过量的CPU时间,从而导致总体资源缺乏,这时,不得不结束其会话。
有些用户在操作中使用非常高的并行度,这会降低系统的整体性能。
所有这些问题都源于DBA不能够在竞争中有效地分配有限的资源,这时,很可能会收到愤怒的客户电话。
针对于这些问题,我们可以使用 Oracle database resource manager 来进行管理。
下面我们以例子的形式来介绍Oracle资源管理(resource manager)的使用。

一、授权
对于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权限。

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

PL/SQL procedure successfully completed.

SQL>

三、创建资源消费组
资源消费组用来根据资源需求将类似的用户放到一起。例子如下:
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>

四、创建资源计划:
资源计划包含各资源消费组之间资源分配的指示。例子如下:
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。

五、创建资源计划指示
资源计划指示(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将完成顶层后被切换以原来的会话。

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

七、指派用户到资源消费组中,如下:
创建用户后,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>

八、启用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>
该资源成功使用。
关于消费组的、资源计划与指示的更改和删除,用法一样,我这里没有列出,有需要的,请查阅相关资料或给我留言。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29196873/viewspace-1163329/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-12-28

  • 博文量
    82
  • 访问量
    652971