Oracle资源管理器

来源:互联网 发布:sql清除两天前的数据 编辑:程序博客网 时间:2024/06/05 09:25

Oracle资源管理器

Oracle资源管理器简介

   Oracle资源管理器(Oracle Database ResourceManager,以下简称DBRM)管理数据库资源,为不同的会话分配不同的数据库资源。DBRM管理的资源主要包括CPU时间。下面分以下几个章节介绍:

•Oracle DBRM帮你处理哪些问题
•Oracle DBRM是怎样处理这些问题的
•Oracle DBRM包含的内容
•Oracle DBRM资源分配方法
•Oracle DBRM的权限管理

Oracle DBRM帮你处理哪些问题

     当数据库服务器资源由操作系统来分配时,你可能会遇到以下问题:

•过多的资源开销
当服务器进程数很多时,操作系统进程和数据库服务进程间的来回切换会导致CPU占用率或内存使用率高。

•低效的调度
操作系统调度数据库服务时占用寄存器,这样做效率很低。

•资源分配的不合理
操作系统平均分配系统资源给活动的进程(对数据库进程来说),不能判断它们的优先级高低。

•不能管理数据库特有的资源,例如:并行执行的服务数和活动的会话数。

Oracle RMDB是如何解决这些问题的

     OracleDBRM把硬件等资源的分配交给数据库服务器本身来解决以上问题。在某个数据库环境中,可能同时存在着多个用户请求数据库服务,并且他们所要完成的任务优先级不同,那么我们就应该区别对待这些会话请求。OracleDBRM能让你根据各个会话的应用属性,将它们分组,然后为每组分配不同的数据库资源,最大化提高你的数据库应用性能。

Oracle DBRM的具体功能:

•DBRM可以在系统启动时,限制某些会话请求只分配到最少的进程资源和用户使用上限。
•为不同的用户或应用分配不同的CPU时间。在一个数据仓库应用中,ROLAP(relational online analyticalprocessing)应用分配到的比例就应该比批处理任务高。
•限制同一组内用户对数据库操作的并行度。
•建立一个活动的会话池。会话池由一组用户活动会话组成,对某一组用户来说,同一时间活动的会话数有特别的数量上限。如果会话池满了,新的会话请求会被放入等待队列,而且你还可以设置一个时间上限,超过这个上限,等待队列会被停止。会话池限制了同一时间活动的会话请求数量,保证了活动的会话请求更快的完成任务。
•管理长时间未响应的会话或请求,这些会话或请求往往占用了很多的CPU或I/O资源。这些会话能被自动的结束掉,或者将它们换到其他低级的组去。
•优化器会估算请求的运行时间,如果超出了某个显示,DBRM会阻止它的请求。
•限制一个会话的空闲等待时间。
•根据不同的资源分配需求,配置不同的模式。你可以动态的改变这些模式,例如,从白天运行模式变到夜间运行模式,而不用重启数据库服务。你还可以通过Oracle调度器来管理模式的改变。详细内容请见:Chapter 26, "Oracle Scheduler Concepts"。


Oracle DBRM的组成元素

下表介绍了Oracle RDMB的组成元素。

元素                 描述
资源使用组      根据会话的资源请求将它们分为一组。DBRM按组管理会话的资源分配,而不是按单个的会话。
资源计划          资源计划包含一系列指令,这些指令就决定了给每个组的资源分配配置。要执行资源的分配,你只需执行相应的资源计划。
资源计划指令  资源计划指令指定了资源计划和组之间的映射关系。

      Oracle是通过存储过程来实现这些功能的,你可以在以下包里找到这些存储过程:DBMS_RESOURCE_MANAGER.

资源使用组

   资源使用组由许多用户会话组成,这些会话有相同的资源使用请求。新创建一个会话时,DBRM会根据你的设定自动把它分配到某个组。数据库管理员还可以手动的调整某个会话所属的组。

   下面三类特别的组是系统组,它们不能被修改或删除。

•SYS_GROUP
•DEFAULT_CONSUMER_GROUP
•OTHER_GROUP 


资源计划指令

  RDMB根据当前活动资源计划中的一系列资源计划指令为资源使用组分配资源。资源计划和指令间有着一对多的关系,资源计划中不能包含两条相同的指令。

  有很多种不同分配资源的指令,例如给某个组分配一定百分比的总的CPU时间,或者限制一个组内最大活动的会话数。

资源计划

  在一个数据库中同一时间只有一个资源计划起作用。一个资源计划还可以包含子资源计划。每个资源计划都必须包含给OTHER_GROUP分配资源的指令。


子资源计划

      资源指令除了给组分配资源,还可以为其他资源计划分配资源,被分配资源的计划称为子计划。

DBRM管理的内容

      资源分配方法指定资源分配给组或子计划的百分比。DBRM管理的资源包括以下内容:

CPU Time

Active Session Pool WithQueuing

      你可以设定某组的最大活动会话数,会话池满后,新的会话会被放入等待队列。

Degree Of Parallelism Limit

      限制并行运行的会话数。

Automatic Consumer GroupSwitching

      此功能类似于触发器机制,当某个会话满足设定的条件,它会自动被分配到其他组中去。

Cancelling SQL and TerminatingSessions

      DBRM可以取消那些长时间运行的SQL查询或会话活动。

Excution Time Limit

      DMRM可以估算某个操作的运行时间,如果超过了设定的值,数据库不会执行它。

Undo Pool 

Idle Time Limit

     设定一个会话的最长未响应时间。


================================================================


oracle 资源管理器

一、资源管理器(DBRM)由三个要素组成:
资源消费群(resource_consumer_group)
资源计划(resource_plan)
资源计划指令(resource_plan_directive)
 
执行与DBRM有关的操作,必须具有 administer_resource_manager 系统权限。
 
二、未决域(pending area)
DBRM的三个要素都必须创建在未决域中,然后提交。
 
1、创建未决域
exec dbms_resource_manager.create_pending_area;
 
2、验证未决域
exec dbms_resource_manager.validate_pending_area;
验证域中的内容是否合法。
 
3、清除未决域
exec dbms_resource_manager.clear_pending_area;
执行此命令后,未决域以及未决域中的内容一起被删除。
 
4、提交未决域
exec dbms_resource_manager.submit_pending_area;
执行此命令后,相当于执行了验证、提交、清除三个命令。未决域中的内容会被存储在数据字典中,等待启用。
 
三、资源消费群
一个用户可以隶属于多个消费群,但一个会话同一时间只能隶属于一个消费群。
ORACLE 已经预定义了4个消费群:
 default_consumer_group :未分配消费群的用户和会话。
other_groups :当前的资源计划中没有明确指定资源分配所有消费群。任何一个资源计划中都必须包含此群。
sys_group 和 low_group :用于执行系统计划的消费群。
 
1、创建、更新、删除消费群
 创建:
exec dbms_resource_manager.create_cosumer_group('群名','注释');
 
更新:
exec dbms_resource_manager.update_consumer_group('群名','注释');
 
删除:
exec dbms_resource_manager.delete_consumer_group('群名');
执行此命令后,隶属于此群的用户和会话将自动转到 default_consumer_group.
 
 2、将用户会话分配给消费群(消费群映射)
可以基于会话的属性将会话动态分配给消费群,成为消费群映射。
 
(1)设定映射:
dbms_resource_manager.set_consumer_group_mapping(
attribute => oracle_user,
value => 'user1,
consumer_group => 'low_group');
 
如上,当会话的oracle用户属性值为user1时,就将之分配给消费群low_group。
 
(2)设定映射优先权:
由于可能会出现某会话的两个属性分别满足两个不同的映射规则,那么该服从哪个规则呢?——可以设定各个属性的优先权,服从优先级高的属性。
dbms_resource_manager.set_mapping_priority(
oracle_user => 1,
client_os_user => 2);
 
(3)动态转换会话的消费群
 基于会话的唯一标识转换消费群:(会话唯一标识由 session_id 和session_serial 共同组成,这两个参数的值在 v$session 视图中)。
dbms_resource_manager.switch_consumer_group_for_sess(
session_id => '56',
session_serial => '106',
consumer_group => 'low_group');
 
基于会话所属的用户转换消费群:(将用户下的所有会话转换消费群)
dbms_resource_manager.switch_consumer_group_for_user(
user => 'user1',
consumer_group => 'low_group');
 
用户转换自己当前会话的消费群:(使用 dbms_session包)
dbms_session.switch_current_consumer_group(
new_consumer_group => 'low_group');
 
转换自己当前会话的消费群需要特定权限:
dbms_resource_manager_privs.grant_switch_consumer_group(
grantee_name => 'user1',
consumer_group => 'low_group',
grant_option => 'false');
 
撤销此权限:
dbms_resource_manager_privs.revoke_switch_consumer_group(
grantee_name => 'user1',
consumer_group => 'low_group');
 
四、资源计划
分为简单资源计划和复杂资源计划。
 
1、简单资源计划
有如下特点:
(1)三要素在一个过程中定义。
(2)只能分配cpu资源。
(3)只能使用emphasis方式分配cpu资源(即百分比)。
(4)分配的消费群最大数为8个。
 
创建:
dbms_resource_manager.create_simple_plan(
simple_plan => '计划名',
consumer_group1 => '消费群1',
group1_cpu => 50,
consumer_group2 => '消费群2',
group2_cpu => 50);
 
 
2、复杂资源计划
特点:
(1)三要素必须单独创建。
(2)可以嵌套子计划。
 
创建:
dbms_resource_manager.create_plan(
plan => '计划名',
comment => '注释');
 
3、修改资源计划:
dbms_resource_manager.update_plan(
plan => '计划名',
new_属性 => '新值');
 
4、删除资源计划:
dbms_resource_manager.delete_plan('计划名');

dbms_resource_manager.delete_plan_cascade('计划名');
加上cascade参数,删除计划内的要素。
 
五、计划指令
 创建:
dbms_resource_manager.create_plan_directive(
plan => '计划名',
group_or_subplan => '消费群或子计划',
资源限制参数);
 
注:可以为子计划创建指令,但只能分配cpu资源。
 
更新:
dbms_resource_manager.update_plan_directive(
两个必需参数,
new_属性 => '新值');
 
删除:
dbms_resource_manager.delete_plan_directive(
两个必需参数);

0 0
原创粉丝点击