为什么要使用Oracle资源管理器
当数据库服务器资源由操作系统来分配时,你可能会遇到以下问题:
1、过多的资源开销 : 当服务器进程数很多时,操作系统进程和数据库服务进程间的来回切换会导致CPU占用率或内存使用率高。
低效的调度 :操作系统调度数据库服务时占用寄存器,这样做效率很低。
资源分配的不合理 :操作系统平均分配系统资源给活动的进程(对数据库进程来说),不能判断它们的优先级高低。
不能管理数据库特有的资源 ,例如:并行执行的服务数和活动的会话数。
Oracle资源管理器简介
Oracle资源管理器(Oracle Database Resource Manager,以下简称DBRM)管理数据库资源,为不同的会话分配不同的数据库资源。资源管理器有三个部件组成:资源用户组(Resource consumer group )、资源规划(Resource plan )及资源计划指令(Resource plan directives) 。具体描述参见下表
元素 | 描述 |
资源使用组 | 根据会话的资源请求将它们分为一组。RDMB只能为资源用户组指定所能使用的资源, 不能按单个用户进行指定。 |
资源计划 | 资源计划包含资源计划系列指令,这些指令就决定了给每个组的资源分配配置。 要执行资源的分配,你只需执行相应的资源计划。 |
资源计划指令 | 资源计划指令指定了资源计划和组之间的映射关系,表示某种特定的资源在 用户之间如何分配 。 资源计划和指令间有着一对多的关系,资源计划中不能 包含两条相同的指令。 |
子资源计划
资源指令除了给组分配资源,还可以为其他资源计划分配资源,被分配资源的计划成为子计划。下图是一个包含子计划的资源计划的例子。
用户资源管理的内部程序包
用户资源管理涉及到的数据包主要有两个:DBMS_RESOURCE_MANAGER和DBMS_RESOURCE_MANAGER _PRIVS。其中包DBMS_RESOURCE_MANAGER主要是用于建立资源计划,建立资源用户组,建立资源分配方法等用户资源相关的管理;而DBMS_RESOURCE_MANAGER _PRIVS的主要用途是进行用户资源管理的权限控制。
对于一个简单的用户资源管理计划来说,仅仅使用DBMS_RESOURCE_MANAGER包就足够了,所以下面仅仅对DBMS_RESOURCE_MANAGER的使用进行详细的说明。
资源管理器的默认设置
默认的三个系统资源计划:internal_plan、internal_quiesce,system_plan。其中internal_plan、internal_quiesce只是一个空壳,里面没有任何资源计划,可以通过对这两个资源计划进行修改来满足我们的需求。而system_plan只对cpu进行了限制。
默认的三个用户组
sys_group:作为sys和system用户的默认用户组。
other_group:如果当前用户不属于当前资源计划中的任何用户组,则会被纳入other_group.任何资源计划都必须包含other_group。
low_group:表示该用户对资源的请求级别是最低的。默认没有用户进入该用户组。
任何一个数据库用户都必须纳入到一个用户组中,该用户组被叫做初始用户组(initial consumer group)。如果没有显示的指定初始用户组,那么该用户的初始用户组为default_consumer_group。
Oracle资源管理
创建资源用户组
其中Scheduling Policy表示在同一用户组中的用户之间如何分配CPU
Round Robin:在用户组成员之间平均分配CPU
Run to Completion:运行时间最长的用户优先获得CPU
进行初始化用户组的设置
用户组与资源的映射关系
资源管理器提供了6种映射资源用户的方法。这6种映射方法分别是,指定通过某个特定操作系统用户登录到数据库所产生的session属于某个用户组;指定某个特定的客户端计算机名称登录的数据库所产生的session属于某个用户组;指定某个应用程序登录到数据库所产生的session属于某个用户组。指定通过某个服务名登录到数据库所产生的session属于某个用户组;指定通过特定模块登录到数据库所产生的session属于某个用户组;指定通过特定模块并执行特定动作登录到数据库所产生的session属于某个用户组。
用户组与资源映射的优先级
由于我们可以设置登录操作系统的用户所对应的用户组(比如oracle用户对应OS_GRP),同时设置登录数据库的用户对应的用户组(比如用户HR属于OLTP_GRP)。因此,就存在一个问题:如果两者的设置矛盾怎么办?在资源管理器中通过指定映射关系的优先级来解决这个问题
创建资源计划
Active this plan:激活该资源计划。
我们也可以在sqlplus里激活该资源计划
SQL> alter system set resource_manager_plan='MY_DAY_PLAN';
System altered.
SQL> show parameter resource_manager_plan
NAME TYPE VALUE
------------------------------------ ----------------------------- ------------------------------
resource_manager_plan string MY_DAY_PLAN
Automatic Plan Switch Enabled:表示该计划激活后可以被其他的时间窗(window)激活其他计划。
在资源计划中我们一共可以设置8个CPU使用的优先级,级别1为最高,级别8为最低。注意,在不同级别中CPU的总额不能超过100%。同时,只有在CPU使用率达到100%的时候,这里指定的不同级别所使用的CPU百分值才会生效。也就是说,即使系统完全空闲时,那么other_group的用户登录系统一样也可以使用100%的CPU。而如果当other_group用户在执行操作过程中sys_group组用户登录数据库,造成系统CPU满负荷运转。那么Oracle会优先为sys_group组分配CPU,只有当sys_group执行完毕后才会为other_group组成员分配CPU。
拿上面的例子来说,假设OLTP_GRP和BATCH_GRP分别获得了系统的80%和20%的CPU资源,那么作为下一级LEVEL 3的OTHER_GROUPS将不会获得任何CPU的资源。当BATCH_GRP和OLTP_GRP分别获得了系统的40%和10%的CPU资源,那么作为下一级LEVEL 2的OTHER_GROUPS将会获得50%的CPU资源。
换句话说,LEVEL 3所能获得的全部资源就是LEVEL 2所未能使用的那部分资源。
优先级:LEVEL1 > LEVEL 2 > LEVEL 3……LEVEL N-1>LEVEL N
需要强调的一点是OTHER_GROUPS这个资源用户组。任何一个资源计划必须要包括这个OTHER_GROUPS用户组,如果你的资源计划没有包括这个用户组,那么将会得到一个ORA-07453的错误,要求你必须添加此用户组。这个用户组的作用就是作为一个候选项,当一个没有匹配到任何资源用户组的SESSION连接到数据库的时候会自动的匹配到OTHER_GROUPS下面,按照OTHER_GROUPS的资源限定执行SQL。
另外一个需要强调的是用户资源限定的生效条件。拿上面的例子来说,当系统的CPU使用率没有达到100%的时候,MY_DAY_PLAN这个资源计划并不会生效,各个资源用户也不会按照限定来分配CPU的使用。仅仅当CPU的使用率为100%的时候,资源计划才可以发挥功效,来限制各个资源用户组的CPU分配。这点是常常被大家忽略的,一定特别注意下。
使用DBMS_RESOURCE_MANAGER包创建的sql如下
BEGIN
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.create_plan(plan => 'MY_DAY_PLAN',comment => '');
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN=>'MY_DAY_PLAN',GROUP_OR_SUBPLAN => 'SYS_GROUP',COMMENT => ' ',CPU_P1 => 100);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN=>'MY_DAY_PLAN',GROUP_OR_SUBPLAN => 'OLTP_GROUP',COMMENT => ' ',CPU_P1 => 0,CPU_P2=>80);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN=>'MY_DAY_PLAN',GROUP_OR_SUBPLAN => 'BATCH_GROUP',COMMENT => ' ',CPU_P1 => 0,CPU_P2=>20);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN=>'MY_DAY_PLAN',GROUP_OR_SUBPLAN => 'OTHER_GROUPS',COMMENT => ' OTHER_GROUPS',CPU_P1 => 0, CPU_P2 => 0,CPU_P3=>100);
dbms_resource_manager.submit_pending_area();
dbms_resource_manager.switch_plan( plan_name => 'MY_DAY_PLAN', sid => 'orcl' );
END;
/
验证资源计划是否对CPU进行分配
思路,让BATCH_GRP和OLTP_GRP分别运行dead.sql脚本,该脚本为死循环的开方脚本,可消耗系统cpu而不是消耗系统内存。
dead.sql脚本如下
[oracle@dg1 ~]$ cat dead.sql
declare
i number;
j number;
begin
i:=0;
loop
j :=sqrt(i);
i :=i+1;
end loop;
end;
/
通过下列语句查看当前会话的资源用户组
SQL> conn hr/hr;
Connected.
SQL> select resource_consumer_group from v$session
2 where sid =(select sid from v$mystat where rownum=1);
RESOURCE_CONSUMER_GROUP
------------------------------------------------------------------------------------------------
OLTP_GRP
SQL> show user;
USER is "SCOTT"
SQL> select resource_consumer_group from v$session
2 where sid =(select sid from v$mystat where rownum=1);
RESOURCE_CONSUMER_GROUP
--------------------------------------------------------------------------------
BATCH_GRP
两个会话同时执行dead.sql
SQL> @/home/oracle/dead.sql
可以看到BATCH_GRP用户组消耗了1795.99秒的CPU时间,可以看到OLTP_GRP用户组消耗了7125.53秒的CPU时间,同时图饼也显示BATCH_GRP消耗20%的CPU资源,OLTP_GRP消耗80%的CPU资源。
参考至:《教你成为10g OCP》韩思捷著
http://mtvwang.iteye.com/blog/561715
http://2jliu.itpub.net/post/21805/487037
本文原创,转载请注明出处、作者
如有错误,欢迎指出
邮箱:czmcj@163.com
相关推荐
为了解决这些问题,Oracle资源管理器应运而生。它可以按照数据库会话(sessions)的属性来划分会话用户组,并对会话组进行合理分配系统硬件资源,以优化应用环境。具体来说,资源管理器可以实现以下功能: 1. **保证...
### Oracle 11gR2-ASM 超详细安装手册知识点详解 #### 一、硬、软件环境 本文档提供了在Linux环境下安装Oracle 11gR2及ASM的具体步骤与注意事项。以下是对硬件与软件环境的具体描述: 1. **硬件**: - 服务器...
在Oracle数据库中,`PROFILE`是一种非常重要的机制,它可以用来控制和管理用户对数据库资源的使用情况。通过设置不同的资源限制,管理员能够确保数据库资源得到合理的分配和利用,防止个别用户过度消耗资源导致系统...
根据提供的标题、描述和标签,本文将围绕“Oracle大型数据库系统在AIX UNIX上的实战详解”这一主题展开,深入探讨Oracle数据库在AIX操作系统中的安装、配置与管理等关键技术点。 ### Oracle大型数据库系统概述 ...
- **配置系统支持 Oracle Database**:包括检查硬件和软件需求、创建所需的用户组和用户等。 - **使用典型安装选项安装 Oracle Database**:通过本地文件系统进行安装。 - **配置通用用途的 Oracle Database 安装...
- **动态资源管理**:根据系统负载动态调整资源分配,确保集群整体性能最优。 - **多实例负载均衡**:通过智能路由将用户请求分散到不同的实例上,避免单点过载。 - **数据保护**:采用冗余存储策略,如镜像和复制...
- **建立数据库用UNIX管理组**:用于管理数据库用户的组。 - **为安装程序清单建立UNIX组**:用于管理安装过程中产生的文件和目录。 - **建立Oracle帐户**:创建Oracle用户账户。 - **为Apache建立帐户**:如果...
### Oracle 11g 集群安装与配置详解 #### 一、Oracle RAC 11g 集群概述 Oracle Real Application Clusters (RAC) 是一种集群技术,能够在一个或多个服务器上运行单个 Oracle 数据库实例。这种架构提供了高可用性和...
2. 组与用户创建:在每个节点上,你需要创建用于安装和运行 Oracle 软件的用户和组,如 oinstall、dba、asmadmin、asmdba、asmoper 和 oper,同时设置相应的权限。 3. 存储配置:确保服务器有满足安装要求的硬盘...
### Oracle UCM安装手册知识点详解 #### 一、环境要求 **Oracle UCM**是一款功能强大的文档资源管理服务器...通过以上详细步骤,可以确保Oracle UCM的成功安装与配置,从而为企业提供高效稳定的文档资源管理服务。
### Oracle ASM 安装配置详解 #### 一、ASM简介 **ASM**(Automatic Storage Management)是Oracle数据库10g及之后版本中的一项重要技术。它为数据库管理员提供了一个统一的存储解决方案,能够有效地管理和优化...
#### 四、Oracle资源管理 1. **会话资源管理**: - 会话资源包括Datafile、Lock、Process和Session等。 - 可以通过`dba_objects`视图查看会话资源的使用情况。 2. **无效对象管理**:检查数据库中的无效对象,如...
Oracle VM Manager 是一款由 Oracle 提供的虚拟化管理平台,它在功能上与 VMware 的 vCenter 类似,主要用于管理和监控 Oracle VM Server(一种基于 Xen 的虚拟化解决方案)上的虚拟机和资源池。值得注意的是,...
- **dba 组**: oracle 用户必须是 dba 组的一员。 ##### 2.2. 网络配置 - **主机名**: 配置每个节点的主机名。 - **DNS 解析**: 确保每个节点能够正确解析其他节点的主机名。 - **NTP 同步**: 配置 NTP 时间同步...
- HP-UX 操作系统版本需要与 Oracle RAC 版本兼容。 - 确保所有必要的补丁程序已安装。 - 安装所需的软件包和库。 3. **网络配置**: - 配置集群内部通信所需的 IP 地址。 - 设置主机名解析。 - 配置正确的 ...
### Linux 5 下 Oracle 11g 安装与配置详解 #### 概述 本文档旨在提供关于如何在 Oracle Enterprise Linux 5 (OEL5) 系统中安装 Oracle 数据库 11g 第 1 版的详细指导。无论您是否具备 Linux 或 Oracle 的经验,本...
- 修改`/etc/security/limits`文件,将`fsize`参数设为`-1`,以取消文件大小限制。 - 调整操作系统的异步I/O特性,通过`smitty aio`命令,设置服务器数量的最小值为10,最大值为20,并确保重启时状态为`available`。...
- **集群资源管理**:讲解如何管理和优化 RAC 环境下的资源分配。 - **全局服务定位器 (GSLB)**:介绍 GSLB 在多站点部署中的作用以及如何实现负载均衡。 #### 二、RAC 安装与配置 本部分详细介绍了 Oracle 11g ...