关于Oracle数据库资源管理器
Oracle数据库资源管理器(资源管理器)能够管理数据库中争夺系统和数据库资源的多个工作负载。
一 资源管理器为工作负载管理提供什么解决方案?
当操作系统来决定数据库资源的分配时,可能会遇到使用工作负载管理的下面的问题:
- 过度开销
当服务器进程的数量很高时,在Oracle数据库服务器进程之间的操作系统上下文切换时,会产生过多的开销。
- 低效的调度
操作系统不会调度当数据库服务器持有锁存器时,效率很低。
- 不合适的资源分配
操作系统在所有活动过程中平均分配资源,不能将一个任务优先分配给另一个任务。
- 无法管理特定于数据库的资源,比如并行执行服务器和活动会话。
资源管理器通过允许数据库更多地控制如何分配硬件资源来帮助克服这些问题。在一个运行不同优先级作业的多并发用户会话的环境中,所有会话不应被平等对待,资源管理器能够使你基于会话属性将会话分成组,然后以一种优化应用程序环境的硬件利用率的方式分配资源给这些组。
使用资源管理器,你能够:
- 保证一定的会话都是最低限度的CPU,而不用管系统的负载和用户的数量;
- 通过分配CPU时间的百分比给不同的用户和应用程序来分配可用的CPU。在数据仓库中,分配给ROLAP的比率要高于批量作业;
- 限制用户组成员执行的任何操作的并行度;
- 管理并行语句队列中并行语句的顺序,重要应用程序的并行语句能够被排在用户的低优先级的并行语句前面;
- 限制一组用户能够使用的并行服务器的数量,这确保了所有可用的并行服务器不会只分配给一组用户;
- 创建一个活动会话池。活动会话池是由指定的在一组用户内允许并发活动的的用户会话的最大数量组成,超出最大值的额外会话将排队等待执行,但你可以指定一个超时时间,超出超时时间,排队的作业将会终止。活动会话限制了竞争资源的活动会话的总数,从而使活动会话能够取得更快的进展。
- 通过下面的方法管理失控的会话或调用:
- 通过对一个组可以使用的CPU的百分比设置绝对的限制;
- 通过探测当会话或者调用消耗超过指定的CPU或者IO的数量时,然后自动的终止会话或调用,或者切换到分配少量CPU的消费组,这将有效的缓解失控的会话或者调用的影响。
- 防止操作的执行,该操作通过优化器评估将会比指定的限制运行更长的时间;
- 限制会话可以空闲的时间,这进一步可以定义为那些阻塞其他会话的会话。
- 允许数据库根据不断变化的工作负载需求使用不同的资源计划。可以动态改变资源计划,比如,从白天的资源计划到晚上的资源计划,而不必关闭并重启实例。还可以使用Oracle调度器安排资源计划的更改。
二 资源管理器的要素
资源计划的要素包括:
- 资源消费组(Resource consumer group)
是一组会话,根据资源需求分组在一起,资源管理器分配资源给资源消费组,而不是单独的会话;
- 资源计划(Resource plan)
是一个容器,它存放指令,指定资源如何分配给资源消费组,可以通过激活一个特定的资源计划来指定数据库如何分配资源;
- 资源计划指令(Resource plan directive)
关联资源消费组和特定的计划,并指定资源如何分配给该资源消费组。
可以使用DBMS_RESOURCE_MANAGE来创建和维护这些要素,这些元素存储在数据字典中,可以通过数据字典视图来查看它们的信息。
关于资源消费组
资源消费组是用户会话的集合,它们根据处理需求分组在一起。当会话创建时,它根据你设置的映射规则自动映射到一个消费组。作为DBA,你可以手动将会话切换到不同的消费组,同样,应用程序可以运行PL/SQL包将它的会话切换到一个特定的消费组。
由于资源管理器只对消费组分配资源(例如CPU),当会话变成消费组的成员时,它的资源分配由消费组的分配决定。
有一些特殊的消费组始终存在于数据字典中,它们不能被修改和删除,分别是:
- SYS_GROUP
它是所有会话的初始化消费组,由SYS或者SYSTEM创建,它可以被session-to-consumer组映射规则覆盖。
- OTHER_GROUPS
这个消费组包含没有分配给消费组的所有会话,每个资源计划必须包含一个指向OTHER_GROUP的指令。
关于资源计划指令
资源管理器根据属于当前活动资源计划的资源计划指令集把资源分配给消费组,资源计划和它的资源计划指令存在父子关系。每个指令引用一个消费组,没有当前活动计划的两个指令能引用同一个消费组。
指令有多种方式可以限制消费组的资源分配,比如,它可以控制消费组的CPU占总CPU的百分比,并且它可以限制消费组中活动会话的总数量。
关于资源计划
除了Oracle数据库预定义的资源计划外,你可以创建任意数量的资源计划。但是,一次只能有一个资源计划是激活的。当资源计划激活时,它的每个子资源计划指令控制不同消费组的资源分配。每个计划必须包含一个指令,该指令分配资源给名为OTHER_GROUP的消费组,OTHER_GROUP适用于属于不是当前激活计划的消费组的所有会话。
示例:一个简单的资源计划
关于子计划
资源计划指令可以引用另一个资源计划,而不是引用消费组。在这种情况下,该计划成为子计划。子计划本身具有将资源分配给消费组和其他子计划的指令。然后,资源分配方案像这样工作,最高资源计划(当前活动计划)将资源分给消费组和子计划。每个子计划分配其在消费组和子计划中全部资源分配的一部分。你可以使用任意数量的子计划创建分层计划。
你可以按照创建资源计划的方式创建资源子计划,要创建仅作为子计划的计划,你可以使用dbms_resource_manager.create_plan的sub_plan参数。
在任何顶级计划中,你只能引用子计划一次,子计划不需要指向OTHER_GROUP的指令,并且不能设置为资源计划。
示例:使用子计划的资源计划
关于资源管理器管理权限
管理资源管理器,必须有系统权限administer_resource_manager权限,这个权限(with admin option)通过DBA角色授予了数据库管理员,系统管理员可以执行dbms_resource_manager包的所有过程。
该权限的授予和收回,必须通过dbms_resource_manager包实现,过程分别为grant_system_privilege和revoke_system_privilege。
未完待续。。。。。。
参考官方文档