--实用功能:数据库停顿---------------------
详见7.1
alter system quiesce restricted;
alter system unquiesce;--取消数据库停顿
-------------------------------------------
Oracle的Resource Manager将大型机样式的资源管理性能引入支持Oracle的所有平台,也就是说:无论数据库具有怎样的整体工作负荷,
DBA都能够保证特定的数据库用户组始终可以接收特定的服务级别。
1.资源管理需求
设置不同用户组的使用资源的不同级别
也可以避免一个糟糕的查询可能导致数据库崩溃
2.Resource Manager的体系结构
用户被置入Resource Manager用户组,而Resource Manager计划由一组控制用户组之间资源分配的指令组成。
2.1 用户组
默认创建的用户组:SYS_GROUP,DEFAULT_CONSUMER_GROUP,OTHER_GROUPS,LOW_GROUP,AUTO_TASK_CONSUMER_GROUP
查看用户组的视图:DBA_RSRC_CONSUMER_GROUPS,DBA_USERS
2.2 Resource Manager计划
一个Resource Manager计划由许多条指令组成,每条指令都为某特定的用户组在特定的优先权级别上分配资源。
默认创建的Resource Manager计划:
INTERNAL_PLAN 计划只具有一条不会产生任何实际影响的指令
SYSTEM_PLAN 计划具有3条指令
INTERNAL_QUIESCE计划 具有特定的目的:冻结不属于SYS_GROUP用户组成员的所有会话。
为了启用一个计划,需要使用RESOURCE_MANAGER_PLAN实例参数。
提示:实例参数RESOURCE_LIMITS与Resource Manager毫无关系。这个参数是较早以前通过数据库配置文件控制资源的方法。
2.3 Resource Manager配置工具
我们既可以使用一个API也可以通过一个Database Control接口来管理Resource Manager。
这个API由下列两个程序包组成:DBMS_RESOURCE_MANAGER_PRIVS与DBMS_RESOURCE_MANAGER。
为用户JOHN授予管理Resource Manager的能力:
execute dbms_resource_manager_privs.grant_system_privilege('JOHN','ADMINISTATER_RESOURCE_MANAGER',FALSE);
DBMS_RESOURCE_MANAGER程序包用于创建用户组、计划以及指令,此外也用于创建“未决区域”。使用Resource Manager对象
执行任何操作之前,我们必须创建一个未决区域,这个位于SGA内的内存区域被用于在配置Resource Manager对象时存储这些对象。
3.管理用户与用组
创建用户组需要未决区域,但是将用户置入用户组并不需要未决区域。如果使用Database Control,那么这种工具就可以负责管理未决区域;
如果直接使用API,那么就必须显式地创建未决区域。
DBMS_RESOURCE_MANAGER_PRIVS程序包包含将用户置入某个用户组的过程,但是只有DBMS_SESSION与DBMS_RESOURCE_MANAGER程序包中的过程才能够
改变用户的活动用户组。
exec dbms_resource_manager.switch_consumer_group_for_sess(session_id=>209,session_serial=>10223,consumer_group>'OLTP');
4.练习:管理资源用户组中的用户
(1)创建一些用户,并且为这些用户授予CONNECT角色。
grant connect to cleark identified by clerk;
grant connect to acct identified by acct;
grant connect to batch identified by batch;
grant connect to mgr identified by mgr;
(2)使用Database Control创建用户组,并指派用户(Resource Manager=>Resource Consumer Groups)
用户组OLTP,成员CLEARK,MGR
用户组DSS,成员ACCT,MGR
用户组BATCH,成员BATCH,MGR
--指定初始组
BEGIN
dbms_resource_manager.set_initial_consumer_group(user => 'CLEARK',consumer_group => 'OLTP');
dbms_resource_manager.set_initial_consumer_group(user => 'ACCT',consumer_group => 'DSS');
dbms_resource_manager.set_initial_consumer_group(user => 'BATCH',consumer_group => 'BATCH');
END;
(3)查看
select * from dba_rsrc_consumer_groups;
select * from dba_rsrc_consumer_group_privs;
(4)在SQL*PLUS会话中,启动Resource Manger
alter system set resource_manager_plan=system_plan;--system_plan资源计划名称
alter system set resource_manager_plan=daytime;
select username,resource_consumer_group g from v$session;
declare old_grp varchar2(30);
begin
dbms_session.switch_current_consumer_group('DSS',old_grp,TRUE);
END;
/
exec dbms_resource_manager.switch_consumer_group_for_user('MGR','OLTP');
5.Resource Manager 计划
(1)一个Resource Manager 计划由许多条在不同用户组之间分配资源的指令组成。
(2)通过组合操作执行时间以及CPU调用,我们还可以启用自动的用户组切换操作。此时,如果某个会话启动了一个长时间运行的作业,
并且这个作业会对其他用户产生不利的影响,那么就可以降低该会话的优先权级别。
5.1CPU方法
如果没有使用CPU的全部资源,那么Resource Manager计划就没有任何效果。只有CPU能力不能满足要求时,这些计划才可能起到作用。
--创建未决区域
exec dbms_resource_manger.create_pending_area;
--创建计划
exec dbms_resource_manager.create_plan_directive(plan=>'daytime',group_or_subplan='sys_group',cpu_p1=100,coment=>'...');
exec dbms_resource_manager.create_plan_directive(plan=>'daytime',group_or_subplan='oltp',cpu_p2=100,coment=>'...');
...
--验证未决区域
exec dbms_resource_manager.validate_pending_area;
exec dbms_resource_manager.submit_pending_area;
--激活计划
alter system set resource_manager_plan=daytime;
可以使用Database Control创建上面的计划。
5.2 活动会话池方法
经过研究表明,一个用户组能够毫无问题地同时运行特定数量的作业,不过作业数一旦超过这个值,那么其他用户组就会受到影响。
Resource Manager的活动会话池方法使得DBA在不限制实际登录数的情况下能够限制一个用户组能够同时运行的语句数。
活动会话(active session)被定义为运行查询的会话或者未提交事务当中的会话。
监视活动的会话池:
select s.CURRENT_QUEUE_DURATION,s.* from v$session s;-- current_queue_duration列查看每个排队会话已等待的时间。
select * from v$rsrc_consumer_group;--概括说明了每个用户组在任意时刻存在的排队等待的会话数。
5.3 限制并行度
(1)启用并行处理的步骤
使用PARALLEL_MAX_SERVERS实例参数创建一个并行执行服务器池
使用ALTER TABLE PARALLEL命令为每个表启用并行
使用ALTER SESSION ENABLE PARALLEL DML命令为指定的会话启用并行的DML(如果为表设置了并行,那么就能够为指定会话自动启用并行查询)。
设置实例参数PARALLEL_AUTOMATIC_TUNING为TRUE,或者使用每条语句中的提示来指定并行度。
(2)Resource Manager能够限制用户组使用的并行处理器数。
可以在Database Control中设置。
5.4 通过执行时间控制作业
Resource Manager提供一种在特定时间能够从系统中却除大型作业的机制。
如果作业在指定时间内未完成,作业就会被取消。
可以在Database Control中设置
如果统计量不够准确,那么Resource Manager就会出错。
5.5 通过空闲时间终止会话
不执行任何操作的会话会浪费机器资源。
Resource Manager能够根据两个标准断开未工作会话的连接。第一个标准只是简单的空闲时间,也就是指定会话执行前一条语句所经过的时间。
第二个标准更为复杂:不仅要查看指定会话执行前一条语句所经过的时间,而且还要查看指定会话是否保持妨碍其他会话的记录或表锁定(这是一个更为严重的问题)。
提示:我们还可以通过使用配置文件来断开会话的连接,但必须使用实例参数RESOURCE_LIMITS启用这种功能。不过与之相比,Resoruce Manager是一种更好的工具。
5.6 限制撤销数据的生成
DBA能够阻止某个用户组的大型事务填满撤销表空间。
凭借Resource Manager提供的一种机制,撤销表空间实际上能够被分为若干保留供不同用户组使用的区域。
5.7 自动的用户组切换
激活不同的计划时就可以在两个用户组之间进行切换。
6. 配置与测试自动的用户组切换
用Database Control完成练习
创建HIGH/MEDIUM/LOW三个使用者组,将用户test同时置入这三个组。
创建计划auto_switch,设置CPU使用比例,group switching中的执行时间。
用test用户执行笛卡儿连接:select * from all_objects,allobjects;
--查看用户组切换情况
select resource_manager_group from v$session where username='test';
7.Resources Manager的其他功能
7.1停顿数据库 *
alter system quiesce restricted;
alter system unquiesce;--取消数据库停顿
将用于所有用户组的活动会话池设置为零,那么所有会话都会被挂起。
第一条命令会激活Resource Manager计划INTERNAL_QUIESCE,这个计划将用于除了SYS_GROUP之外所有用户组的活动会话池设置为零。
这样,正在执行的语句将继续执行直至完成,但是不能再执行其他任何语句。随后,会话将被挂起。
如果从实例启动开始不存在连续活动的资源计划,那么停顿操作会失败。我们应当始终在初始化文件中设置一个计划(如resource_manager_plan='system_plan')
补充:测试发现
(1)使用alter system quiesce restricted;停顿数据库时,实例参数resource_manager_plan的值不会改变。
(2)使用alter system set resource_manager_plan='internal_quiesce';也可以停顿数据库
7.2 针对一个调用的用户组切换
计划:是否在调用后切换回原始组?
7.3 使用比例CPU方法
指定使用的比例,并且由Oracle计算所使用CPU资源的百分比。
7.4 创建一个简单的计划
dbms_resource_manager.create_simple_plan(simple_plan=>'daytime',consumer_group1=>'oltp',group1_cpu=50,consumer_group2=>'dss',group2_cpu=25,consumer_group3=>'batch',group3_cpu=25);
这个简单的计划并没有配置其他所有资源,例如并行、活动会话以及撤销池。
7.5 适应用户组映射
资源使用组可以实现:
Oracle 用户映射
客户机操作系统用户映射
客户机程序映射
客户机映射
服务映射
模块映射
模块和操作映射
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7901922/viewspace-1059677/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7901922/viewspace-1059677/