如何使用待处理区域创建资源计划
两个 DBMS 包
DBMS_RESOURCE_MANAGER 管理资源计划
DBMS_RESOURCE_MANAGER_PRIVS 授予用户管理资源的权限
计划架构:
< p>包括一个顶层计划以及下面的子计划和消费组自计划的配额也是按照100%分配
创建简单的资源计划:
CREATE_SIMPLE_PLAN 中最多可以创建 8 个组
BEGIN
DBMS_RESOURCE_MANAGER。 CREATE_SIMPLE_PLAN(SIMPLE_PLAN => 'simple_plan1',
CONSUMER_GROUP1 => 'mygroup1', GROUP1_CPU => 80,
CONSUMER_GROUP2 => 'mygroup2', GROUP2_CPU => 20);
END; p>
这个方法的作用是不需要创建待处理区域。
使用待处理区域创建资源计划
在创建资源计划之前,您必须创建待处理区域。创建资源计划后,您必须验证并提交待处理区域。
创建pending_area
EXEC DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
验证
EXEC DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;
提交(提交后会自动释放待处理区域)
EXEC DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
手动释放
EXEC DBMS_RESOURCE_MANAGER。 CLEAR_PENDING_AREA;
资源计划参数
PLAN资源计划名称
COMMENT说明
CPU_MTH CPU分配方式,包括EMPHASIS(按百分比)和RATIO(按比例,几个对几个对几个)。其中,EMPHASIS为默认
ACTIVE_SESS_POOL_MTH。最大数量活动会话即可,默认为ACTIVE_SESS_POOL_ABSOLUTE
PARALLEL_DEGREE_LIMIT_MTH并行度,默认为PARALLEL_DEGREE_LIMIT_ABSOLUTE
QUEUEING_MTH队列资源分配方式,决定哪些会话将首先执行。默认 FIFO_TIMEOUT
创建资源计划
EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'great_bread', COMMENT => 'great plan') ;
修改资源计划
EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN(PLAN => 'great_bread', NEW_COMMENT => '伟大的计划,伟大的面包');
删除资源计划
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN(PLAN => 'great_bread'); --只删除计划,不删除对应的资源组
DELETE_PLAN_CASCADE进行级联删除
比率策略
确定级别中每个资源组可用的 CPU 比例。
以下为金牌服务设置e、银牌服务、Bonze服务、最低服务比例为10比5比2比1。
如果当前只有金牌服务和银牌服务,则按照10比5分配。
DBMS_RESOURCE_MANAGER.CREATE_PLAN
(PLAN => '< strong>service_level_plan',
CPU_MTH -> 'RATIO',
COMMENT => '服务级别计划');
DBMS_RESOURCE_MANAGER。CREATE_PLAN_DIRECTIVE
(PLAN => 'service_level_plan',
GROUP_OR_SUBPLAN => 'GOLD_CG',
COMMENT => '金牌服务级别客户',< br/> CPU_P1 => 10);
DBMS_RESOURCE_MANAGER。CREATE_PLAN_DIRECTIVE
(PLAN => 'service_level_plan',
GROUP_OR_SUBPLAN => ' SILVER_CG',
COMMENT => '银牌服务级别客户',
CPU_P1 => 5);
DBMS_RESOURCE_MANAGER。CREATE_PLAN_DIRECTIVE
(计划 => '服务ice_level_plan',< br/> GROUP_OR_SUBPLAN => 'BRONZE_CG',
COMMENT => 'Bonze 服务级别客户',
CPU_P1 => 2);< br/>DBMS_RESOURCE_MANAGER。 CREATE_PLAN_DIRECTIVE
(PLAN => 'service_level_plan',
GROUP_OR_SUBPLAN => 'OTHER_GROUPS',
COMMENT => “最低优先级会话”,
CPU_P1 => 1);
参数:
CONSUMER_GROUP名称
COMMENT描述
CPU_MTH CPU分配方法,默认是ROUND_ROBIN,使用ROUND_ROBIN调度器来保证会话正确执行。还有RUN_TO_COMPLETION选项
特殊资源消耗组(无法修改和删除)
DEFAULT_CONSUMER_GROUP 所有不使用的用户和会话显式指定消费组 默认消费组。
OTHER_GROUPS 不能明确是分配给用户并适用于不在当前计划架构中的消费者组中的所有用户。
同时ORACLE提供的SYSTEM_PLAN资源计划下有两个消费组SYS_GROUP和LOW_GROUP
p>
创建消费组
创建前必须先创建待处理区域
EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP (CONSUMER_GROUP => 'sales ', COMMENT => '零售和批发销售') ;
修改消费组
UPDATE_CONSUMER_GROUP
< br/>
删除消费组
DELETE_CONSUMER_GROUP
创建资源计划指令资源计划指令
资源计划命令将消耗组分配给资源计划,并指定各种分配方式的参数
参数:
PLAN 计划名称
p>GROUP_OR_SUBPLAN 消耗组活孩子计划名称
COMMENT 备注
CPU_P1 至 CPU_P8 对于 EMPHASIS 模式,指定当前级别的百分比。对于 RATIO,指定分配比率。 RATIO仅对CPU_P1有效,不适用于后续级别。 。
ACTIVE_SESS_POOL_P1 最大活动会话数,默认为UNLIMITED
QUEUEING_P1 队列中的超时时间,默认为UNLIMITED
PARALLEL_DEGREE_LIMIT_P 并行度,默认为UNLIMITED
SWITCH_GROUP
SWITCH_TIME
SWITCH_ESTIMATE
MAX_EST_EXEC_TIME
UNDO_POOL
< p>MAX_IDLE_TIME 会话最大空闲时间MAX_IDLE_BLOCKER_TIME 阻塞会话最大空闲时间
SWITCH_TIME_IN_CALL
创建资源计划指令 p>
开始
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
PLAN => 'great_bread', < /p>
GROUP_OR_SUBPLAN => '销售',
COMMENT => '销售组',
CPU_P1 => 60,
PARALLEL_DEGREE_LIMIT_P1 => 4);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
PLAN => 'great_bread',
GROUP_OR_SUBPLAN => '市场',
COMMENT => '营销组',
CPU_P1 => 20 );
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
PLAN => 'great_bread',
GROUP_OR_SUBPLAN => '开发', p>
COMMENT => '开发组',
CPU_P1 => 20);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
PLAN => 'great_bread',
GROUP_OR_SUBPLAN =>'OTHER_GROUPS',
COMMENT => '此为必需',
CPU_P1 => 0, < /p>
CPU_P2 => 100);
END;
修改资源计划指令
EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE (
PLAN => 'great_bread',
GROUP_OR_SUBPLAN => '开发',
NEW_CPU_P1 => 15);
删除
DELETE_PLAN_DIRECTIVE
< /p>
管理消费组
存储过程使用的资源
SET_CONSUMER_GROUP_MAPPING
SET_CONSUMER_GROUP_MAPPING_PRI
更改正在执行的会话的消耗组
您可以更改CPU和其他配额,而无需踢出会话。
参数为会话 sid、serial# 和消费者组名称
EXEC DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_SESS (
'17',
' 12345',
'high_priorty');
更改用户消费组
< p>EXEC DBMS_RESOURCE_MANAGER.SWITCH_CONSUMER_GROUP_FOR_USER ('scott',
'low_group');
使用DBMS_SESSION包切换消费组
如果授予切换权限,用户可以更改自己的消费组
参数:
NEW_CONSUMER_GROUP新组
OLD_CONSUMER_GROUP旧组(这是一个OUT类型参数)
INITIAL_GROUP_ON_ERROR的行为发生切换错误时。 TRUE表示发生切换错误时,用户切换到初始消费组,FALSE表示发生错误时报告错误
示例:
SET serveroutput on
DECLARE
old_group varchar2(30);
BEGIN
DBMS_SESSION.SWITCH_CURRENT_CONSUMER_GROUP ('sales', old_group, FALSE);
DBMS_OUTPUT.PUT_LINE('OLD GROUP = ' || old_group) ;
结束;
允许用户切换到指定的消费组
EXEC DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP (
p>
'scott', 'bug_batch_group(组名)', TRUE (SCOTT也可以授权其他人切换到该组));
撤销切换权限
EXEC DBMS_RESOURCE_MANAGER_PRIVS.REVOKE_SWITCH_CONSUMER_GROUP ( p>
'scott',
'bug_batch_group');
自动将会话映射到消费组p
通过session属性和消费组自动连接,分为登录属性和运行时属性。
使用的存储过程:
SET_CONSUMER_GROUP_MAPPING
SET_CONSUMER_GROUP_MAPPING_PRI
创建映射
参数:
ATTRIBUTE
VALUE
CONSUMER_GROUP
< /p>
ATTRIBUTE 支持的属性:
登录属性:
ORACLE_USER
SERVICE_NAME
CLIENT_OS_USER
p>CLIENT_PROGRAM
CLIENT_MACHINE
运行时属性:
MODULE_NAME
MODULE_NAME_ACTION
>SERVICE_MODULE
SERVICE_MODULE_ACTION
示例:
将 sys 映射到 backup_cg p>
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING
(DBMS_RESOURCE_MANAGER.ORACLE_USER, 'sys', 'backup_cg');
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END ;
设置会话时的优先级属性作为映射条件
必须指定EXPLICIT,且EXPLICIT必须为1
BEGIN
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING_PRI(
EXPLICIT => 1 ,
SERVICE_MODULE_ACTION => 2,
SERVICE_MODULE => 3,
MODULE_NAME_ACTION => 4,
MODULE_NAME => 5,
SERVICE_NAME => 6,
ORACLE_USER => 7、
CLIENT_PROGRAM => 8、
CLIENT_OS_USER => 9、
CLIENT_MACHINE => 10);
END;
使资源计划生效
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'mydb_plan';
添加FORCE:可以防止调度程序自动切换资源计划
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'FORCE:mydb_plan';
以下是练习官方文档中给出的示例
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER. CREATE_PLAN(PLAN => 'bugdb_plan', COMMENT => 'bug 用户会话的资源计划/方法');
DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'maildb_plan', COMMENT => '邮件用户会话的资源计划/方法');
DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'mydb_plan', COMMENT => 'bug 的资源计划/方法和邮件用户会话');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Online_group', COMMENT => '在线错误用户会话的资源消费组/方法');< br/>DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Batch_group', COMMENT => '批处理作业错误用户会话的资源使用者组/方法');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Bug_Maint_group', COMMENT => 'bug db m 的用户会话的资源消耗组/方法aint');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Users_group', COMMENT => '邮件用户会话的资源使用者组/方法');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP( CONSUMER_GROUP => 'Postman_group', COMMENT => '邮件邮递员的资源消费组/方法');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Mail_Maint_group' , COMMENT => '邮件数据库维护的用户会话的资源使用者组/方法');
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => ' bugdb_plan',
GROUP_OR_SUBPLAN => 'Online_group',
COMMENT => '1 级在线错误用户会话数', CPU_P1 => 80, CPU_P2=> 0,< br/> PARALLEL_DEGREE_LIMIT_P1 => 8);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'bugdb_plan',
GROUP_OR_SUBPLAN => 'Batch_group',< br/> COMMENT => '批量错误级别 1' 的用户会话,CPU_P1=> 20,CPU_P2 => 0,
PARALLEL_DEGREE_LIMIT_P1 => 2);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'bugdb_plan',
GROUP_OR_SUBPLAN => '< strong>Bug_Maint_group',
COMMENT => '2 级 bug 维护用户会话', CPU_P1 => 0, CPU_P2 = > 100,
PARALLEL_DEGREE_LIMIT_P1 => 3);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN=> 'bugdb_plan',
GROUP_OR_SUBPLAN => 'OTHER_GROUPS',
COMMENT => '该级别的所有其他用户会话3', CPU_P1 = > 0, CPU_P2 => 0,
CPU_P3 => 100);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'maildb_plan',
GROUP_OR_SUBPLAN => 'Postman_group',
COMMENT => '1级邮件邮差',CPU_P1 => 40, CPU_P2 => 0,
PARALLEL_DEGREE_LIMIT_P1 => 4);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (PLAN => 'maildb_plan',
GROUP_OR_SUBPLAN => 'Users_group',
COMMENT => 'mail 用户会话处于级别 2', CPU_P1 => 0, CPU_P2 => 80,
PARALLEL_DEGREE_LIMIT_P1 => 4);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN =>'maildb_plan',
GROUP_OR_SUBPLAN => 'Mail_Maint_group',
COMMENT => '2 级邮件维护用户会话', CPU_P1 => 0, CPU_P2 => 20,
PARALLEL_DEGREE_LIMIT_P1 => 2);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'maildb_plan',
GROUP_OR_SUBPLAN => 'OTHER_GROUPS ',
COMMENT => '级别 3 的所有其他用户会话', CPU_P1 => 0, CPU_P2 => 0,
CPU_P3 => 100);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (PLAN => 'mydb_plan strong>',
GROUP_OR_SUBPLAN => 'maildb_plan',
COMMENT=> '所有邮件用户会话处于级别 1', CPU_P1 => 30);
DBMS_RESOURCE_MANAGER .CREATE_PLAN_DIRECTIVE(PLAN => 'mydb_plan',
GROUP_OR_SUBPLAN => 'bugdb_plan',
COMMENT => '都给我们带来麻烦级别 1 的 ers 会话', CPU_P1 => 70);
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
< /p>
示例 2
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'erp_plan ', COMMENT => 'ERP 数据库的资源计划/方法');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'oltp', COMMENT => 'OLTP 作业的资源消耗组/方法');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'batch', COMMENT => 'BATCH 作业的资源使用组/方法');
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'erp_plan',
GROUP_OR_SUBPLAN = > 'oltp', COMMENT => 'OLTP 会话', CPU_P1 => 80,
SWITCH_GROUP => '批处理', SWITCH_TIME => 3,SWITCH_ESTIMATE => TRUE,
UNDO_POOL => 200);< br/>DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN = > 'erp_plan',
GROUP_OR_SUBPLAN =>'batch', COMMENT => 'BATCH 会话', CPU_P2 => 100,
ACTIVE_SESS_POOL_P1 => 5, QUEUEING_P1 => 600,
MAX_EST_EXEC_TIME => 3600);
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'erp_plan',
GROUP_OR_SUBPLAN => 'OTHER_GROUPS', COMMENT => '强制', CPU_P3 => 100);
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA( );
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
监控和调整资源管理器
查看用户消费组权限
下面的例子中,SCOTT可以对应MARKET和SALES这两个组,并且他可以将其他用户分配到SALES组中,MARKET和SALES不是SCOTT的初始组
SELECT * FROM DBA_RSRC_CONSUMER_GROUP_PRIVS;GRANTEE GRANTED_GROUP --------------- --------------------- - - - -民众NONOSCOTT 市场 是的 状态- ---------- -------------------------------------- ----- --------------- ------SYSTEM_PLAN 计划给予系统会话优先级 ACTIVEBUGDB_PLAN Bug 用户会话的资源计划/方法 ACTIVEMAILDB_PLAN 邮件用户的资源计划/方法会话 ACTIVEMYDB_PLAN 针对 bug 和邮件用户的资源计划/方法 会话 ACTIVEGR EAT_BREAD 伟大的面包计划 ACTIVEERP_PLAN ERP 数据库的资源计划/方法 ACTIVE
查看消费组活动会话的
SQL> SELECT SID,SERIAL#,USERNAME ,RESOURCE_CONSUMER_GROUP FROM V$SESSION;SID SERIAL# USERNAME RESOURCE_CONSUMER_GROUP----- -- ----- ------------------------------------ ---------------------- ---------------... 11 136 SYS SYS_GROUP 13 16570 斯科特销售
p>
查看当前活动的pl
SQL> ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = mydb_plan;系统已更改。SQL> SELECT NAME, IS_TOP_PLAN FROM V$RSRC_PLAN;NAME -------MYDB_PLAN ‐ s s ‐ ‐ ‐ ‐ ‐ - 第 1 列列出了显示与数据库资源管理相关的信息的视图名称。第 2 列描述了每个视图。" title="查看有关数据库资源管理器的信息" width="100%">查看 描述 DBA_RSRC_CONSUMER_GROUP_PRIVS USER_RSRC_CONSUMER_GROUP_PRIVS
DBA 视图列出所有资源使用者组及其所属的用户和角色已被授予。USER 视图列出了授予用户的所有资源使用者组。 DBA_RSRC_CONSUMER_GROUPS < /td> 列出数据库中存在的所有资源消耗组。 DBA_RSRC_MANAGER_SYSTEM_PRIVS USER_RSRC_MANAGER_SYSTEM_PRIVS
DBA 视图列出了已被授予数据库资源管理器系统权限的所有用户和角色。 USER 视图列出了被授予 DBMS_RESOURCE_MANAGER 包系统权限的所有用户。 DBA_RSRC_PLAN_DIRECTIVES< /strong> 列出数据库中存在的所有资源计划指令。 DBA_RSRC_PLANS 列出数据库中存在的所有资源计划。 td> DBA_RSRC_GROUP_MAPPINGS 列出所有会话属性的所有各种映射对 < strong>DBA_RSRC_MAPPING_PRIORITY 列出每个属性当前的映射优先级 DBA_USERS USERS_USERS
DBA 视图包含有关数据库所有用户的信息。具体来说,对于数据库资源管理器来说,它包含用户的初始资源消费组。 USER 视图包含有关当前用户的信息,特别是对于数据库资源管理器,它包含当前用户的初始资源消费组。 < tdalign="left">V$ACTIVE_SESS_POOL_MTH 显示所有可用的活动 sess离子池资源分配方法。 V$BLOCKING_QUIESCE 列出可能阻止停顿操作的所有会话。包括处于活动状态且不在 SYS_GROUP 使用者组中的会话。 V$PARALLEL_DEGREE_LIMIT_MTH< tdalign="left">显示所有可用的并行度限制资源分配方法。 V$QUEUEING_MTH< /td> 显示所有可用的排队资源分配方法。 V$ RSRC_CONS_GROUP_HISTORY 对于视图 V$RSRC_PLAN_HISTORY 中的每个条目,包含计划中每个消费者组的一个条目,显示消费者组的累积统计信息。 V$RSRC_CONSUMER_GROUP 显示有关的信息活跃的资源消费群体。该视图可用于调整。 V$RSRC_CONSUMER_GROUP_CPU_MTH 显示资源消耗组所有可用的CPU资源分配方法。 V $RSRC_PLAN 显示当前所有活动资源计划的名称。 V$RSRC_PLAN_CPU_MTH 显示资源计划的所有可用CPU资源分配方法。 V$RSRC_PLAN_HISTORY 显示在实例上启用或禁用资源管理器计划的时间。它可以帮助您了解随着时间的推移,消费者组之间如何共享资源。 V$RSRC_SESSION_INFO 显示每个会话的资源管理器统计信息。翔了解资源管理器如何影响会话。可用于调整。 V$SESSION 列出每个当前会话的会话信息。具体来说,列出了当前每个会话的资源消费组名称。 到此,《如何使用pending area》的介绍就结束了制定资源计划”。感谢您的阅读。如果您想了解更多行业资讯,可以关注网站,小编将为大家输出更多优质实用文章!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何使用待处理区域创建资源计划