Oracle Database Resource Manager

简介:   图片很清楚的讲明了 ORM 的关系结构 Resource consumer group (资源用户组) 资源管理器将资源统一分配给资源用户组,而不是某一个具体的会话,当会话建立时会根据自身属性映射到不同的用户组,并从中申请系统资源 Resource pla...
 


图片很清楚的讲明了 ORM 的关系结构




Resource consumer group (资源用户组)
资源管理器将资源统一分配给资源用户组,而不是某一个具体的会话,当会话建立时会根据自身属性映射到不同的用户组,并从中申请系统资源




Resource plan (资源计划)
一个数据库可以有多个Resource Plan,但是同一时刻只能有一个Plan状态为Active(由初始化参数 resource_manager_plan 决定),关联多个 Resource Plan directive 




Resource plan directive (资源计划指令)
创建一个计划指令后就决定了系统资源如何分配给一个资源用户组










创建一个资源计划


1.处理pending area
所有关于 Resource Manager 组件创建和更改都必须在 Pending Area 中完成,文档说可以理解为一个“草稿区” 


SQL> exec DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA;


PL/SQL procedure successfully completed.


SQL> exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA


PL/SQL procedure successfully completed.




2.创建资源计划


DBMS_RESOURCE_MANAGER.CREATE_PLAN 
(
   plan                       IN   VARCHAR2, 
   comment                    IN   VARCHAR2, 
   cpu_mth                    IN   VARCHAR2 DEFAULT NULL, -- deprecated
   active_sess_pool_mth       IN   VARCHAR2 DEFAULT 'ACTIVE_SESS_POOL_ABSOLUTE', 
   parallel_degree_limit_mth  IN   VARCHAR2 DEFAULT 
                                      'PARALLEL_DEGREE_LIMIT_ABSOLUTE',
   queueing_mth               IN   VARCHAR2 DEFAULT 'FIFO_TIMEOUT',
   mgmt_mth                   IN   VARCHAR2 DEFAULT 'EMPHASIS'
); 




BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_PLAN(plan => 'main_plan',comment => 'main database plan',sub_plan => FALSE);
END;
/
可以通过  DBA_RSRC_PLANS 进行查看


3.创建资源用户组


DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP (
   consumer_group  IN VARCHAR2,
   comment         IN VARCHAR2, 
   cpu_mth         IN VARCHAR2 DEFAULT NULL,
   mgmt_mth        IN VARCHAR2 DEFAULT 'ROUND-ROBIN'); 




BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(consumer_group => 'kaifa',comment => 'kaifa',mgmt_mth => 'ROUND-ROBIN');           
END;
/


BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(consumer_group => 'yingyong',comment => 'yingyong',mgmt_mth => 'ROUND-ROBIN');           
END;
/


BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(consumer_group => 'lingdao',comment => 'lingdao',mgmt_mth => 'ROUND-ROBIN');           
END;
/


我们为开发与应用和领导,各自创建了资源用户组,可以通过  DBA_RSRC_CONSUMER_GROUPS  进行查看


ROUND-ROBIN  --该用户组内各会话的CPU资源采取轮询的分配方法


4.映射资源用户组


DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
   attribute       IN VARCHAR2, 
   value            IN VARCHAR2, 
   consumer_group  IN VARCHAR2 DEFAULT NULL); 




 


上图为 attribute  的内容




create user yanfa1 identified by oracle;
create user yanfa2 identified by oracle;
create user ying1 identified by oracle;
create user ying2 identified by oracle;
create user lingdao identified by oracle;


grant connect,resource,dba to yanfa1;
grant connect,resource,dba to yanfa2;
grant connect,resource,dba to ying1;
grant connect,resource,dba to ying2;
grant connect,resource,dba to lingdao;




BEGIN
    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(attribute => 'ORACLE_USER',value => 'yanfa1',consumer_group => 'kaifa');
END;
/


BEGIN
    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(attribute => 'ORACLE_USER',value => 'yanfa2',consumer_group => 'kaifa');
END;
/


BEGIN
    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(attribute => 'ORACLE_USER',value => 'ying1',consumer_group => 'yingyong');
END;
/


BEGIN
    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(attribute => 'ORACLE_USER',value => 'ying2',consumer_group => 'yingyong');
END;
/


BEGIN
    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(attribute => 'CLIENT_MACHINE',value => 'Lenovo-PC',consumer_group => 'lingdao');
END;
/


我们为2个研发用户,2个应用用户,一个领导用户 与资源用户组做了关联.其中领导比较特殊,领导采用机器的方式进行关联
可以通过  DBA_RSRC_GROUP_MAPPINGS  查看映射结果




5.创建资源计划指令




DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
   plan                      IN VARCHAR2, 
   group_or_subplan          IN VARCHAR2, 
   comment                   IN VARCHAR2, 
   cpu_p1                    IN NUMBER   DEFAULT NULL, -- deprecated
   cpu_p2                    IN NUMBER   DEFAULT NULL, -- deprecated
   cpu_p3                    IN NUMBER   DEFAULT NULL, -- deprecated
   cpu_p4                    IN NUMBER   DEFAULT NULL, -- deprecated
   cpu_p5                    IN NUMBER   DEFAULT NULL, -- deprecated
   cpu_p6                    IN NUMBER   DEFAULT NULL, -- deprecated
   cpu_p7                    IN NUMBER   DEFAULT NULL, -- deprecated
   cpu_p8                    IN NUMBER   DEFAULT NULL, -- deprecated
   active_sess_pool_p1       IN NUMBER   DEFAULT NULL,
   queueing_p1               IN NUMBER   DEFAULT NULL,
   parallel_degree_limit_p1  IN NUMBER   DEFAULT NULL,
   switch_group              IN VARCHAR2 DEFAULT NULL,
   switch_time               IN NUMBER   DEFAULT NULL,
   switch_estimate           IN BOOLEAN  DEFAULT FALSE,
   max_est_exec_time         IN NUMBER   DEFAULT NULL,
   undo_pool                 IN NUMBER   DEFAULT NULL,
   max_idle_time             IN NUMBER   DEFAULT NULL,
   max_idle_blocker_time     IN NUMBER   DEFAULT NULL,
   switch_time_in_call       IN NUMBER   DEFAULT NULL, -- deprecated
   mgmt_p1                   IN NUMBER   DEFAULT NULL,
   mgmt_p2                   IN NUMBER   DEFAULT NULL,
   mgmt_p3                   IN NUMBER   DEFAULT NULL,
   mgmt_p4                   IN NUMBER   DEFAULT NULL,
   mgmt_p5                   IN NUMBER   DEFAULT NULL,
   mgmt_p6                   IN NUMBER   DEFAULT NULL,
   mgmt_p7                   IN NUMBER   DEFAULT NULL,
   mgmt_p8                   IN NUMBER   DEFAULT NULL,
   switch_io_megabytes       IN NUMBER   DEFAULT NULL,
   switch_io_reqs            IN NUMBER   DEFAULT NULL,
   switch_for_call           IN BOOLEAN  DEFAULT NULL); 












BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'main_plan',                                       
    group_or_subplan => 'kaifa',                            --可以指定用户组,也可以指定Sub Plan和上一个参数构成了 Plan Diretive 的唯一属性                     
    comment => 'Directives for yanfa',
    active_sess_pool_p1 => 1,                               --最大活跃会话数,达到该限制后其他会话进入 Inactive session queue                          
    queueing_p1 => 1,                                       --在 Inactive session queue 的等待超时时间
    parallel_degree_limit_p1 => 2,                          --最大并行度
    switch_group => 'KILL_SESSION',                         --在满足指定条件后,对会话所采取的操作
    switch_time => 60,                                      --执行时间限制,会话操作执行时间超过该值后,即被采取上一步的相应操作(second)
    switch_estimate => FALSE,                               --如果设置为 TRUE,在操作执行前Oracle先估算执行时间以决定是否对其切换用户组
    max_est_exec_time => 0,                                 --最大估算执行时间,优化器对操作时间进行估算,如果超过该值则直接返回“ORA-07455”
    undo_pool => NULL,                                      --uncommited undo segments 限制(KB)
    max_idle_time => 300,                                   --会话最大空闲时间
    max_idle_blocker_time => 3,                             --Blocker会话的最大空闲时间
    mgmt_p1 => 10,                                          --CPU使用限制(Level 1)
    mgmt_p2 => 0);                                          --CPU使用限制(Level 2)
END;
/


由于研发的帐号比较严格,只允许一个帐号在线,只允许 2 个并行, 如果一个查询超过了 60 秒就会被kill




BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'main_plan',                                       
    group_or_subplan => 'yingyong',                         --可以指定用户组,也可以指定Sub Plan,和上一个参数构成了 Plan Diretive 的唯一属性                     
    comment => 'Directives for yingyong',
    active_sess_pool_p1 => 2,                               --最大活跃会话数,达到该限制后其他会话进入 Inactive session queue                          
    queueing_p1 => 1,                                       --在 Inactive session queue 的等待超时时间
    parallel_degree_limit_p1 => 2,                          --最大并行度
    switch_group => 'KILL_SESSION',                         --在满足指定条件后,对会话所采取的操作
    switch_time => 0,                                       --执行时间限制,会话操作执行时间超过该值后,即被采取上一步的相应操作(second)
    switch_estimate => FALSE,                               --如果设置为 TRUE,在操作执行前Oracle先估算执行时间以决定是否对其切换用户组
    max_est_exec_time => 0,                                 --最大估算执行时间,优化器对操作时间进行估算,如果超过该值则直接返回“ORA-07455”
    undo_pool => NULL,                                      --uncommited undo segments 限制(KB)
    max_idle_time => 300,                                   --会话最大空闲时间
    max_idle_blocker_time => 3,                             --Blocker会话的最大空闲时间
    mgmt_p1 => 10,                                          --CPU使用限制(Level 1)
    mgmt_p2 => 0);                                          --CPU使用限制(Level 2)
END;
/


应用的帐号权限也不高,但可以两个用户同时在线.




BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'main_plan',                                       
    group_or_subplan => 'lingdao',                          --可以指定用户组,也可以指定Sub Plan,和上一个参数构成了 Plan Diretive 的唯一属性                     
    comment => 'Directives for lingdao',
    active_sess_pool_p1 => 1,                               --最大活跃会话数,达到该限制后其他会话进入 Inactive session queue                          
    queueing_p1 => 1  ,                                     --在 Inactive session queue 的等待超时时间
    parallel_degree_limit_p1 => 200,                        --最大并行度
    switch_group => 'KILL_SESSION',                         --在满足指定条件后,对会话所采取的操作
    switch_time => 0,                                       --执行时间限制,会话操作执行时间超过该值后,即被采取上一步的相应操作(second)
    switch_estimate => FALSE,                               --如果设置为 TRUE,在操作执行前Oracle先估算执行时间以决定是否对其切换用户组
    max_est_exec_time => 0,                                 --最大估算执行时间,优化器对操作时间进行估算,如果超过该值则直接返回“ORA-07455”
    undo_pool => NULL,                                      --uncommited undo segments 限制(KB)
    max_idle_time => 300,                                   --会话最大空闲时间
    max_idle_blocker_time => 3,                             --Blocker会话的最大空闲时间
    mgmt_p1 => 0,                                          --CPU使用限制(Level 1)
    mgmt_p2 => 50);                                          --CPU使用限制(Level 2)
END;
/




BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    plan => 'main_plan',                                       
    group_or_subplan => 'OTHER_GROUPS',                     --可以指定用户组,也可以指定Sub Plan,和上一个参数构成了 Plan Diretive 的唯一属性                     
    comment => 'Directives for OTHER_GROUPS',
    mgmt_p1 => 20,                                          --CPU使用限制(Level 1)
    mgmt_p2 => 0);                                          --CPU使用限制(Level 2)
END;
/


OTHER_GROUPS 建议不要进行限制,否则库会启不来.
领导还是比较牛的,可以给 200个并行,  cpu 只可以使用  (100-40) 的一半也就是 30%这就很牛了, 大家看到 oracle 这个实例一共可使用 os 的  10 + 10 + 20+ 30 共70% cpu,留下的  30% cpu 留下给其它实例与os. OTHER_GROUPS  就是留下其它用户,比如系统system,sys来使用的资源.





7.验证并提交




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.




我们看到验证成功,也提交成功




8.修改参数进行测试


SQL> alter system set resource_manager_plan='main_plan' scope=both;


System altered.


重启后进行测试


      7.1 测试开发用户只有一人active
          新建立两session 
          同时运行select count(*) from system.wh left  join system.wh1 on wh.object_id=wh1.object_id;   大约 1亿条数据


          第两个session 报
          ERROR at line 1:
          ORA-07454: queue timeout, 1 second(s), exceeded 
      后面依次进行测试即可






          
           














































附(动态性能视图及数据字典)
DBA_RSRC_CATEGORIES
DBA_RSRC_CONSUMER_GROUP_PRIVS
DBA_RSRC_CONSUMER_GROUPS
DBA_RSRC_GROUP_MAPPINGS
DBA_RSRC_IO_CALIBRATE
DBA_RSRC_MANAGER_SYSTEM_PRIVS
DBA_RSRC_MAPPING_PRIORITY
DBA_RSRC_PLAN_DIRECTIVES
DBA_RSRC_PLANS
V$RSRC_CONS_GROUP_HISTORY 
V$RSRC_CONSUMER_GROUP 
V$RSRC_CONSUMER_GROUP_CPU_MTH 
V$RSRC_PLAN 
V$RSRC_PLAN_CPU_MTH 
V$RSRC_PLAN_HISTORY 
V$RSRC_SESSION_INFO 
V$RSRCMGRMETRIC 
V$RSRCMGRMETRIC_HISTORY












相关文章
|
29天前
|
Oracle 关系型数据库
19c 开启Oracle Database Vault
19c 开启Oracle Database Vault
17 1
|
13天前
|
人工智能 Oracle 关系型数据库
一篇文章弄懂Oracle和PostgreSQL的Database Link
一篇文章弄懂Oracle和PostgreSQL的Database Link
|
29天前
|
SQL Oracle 安全
Oracle Database Vault Access Control Components
Oracle Database Vault Access Control Components
10 0
|
29天前
|
Oracle 安全 关系型数据库
What Is Oracle Database Vault?
The Oracle Database Vault security controls protect application data from unauthorized access, and helps you to comply with privacy and regulatory requirements. You can deploy controls to block privileged account access to application data and control sensitive operations inside the database using
11 0
|
2月前
|
Oracle 关系型数据库 Linux
服务器Centos7 静默安装Oracle Database 12.2
服务器Centos7 静默安装Oracle Database 12.2
104 0
|
5月前
|
Oracle 关系型数据库 数据库
windows Oracle Database 19c 卸载教程
打开任务管理器 ctrl+Shift+Esc可以快速打开任务管理器,找到oracle所有服务然后停止。 停止数据库服务 在开始卸载之前,确保数据库服务已经停止。你可以使用以下命令停止数据库服务: net stop OracleServiceORCL Universal Installer 卸载Oracle数据库程序 一般情况运行Oracle自带的卸载程序,如使用Universal Installer 工具卸载。 点击开始菜单找到Oracle,然后点击Oracle安装产品,再点击Universal Installer。 点击之后稍等一会然后会进入进入下图界面,点击卸载产品。 选中要删除的Orac
132 1
|
6月前
|
存储 Oracle 关系型数据库
windows 使用 Oracle Database 19c
Oracle数据库是由美国Oracle Corporation(甲骨文公司)开发和提供的一种关系型数据库管理系统,它是一种强大的关系型数据库管理系统(RDBMS)。它使用表格(表)组织和存储数据,通过SQL语言进行数据管理。数据以表格形式存储,表之间可以建立关系。支持事务处理、多版本并发控制、安全性和权限控制。具有高可用性、容错性,支持分布式数据库和可扩展性。Oracle Corporation提供全面的支持和服务,使其成为企业级应用的首选数据库系统。
61 0
|
11月前
|
Oracle 关系型数据库 Linux
服务器Centos7 静默安装Oracle Database 12.2(下)
服务器Centos7 静默安装Oracle Database 12.2(下)
244 0
|
11月前
|
Oracle 安全 关系型数据库
服务器Centos7 静默安装Oracle Database 12.2(上)
服务器Centos7 静默安装Oracle Database 12.2(上)
94 0
|
11月前
|
存储 Oracle 关系型数据库

热门文章

最新文章

推荐镜像

更多