第十七课

17、 数据库资源管理器

sqlserver 资源管理 限制每session 资源_资源管理器


sqlserver 资源管理 限制每session 资源_资源管理器_02


sqlserver 资源管理 限制每session 资源_资源管理器_03

dbms_resource_manager_privs程序包

administer_resource_manager权限

sqlserver 资源管理 限制每session 资源_调度策略_04


sqlserver 资源管理 限制每session 资源_数据库_05


sqlserver 资源管理 限制每session 资源_资源管理器_06


快速创建一个资源计划:

BEGIN
  dbms_resource_manager.create_simple_plan(simple_plan => 'simple_resplan1'
                                          ,consumer_group1 => 'consgroup1'
                                          ,group1_percent => 80
                                          ,consumer_group2 => 'consgroup2'
                                          ,group2_percent => 20);
END;

创建复杂资源计划:
步骤:
1.创建一个暂挂区域
2.创建消费组
3.映射会话到消费组
4.创建资源计划
5.创建资源计划指令
6.验证暂挂区域
7.提交暂挂区域
命令行操作:

BEGIN
  dbms_resource_manager.clear_pending_area();
  dbms_resource_manager.create_pending_area();
  dbms_resource_manager.create_consumer_group(consumer_group => 'group1'
                                             ,cpu_mth => 'ROUND-ROBIN');
  dbms_resource_manager.set_consumer_group_mapping(dbms_resource_manager.oracle_user
                                                  ,'OUZY'
                                                  ,'GROUP1');
  dbms_resource_manager.create_plan(plan => 'plan1');
  dbms_resource_manager.create_plan_directive(plan => 'plan1'
                                             ,group_or_subplan => 'GROUP1'
                                             ,mgmt_p1 => 70);
  dbms_resource_manager.create_plan_directive(plan => 'plan1'
                                             ,group_or_subplan => 'OTHER_GROUPS'
                                             ,mgmt_p1 => 30);
  dbms_resource_manager.validate_pending_area();
  dbms_resource_manager.submit_pending_area();
END;

创建消费组:

sqlserver 资源管理 限制每session 资源_调度策略_07


sqlserver 资源管理 限制每session 资源_调度策略_08


调度策略:

轮循:round-robin

运行至完成:run-to-completion

消费者组映射:

定义向消费组分配会话的规则。允许切换到此消费组的用户和角色。

sqlserver 资源管理 限制每session 资源_调度策略_09


sqlserver 资源管理 限制每session 资源_数据库_10


sqlserver 资源管理 限制每session 资源_数据库_11


未分配的会话将分配至OTHER_GROUPS组。

每个计划都必须包含针对OTHER_GROUPS组的指令。

select t.username,t.initial_rsrc_consumer_group from dba_users t;

sqlserver 资源管理 限制每session 资源_资源管理器_12


创建资源计划和资源计划指令:

指定如何将资源分配给消费组的指令。

sqlserver 资源管理 限制每session 资源_调度策略_13


sqlserver 资源管理 限制每session 资源_调度策略_14


sqlserver 资源管理 限制每session 资源_调度策略_15


启用计划:

alter system set resource_manager_plan = plan1 scope=both;
或者:
BEGIN
  dbms_resource_manager.switch_plan('PLAN1');
END;
select * from v$rsrc_plan;查看当前资源计划
select username,status,resource_consumer_group from v$session;

sqlserver 资源管理 限制每session 资源_调度策略_16


活动会话是事务处理、查询或并行操作中当前涉及的会话。

update t set owner='xx' where object_id=1000;
select username,status,resource_consumer_group from v$session;
  1. 会话池
  2. 空闲时间

EMPHASIS这一CPU 分配方法确定在资源计划中对不同使用者组中的会话的重视程度。可以是单一级别也可以是多级别。
RATIO策略是一种单级别的CPU分配方法。
–ratio例子

BEGIN
  dbms_resource_manager.clear_pending_area();
  dbms_resource_manager.create_pending_area();
  dbms_resource_manager.create_consumer_group(consumer_group => 'CG_OUZY2');

  dbms_resource_manager.set_consumer_group_mapping(attribute => 'ORACLE_USER'
                                                      ,VALUE => 'OUZY'
                                                      ,consumer_group => 'CG_OUZY2');
  dbms_resource_manager.create_plan(plan => 'plan2'
                                       ,mgmt_mth => 'RATIO');
  dbms_resource_manager.create_plan_directive(plan => 'plan2'
                                                 ,group_or_subplan => 'CG_OUZY'
                                                 ,shares => '4');
  dbms_resource_manager.create_plan_directive(plan => 'plan2'
                                                 ,group_or_subplan => 'OTHER_GROUPS'
                                                 ,shares => '3');
  dbms_resource_manager.validate_pending_area();
  dbms_resource_manager.submit_pending_area();
  dbms_resource_manager.clear_pending_area();
END;

select * from dba_rsrc_plans;

sqlserver 资源管理 限制每session 资源_调度策略_17


sqlserver 资源管理 限制每session 资源_调度策略_18


sqlserver 资源管理 限制每session 资源_数据库_19

超量配置方法:此方法适用于非关键性数据库和低负载、非关键性的生产系统。

分区方法:此方法适用于关键生产系统。它能够防止实例互相影响。

select * from v$rsrc_plan;

sqlserver 资源管理 限制每session 资源_调度策略_20


sqlserver 资源管理 限制每session 资源_资源管理器_21

select * from v$rsrc_plan;
select * from v$rsrc_consumer_group;

sqlserver 资源管理 限制每session 资源_数据库_22

select * from dba_rsrc_plans;
select * from dba_rsrc_plan_directives;
select * from dba_rsrc_consumer_groups;
select * from dba_rsrc_consumer_group_privs;
select * from dba_rsrc_group_mappings;
select * from dba_rsrc_mapping_priority;
select * from dba_rsrc_manager_system_privs;

使用Toad管理资源:

sqlserver 资源管理 限制每session 资源_调度策略_23


监视资源管理器:

sqlserver 资源管理 限制每session 资源_调度策略_24


sqlserver 资源管理 限制每session 资源_调度策略_25


sqlserver 资源管理 限制每session 资源_调度策略_26

一种CPU方法的计划按照如下方式在两个级别分配资源:

  1. 级别1:SYS_GROUP 50%,OLTP 50%
  2. 级别2:DSS 50%,BATCH 50%
    如果唯一登录的用户来自BATCH组,那么他们能使用的CPU百分比是多少?
    A.12.5%
    B.25%
    C.50%
    D.100%
    答案D