什么是资源计划
oracle应该是从8i开始提供了资源管理器,Resource Manager。这个RM可以让DBA管理数据库服务所使用的资源。这个怎么理解?例如无论是windows或者是linux,操作系统都具备将特定的资源分配给特定进程的能力,并且实现自动调度。你打开windows的任务管理器就能看到一个进程所消耗的CPU和内存总是随着计算任务的多少而动态变化的,这就是资源管理。ORACLE中的Resource Manager实现的是类似的功能。总体来说RM所管理的资源包括:
- 一个组中所有会话的总CPU使用率
- 组中每个会话可用的并行程度
- 每个组中允许的活动会话数量
- 每个组允许的撤销空间量
- 终止空闲会话之前的所需要的时间
- 会话中一次调用的最长执行时间,他能触发将绘画切换到另一个组中。
资源计划中的使用者组
使用者组是一组具有类似资源需求的用户,一个组可以包含多个用户,同时一个用户也可以同时属于多个组,当属于多个组时可以切换用户激活的是哪个组的权限,这个切换可以手动也可以自动完成。
在创建一个ORACLE实例时(通俗的讲就是你创建了一个ORACLE数据库),会默认提供了18种使用者组
组名 | 描述 |
---|---|
SYS_GROUP | 数据库管理员设定的组,只有SYS和SYSTEM用户属于这个组 |
DEFAULT_CONSUMER_GROUP | 所有未指定组的用户都属于这个组 |
OTHER_GROUPS | 所有用户都是这个组的成员 |
ORA$AUTOTASK | 运行自动任务的会话都在这个组中运行 |
ORA$APPQOS_0到07 | 如果启用了质量服务就使用这8个组,仅应用于集群中 |
演示组 | 包括其他的XXXX_GROUP |
所有的组可以查询DBA_RSRC_CONSUMER_GROUPS和DBA_USERS这两个视图,一个是查看所有的组信息,一个是查看用户的组信息
资源计划
一个计划包含在使用者组之间分配资源的一组指令
CPU方法
可以指定每个组所使用CPU的比例和时间,例如白天将80%的CPU分配给OLTP用户组。
创建步骤如下:
-- 创建挂起区域
exec dbms_resource_manager.create_pending_area;
-- 创建计划
exec dbms_resource_manager.create_plan(-plan=>'DAY',comment=>'plan for normal working hours');
-- 根据需要设置计划内指令,具体代码就不列了。
-- 验证挂起区域
exec dbms_resource_manager.validate_pending_area;
exec dbms_resource_manager.submit_pending_area;
--激活计划
alter system set resource_manager_plan=day;
活动会话数量
RM允许DBA限制一个组同时运行的语句数量,但是不限制登录数量。例如一共10个业务人员都可以登录,但是只有三个业务人员可以同时提交任务或者作业,如果第四个人提交那么他必须等待,直到有人完成任务。
这里的活动会话,指正在运行查询的会话或者处于未提交的事务中的会话。
并行程度
并行处理可以提高SQL的性能,但是也有资源消耗上的代价,设置远远高于实际需要的并行程度有可能会对其他用户产生影响,甚至导致数据库被消耗殆尽导致hang起。RM允许DBA限制并行程度,可以对任何一个组的每个会话允许使用的并行处理器数量设定一个硬限制。
使用参数new_parallel_degree_limit=>6,即可限制并行程度不能超过6个处理器。
操作执行时间
简单的说就是在特定时间排除特定类型的作业,也可以启动特定类型的作业。
空闲会话终止时间
一个已经创建的会话,如果他又不做任何事情那么是会浪费数据库的宝贵资源的。RM可以根据空闲会话的时间来自动终止会话。终止会话有两个标准:
- 根据会话空闲的时间,超过时间则自动终止
- 不仅检查会话的时间,还查看会话是否正持有封锁其他会话的记录和表锁。
- 涉及到的参数:MAX_IDLE_TIME和MAX_IDLE_BLOCKER_TIME
撤销数据量
ORACLE中所有的DML语句都会生成撤销SQL,所有的撤销SQL都写入到撤销表空间,大型事务则 有可能会填满整个撤销表空间,RM允许DBA进行设置以防止一组用户的大型事务填满撤销表空间