热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle资源管理——对用户、程序、服务自定义资源分配

“ManagingResources◇Resourceconsumergro

Managing Resources

Resource consumer group 相似资源需求的用户、程序、服务归为一个组

Resource plan 资源计划,指定是哪一活动

Resource plan directives 规定如何分配资源

可以管理的资源:

CPU usage     --CPU使用率

Degree of parallelism    --并行度

Number of active sessions    --活动会话数

Undo generation    --撤销空间

Operation execution time    --执行时间

Idle time    --空闲时间

Database consolidation    --数据库整合

Server consolidation    --服务整合

1

资源计划resource_manager_plan参数

SQL> show parameter resource

NAME     TYPE VALUE

------------------------------------ ----------- ------------------------------

resource_limit     boolean TRUE

resource_manager_cpu_allocation      integer 1

resource_manager_plan     string SCHEDULER[0x3006]:DEFAULT_MAIN

TENANCE_PLAN

#设置resource_manager_plan为DEFAULT_PLAN

SQL> alter system set resource_manager_plan = 'DEFAULT_PLAN';

System altered.

SQL> show parameter resource

NAME     TYPE VALUE

------------------------------------ ----------- ------------------------------

resource_limit     boolean TRUE

resource_manager_cpu_allocation      integer 1

resource_manager_plan     string DEFAULT_PLAN

如果未设置resource_manager_plan的值,则不在实例中执行资源管理。

2

新建资源计划

可以使用PL/SQL包“DBMS_RESOURCE_MANAGER”的CREATE_PLAN、UPDATE_PLAN和DELETE_PLAN来创建、更新和删除资源计划。

#为资源管理器计划创建等待区(必须创建)

SQL>  exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

PL/SQL procedure successfully completed.

#新建资源计划,名称DEVELOPERS

SQL> execute DBMS_RESOURCE_MANAGER.CREATE_PLAN -

> (Plan => 'DEVELOPERS', -

> Comment => 'Developers, in Development database');

PL/SQL procedure successfully completed.

3

创建使用者组

#新建两个使用者组:ONLINE_DEVELOPERS和BATCH_DEVELOPERS

新建使用者组ONLINE_DEVELOPERS

SQL> exec DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP -

> (Consumer_Group => 'ONLINE_DEVELOPERS', -

> Comment => 'Online developers');

PL/SQL procedure successfully completed.

新建使用者组BATCH_DEVELOPERS

SQL> exec DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP -

> (Consumer_Group => 'BATCH_DEVELOPERS', -

> Comment => 'Batch developers');

PL/SQL procedure successfully completed.

4

资源分配方法

创建两个计划指导,以便将75%的CPU资源分配给ONLINE_DEVELOPERS组,25%的CPU资源分配给BATCH_DEVELOPERS组。
另外,将ONLINE_DEVELOPERS组并行性限制为12,将BATCH_DEVELOPERS组的并行性限制为6。

ONLINE_DEVELOPERS资源分配

SQL> exec dbms_resource_manager.create_plan_directive -

> (Plan => 'DEVELOPERS', -

> Group_or_subplan => 'ONLINE_DEVELOPERS', -

> Comment => 'Online developers', -

> Cpu_p1 => 75, -

> Cpu_p2 => 0, -

> Parallel_degree_limit_p1 => 12);

PL/SQL procedure successfully completed.

BATCH_DEVELOPERS资源分配

SQL> exec dbms_resource_manager.create_plan_directive -

> (Plan => 'DEVELOPERS', -

> Group_or_subplan => 'BATCH_DEVELOPERS', -

> Comment => 'Batch developers', -

> Cpu_p1 => 25, -

> Cpu_p2 => 0, -

> Parallel_degree_limit_p1 => 6);

PL/SQL procedure successfully completed.

OTHER_GROUPS(计划中必须包含此组)

SQL> exec dbms_resource_manager.create_plan_directive -

> (Plan => 'DEVELOPERS', -

> Group_or_subplan => 'OTHER_GROUPS', -

> Comment => 'Everyone else', -

> Cpu_p1 => 0, -

> Cpu_p2 => 100, -

> Parallel_degree_limit_p1 => 6);

PL/SQL procedure successfully completed.

验证是否有效

SQL> exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA()

PL/SQL procedure successfully completed.

提交更改

SQL> exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

PL/SQL procedure successfully completed.

清除更改

exec DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA();

5

分配使用者组

将用户分配到使用者组

赋予SCOTT切换到ONLINE_DEVELOPERS使用者组权限

SQL> exec dbms_resource_manager_privs.grant_switch_consumer_group -

> (grantee_name=>'SCOTT', -

> consumer_group=>'ONLINE_DEVELOPERS', -

> grant_option=>true);

PL/SQL procedure successfully completed.

将SCOTT分配到ONLINE_DEVELOPERS使用者组

SQL> exec DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP -

> ('scott','ONLINE_DEVELOPERS');

PL/SQL procedure successfully completed.

赋予用户administer_resource_manager权限

SQL> begin

  2  dbms_resource_manager_privs.grant_system_privilege(

  3  grantee_name=>'SCOTT',

  4  privilege_name=>'administer_resource_manager',

  5  admin_option=>true);

  6  end;

  7  /

PL/SQL procedure successfully completed.

6

激活资源计划

SQL> alter system set resource_manager_plan = 'DEVELOPERS';

System altered.

7

Resource Manager视图

DBA_RSRC_PLANS                  --> 资源计划和每个计划的状态

DBA_RSRC_PLAN_DIRECTIVES        --> 资源计划指导

DBA_RSRC_CONSUMER_GROUPS        --> 资源计划使用者组

DBA_RSRC_CONSUMER_GROUP_PRIVS   --> 使用者组用户和角色分配

DBA_RSRC_GROUP_MAPPINGS         --> 会话属性与使用者组之间的使用者组映射

DBA_RSRC_MAPPING_PRIORITY       --> 资源映射优先级

DBA_USERS                       --> INITIAL_RSRC_CONSUMER_GROUP列包含用户的初始化使用者

DBA_RSRC_MANAGER_SYSTEM_PRIVS   --> 被授予

DBMS_RESOURCE_MANAGER包上的权限的用户

查看每个计划的状态和特点:

SQL> set linesize 120

SQL> col plan for a30

SQL> col status for a30

SQL> select plan, status, num_plan_directives, mandatory from dba_rsrc_plans;

PLAN       STATUS      NUM_PLAN_DIRECTIVES MAN

------------------------------ ------------------------------ ------------------- ---

DEFAULT_PLAN 4 YES

INTERNAL_QUIESCE 2 YES

DEVELOPERS 3 NO

INTERNAL_PLAN 1 YES

APPQOS_PLAN 7 YES

DEFAULT_MAINTENANCE_PLAN 4 YES

ETL_CRITICAL_PLAN 8 NO

MIXED_WORKLOAD_PLAN 6 NO

ORA$AUTOTASK_SUB_PLAN 3 YES

ORA$AUTOTASK_HIGH_SUB_PLAN 4 YES

DSS_PLAN 8 NO

11 rows selected.

status列值为PENDING说明计划尚未经过验证并成功提交;

mandatory列值为YES说明无法删除计划。

8

监控Resource Manager

下面3个动态性能视图显示Resource Manager的统计信息:

v$rsrc_consumer_group   -> 按使用者组列出的CPU使用率 

v$sysstat               -> 所有会话的CPU使用率 

v$sesstat               -> 按会话列出的CPU使用率

还可以通过EM的Resource Manager下statistics连接查询CPU、I/O、等待时间和排队会话的明细。

9

验证Resource Manager

SQL> select  SID,SERIAL#   ,USERNAME,RESOURCE_CONSUMER_GROUP  from v$session  where username = 'SCOTT';

no rows selected

用scott 执行很耗费CPU的语句

SQL> conn scott/oracle

SQL> select count(*) from all_objects a , all_objects b , all_objects c group by a.object_id;

SQL> select  SID,SERIAL#   ,USERNAME,RESOURCE_CONSUMER_GROUP  from v$session  where username = 'SCOTT';

       SID    SERIAL# USERNAME

---------- ---------- ------------------------------

RESOURCE_CONSUMER_GROUP

--------------------------------

35 9261 SCOTT

ONLINE_DEVELOPERS

57 4723 SCOTT

_ORACLE_BACKGROUND_GROUP_

60 8117 SCOTT

_ORACLE_BACKGROUND_GROUP_



推荐阅读
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 主调|大侠_重温C++ ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
  • 使用WinForms 实现 RabbitMQ RPC 示例
    本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ... [详细]
  • 本文探讨了如何利用 Hibernate 进行高效的批量更新和删除操作,包括直接使用 Hibernate API 的方法及其局限性,以及如何通过 JDBC 或存储过程实现更优的性能。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • Java多线程实现:从1到100分段求和并汇总结果
    本文介绍如何使用Java编写一个程序,通过10个线程分别计算不同区间的和,并最终汇总所有线程的结果。每个线程负责计算一段连续的整数之和,最后将所有线程的结果相加。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文将详细探讨 Java 中提供的不可变集合(如 `Collections.unmodifiableXXX`)和同步集合(如 `Collections.synchronizedXXX`)的实现原理及使用方法,帮助开发者更好地理解和应用这些工具。 ... [详细]
  • 深入浅出TensorFlow数据读写机制
    本文详细介绍TensorFlow中的数据读写操作,包括TFRecord文件的创建与读取,以及数据集(dataset)的相关概念和使用方法。 ... [详细]
  • 本文详细介绍了JSP(Java Server Pages)的九大内置对象及其功能,探讨了JSP与Servlet之间的关系及差异,并提供了实际编码示例。此外,还讨论了网页开发中常见的编码转换问题以及JSP的两种页面跳转方式。 ... [详细]
  • window下kafka的安装以及测试
    目录一、安装JDK(需要安装依赖javaJDK)二、安装Kafka三、测试参考在Windows系统上安装消息队列kafka一、安装JDKÿ ... [详细]
  • 本文详细介绍了Java中RulesBasedCollator类的getCollationElementIterator(String source)方法,包括其功能、使用场景及代码示例。 ... [详细]
author-avatar
向陽阿莫_545
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有