oracle之三资源管理
Oracle 资源管理
12.1 为什么要使用Oracle资源管理器
传统意义上,系统的资源分配是由OS来完成的,但是对于数据库资源,OS分配资源会带来一些问题:
以Linux为例,最为突出的一个问题是:Linux的资源调度是基于进程的,比如对于CPU的资源一般都是采用轮循的方法针对进程分时间片.也就是说Linux无法区分Oracle的后台进程和服务器
进程之间谁轻谁重,也没有办法对Oracle用户以session角度考虑资源的配比。
Oracle Resource Manager就是把原本由OS管理的硬件资源交给Oracle来管理。
12.2 Oracle 资源管理的基本概念:(PPT-II-406-)
1)资源使用组:Resource consumer group
一个资源使用组由一组具有相似请求的用户组成,一个组可以包含许多用户,一个用户又可以是多个组的成员(这个很重要),实际中多个session使用一个用户名访问数据库是很普遍的,
但是同一时刻,每个session只能有一个组作为这个session的有效使用者组。当新创建一个session时,oracle会根据你的设定自动把它分配到某个组(初始化组)。如果以某个用户登录的
session,它的用户名是属于多个组的,数据库管理员还可以手动的切换这个session所属的组。
下面三类特别的组是系统定义的组,它们不能被修改或删除。
SYS_GROUP //sys和system属于这个组
DEFAULT_CONSUMER_GROUP //没有指定用户属于哪个组时缺省放在这个组里
OTHER_GROUP //在资源计划里除了指定组以外的用户都默认在这个组里
需要强调的一点是OTHER_GROUPS,它是绑定在资源计划中的,所有资源计划必须要包括OTHER_GROUPS组,这个组的作用就是作为一个后选项,当一个没有匹配到任何资源组的
SESSION连接到数据库的时候会自动的匹配到OTHER_GROUPS下面,受制于OTHER_GROUPS的资源限定。
2)资源计划:Resource plan
就是Oracle把数据库资源按一定方法来分配,可以限制每个组占用资源的比例。
在一个数据库中同一时间只能有一个资源计划active。(也可以无任何资源计划active)。一个资源计划还可以包含子资源计划。
查看当前被激活的资源计划的三个办法:
一是 show resoure_manager_plan参数 注意:参数resource_limit
二是命令select name,is_top_plan from v$rsrc_plan;
三是通过OEM查看资源管理信息
3)资源计划指令:Resource plan directives
资源管理的目的是实现组或session对于资源分配的优先级,一部分用户在某时间内可以更多的享受资源,而另一部分则不能。
资源计划指令就是给出各种限定的条件,例如给某个组分配一定百分比的CPU时间,或者限制一个组内最大活动的会话数等等。
12.3 在资源管理中创建组、计划、指令的例子:
1)建三个用户,并授予connect角色:
grant connect to tim identified by tim;
grant connect to mike identified by mike;
grant connect to mgr identified by mgr;
2)建立两个使用者组:
sys登录EM-->Server-->Resource Manager-->Consumer Groups //查看默认组
建OLTP组、DSS组,我们把新建的三个用户指定到两个自建的组中,使用OEM完成:
OLTP组(tim,mgr)、DSS组(mike,mgr)
建组结束前可以单击Show SQL研究一下输出,注意挂起区域的用法,单击Enter返回。
3)设置初始使用者组
缺省方式建立的用户会定位到DEFAULT_CONSUMER_GROUP组下:
SQL> select username,INITIAL_RSRC_CONSUMER_GROUP from dba_users;
USERNAME INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
MGR DEFAULT_CONSUMER_GROUP
HR DEFAULT_CONSUMER_GROUP
TIM DEFAULT_CONSUMER_GROUP
MIKE DEFAULT_CONSUMER_GROUP
SCOTT DEFAULT_CONSUMER_GROUP
......
SYSTEM SYS_GROUP
SYS SYS_GROUP
......
将TIM,MIKE,MGR 这三个用户定位到相应的自建组中,session登录后便直接属于对应的自建组。
SQL>
exec dbms_resource_manager.set_initial_consumer_group('TIM','OLTP');
exec dbms_resource_manager.set_initial_consumer_group('MIKE','DSS');
exec dbms_resource_manager.set_initial_consumer_group('MGR','OLTP');
SQL> select username,INITIAL_RSRC_CONSUMER_GROUP from dba_users;
USERNAME INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
TIM OLTP
MIKE DSS
MGR OLTP
HR DEFAULT_CONSUMER_GROUP
SCOTT DEFAULT_CONSUMER_GROUP
......
4)建立两个新的资源计划
首先是建立DAYTIME--白天资源计划
4.1)将SYS_GROUP组、OLTP组、DSS组加入DATTIME计划,在OEM中会发现OTHER_GROUPS组也自动加入了。
4.2)指定指令计划,比如:CPU使用优先级。选advance,这个应该对应的是MGMT方法(8个cpu level).
具体设置:
Group/Subplan level 1 level 2 level 3 level4 ......
---------------------------------------------------------------------------------------
DSS 20
OLTP 80
OTHER_GROUPS 100
SYS_GROUP 100
第二,建立NIGHTTIME--夜晚资源计划
参考4.1-4.2
Group/Subplan level 1 level 2 level 3 level4 ......
---------------------------------------------------------------------------------------
DSS 90
OLTP 10
OTHER_GROUPS 100
SYS_GROUP 100
5)组的切换,MGR用户初始组是OLTP组,现在切换成DSS组。
首先激活DAYTIME计划
linux下session1 sys;
SQL> alter system set resource_manager_plan='DAYTIME';
windows/cmd下 session2 MGR登录
C:\Documents and Settings\timran>sqlplus mgr/mgr@timran11g
linux下session1 sys;
SQL>select resource_consumer_group from v$session where username='MGR';
resource_consumer_group
-----------------------
OLTP
session2,mgr:
declare
old_grp varchar2(30);
begin
dbms_session.switch_current_consumer_group('DSS',old_grp,TRUE);
end;
/
session1 sys;
SQL>select resource_consumer_group from v$session where username='MGR';
resource_consumer_group
-----------------------
DSS
12.4 其他的资源指令和
1)以上介绍的cpu分配方法在原文中叫EMPHASI方法(按%分),还有一种叫RATIO(比例)的方法,两种性质相同,但表达方式不同,前者有8个level,每个level中合计值不能超过100,
而后者是一种比例关系,只有一个level,合计值可以超过100。(PPT-II-413)
2)再回到daytime计划,看看还有几种指令
2.1)活动会话池:(PPT-II-414)
目的是限制一组同时运行的SESSION数量,假设DSS组有8个用户,如果就让3个可以运行(active session)。可将该组最大激活数设为3,那么另外的5个可以连接上来,但要排队等着激活。
而排队也可设延迟时间,超时后就会报错。
active session -----------on cpu, waiting;
inactive session ------------ no cpu service, idel
2.2)限制并行度:
Oracle可通过参数设置并行度,如:parallel_max_servers,(创建一个并行执行服务器池),但是无法阻止任何人使用它,于是我们可以通过Resource Management加以限制。
2.3)通过执行时间控制作业
数据库中一个大型作业会挤掉其他用户性能,Threshold指令可以解决这个问题。到了时间,按action的规定去做。
2.4)依据空闲时间终止session
不做任何事情的session浪费服务器资源,如PGA白白占用,idle time指令从两个方面限制这样的情况,比如某组的max idle time(秒)=1800,表示空闲了30分钟,block another session(秒)=300,表示把别人锁了300秒,这两种情况都会终止该session.
2,5)限制undo数据的产生
某些用户的大型事务可能填满undo表空间,如批处理事务不定期的提交,为了安全起见,可以对这里潜在的用户设置undo表空间使用上限,比如某组其undo pool设置为6G,当到达这个
上限值后该组中的所有session都会被挂起,直至事务提交后释放池中的空间。
12.5 配置测试使用者组自动切换
举例,接续12.3的例子,假设MGR要运行大作业,两个组里都有MGR这个用户,MGR总能切换到那个资源优先级较高的组,那么
DBA可以限制他的行为,通过设置Threshould,以DAYTIME计划为例,OLTP组的Threshold设为10秒, ACTION 选switch to DSS组,这样一来,MGR用户占用10秒时就被降级了。
1)OEM使DAYTIME计划激活
2)设置上面的Threshold为10秒
3)session2 mgr:登录
SYS:
CREATE TABLE mgr.t1 AS SELECT * FROM dba_objects;
4)session1 sys: 查看MGR当前组是OLTP
SQL>select resource_consumer_group from v$session where username='MGR';
5) session2 mgr:做一个长查询
SQL> INSERT INTO t1 SELECT * FROM t1;
SQL>select count(*) from dba_objects;
6)session1 sys: 查看10秒后降级为DSS组
SQL>select resource_consumer_group from v$session where username='MGR';
7) 若选择revert after call=yes, MGR任务结束后又返回到OLTP组(考点)。
12.6 考点:
1)SQL> show parameter resource
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resource_limit boolean FALSE
resource_manager_cpu_allocation integer 1
resource_manager_plan string NIGHTIME
激活的资源计划有一个参数:resource_manager_plan,但是resource_limit这个初始化参数与资源计划毫无关系。
2)赋给一个用户管理资源管理器的能力,需要系统权限 ADMINISTER RESOURCE MANAGER,而这个权限不是使用通常的grant方法授予的,只能使用oracle提供的程序包。
DBMS_RESOURCE_MANAGER和DBMS_RESOURCE_MANAGER_PRIVS是有关资源管理的最有用的两个包。
3)还是关于上面的两个程序包:
DBMS_RESOURCE_MANAGER_PRIVS 包负责:授予管理Resource Manager的权限,将用户放置到组中,从组中删除用户。
DBMS_SESSION和DBMS_RESOURCE_MANAGER包 负责切换会话的有效组,创建使用者组,配置会话映射到组的方式。
4)在每个级别的总CPU使用率不能超过100%,如果超过的话,则挂起区域将无法验证并且其资源计划不能保存到数据字典,资源计划容
许在一个级别分配的资源<100%,但这样做没有什么意义。
5)每个资源计划都必须包含一条针对OTHER_GROUPS组的指令。
6)会话池不限制连接会话的数量,限制的是活动会话(active session)的数量。活动会话如果没有提交,该会话仍然对该组的活动会话池计数有效。
7)每个组的undo pool与undo表空间配额无关,你甚至不可能授予undo表空间上的配额。
oracle之三资源管理的更多相关文章
- oracle之三 自动任务调度
Oracle 自动任务调度 13.1 Oracle任务调度概述 在Oracle中任务调度指某一(组)执行程序在特定的时间被周期性的执行.Oracle把任务调度称为job(作业). Advanced S ...
- Oracle数据库资源管理
1.了解Resource Manager术语 2.了解Resource Manager分配方法 3.了解DEFAULT_PLAN 4.新建资源计划 5.创建使用者组 6.了解资源分配方法 7.分配使用 ...
- Java jdbc 连接oracle之三(封装工具类)
driver = oracle.jdbc.driver.OracleDriver url = jdbc:oracle:thin:@192.168.10.105:1521:orcl user = LF ...
- oracle监控资源管理器
资源管理器的配置在一组dba视图显示,主要是如下视图: dba_rsrc_plans 显示计划和状态. dba_rsrc_plan_directives 显示计划指令 dba_rsrc_consume ...
- oracle之三存储库及顾问框架
AWR存储库及顾问框架(PPT-I-349-360) 14.1 Oracle数据库采样ASH和AWR. 1) ASH(Active Session History) ASH收集的是活动会话的样本数据, ...
- oracle之三目录库和辅助库
目录库和辅助库 10.1 创建目录库(Catalog database)的必要性 如果没有catalog,RMAN的存储库(元数据)保存在目标库的控制文件里,这样可能存在如下隐患 1)目标库上的控制文 ...
- oracle之三rman 不完全恢复
rman 不完全恢复 9.1 rman 不完全恢复的三个标准模式:基于time.基于scn和基于sequence: 范例1:恢复过去某个时间点误操作,一般使用基于time或scn. 1)环境:有一套全 ...
- oracle之三rman 完全恢复
rman 完全恢复 8.1 recover 恢复: 1)归档 : 完全恢复和不完全恢复 2)非归档:只能恢复到最后一次备份状态(还原) 8.2 完全恢复: ----先对数据库做一个备份(如果是arch ...
- oracle之三rman 备份
rman 备份 7.1 归档方式下rman备份常用语法: 7.1.1 backup 备份 1)备份全库:1.1 RMAN> backup database format='/u01/myrman ...
随机推荐
- 动态规划算法详解 Dynamic Programming
博客出处: https://blog.csdn.net/u013309870/article/details/75193592 前言 最近在牛客网上做了几套公司的真题,发现有关动态规划(Dynamic ...
- 聊聊MySQL常用的4种主从复制架构
目录 一主多从复制架构 多级复制架构 双主(Dual Master)复制架构 多源(Multi-Source)复制架构 如何优化主从延迟问题? 复制的4中常见架构有一主多从复制架构.多级复制架构.双主 ...
- vob文件转mkv
下载了一部片子,是所谓的dvd原盘,就是用软件将dvd碟片rip下来,视频文件是一堆vob文件.觉得这片子没必要看原盘,想压缩成mkv以减小体积,同时保持合适的清晰度. 首先想到用handbrake这 ...
- python数据类型分类(可变(不可变)数据类型)
一:python数据类型的分类: 可变(不可哈希)的数据类型: list 列表 dict 字典 set 集合 不可变(可哈希)的数据类型: str 字符串 bool 布尔型 int 整型 tuple ...
- 国人开源了一款超好用的 Redis 客户端,真香!!
大家都知道,Redis Desktop Manager 是一款非常好用的 Redis 可视化客户端工具,但可惜的是 v0.9.4 版本之后需要收费了: 这个工具不再免费提供安装包了,要对所有安装包收费 ...
- css3 属性 text-overflow 实现截取多余文字内容 以省略号来代替多余内容
css3 属性 text-overflow: ellipsis 前言 正文 结束语 前言 我们在设计网站的时候有时会遇到这样一个需求:因为页面空间大小的问题,需要将多余的文字隐藏起来,并以省略号代替, ...
- CSP-J2019 把8个同样的球放在同样的5个袋子里,允许有的袋子空着不放,问共有多少种不同的分法?
把8个同样的球放在同样的5个袋子里,允许有的袋子空着不放,问共有多少种不同的分法? 提示:如果8个球都放在一个袋子里,无论是放哪个袋子,都只算同一种分法. 解析: 把问题合成,先思索5个袋子都不空的状 ...
- Vue管理系统前端系列四组件拆分封装
目录 组件封装 首页布局拆分后结构 拆分后代码 状态管理中添加 app 模块 组件封装 在上一篇记录中,首页中有太多的代码,为了避免代码的臃肿,需要对主要的功能模块拆分,来让代码看起来更简洁,且能进行 ...
- Vector-based navigation using grid-like representations in artificial agents
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Nature May 17, 2018 Received: 5 July 2017; Accepted: 3 April 2018;Pub ...
- java进阶(10)--String(StringBuff、StringBuilder)
一.基本概念 1.String为引用数据类型,使用双引号 2.字符串数组存储在方法区的内存池,因为开发过程种使用过于频繁 3.String类已经重写了equals,比较时使用,同时也重写了toStri ...