免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3385 | 回复: 4
打印 上一主题 下一主题

透彻理解与灵活使用数据库资源管理器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-19 18:05 |只看该作者 |倒序浏览
透彻理解与灵活使用数据库资源管理器

(瑞贝卡股份有限公司 闫少伟 2010.07.15)

    假设你用一个用户连接数据库供web服务器使用。某个客户端查询等待时间过长而取消了查询,它的查询在数据库服务中并没有真正结束。另外假设进行财务成本计算需要很长时间,如果用户在正常工作日执行该操作,将会影响销售、生产现场录入、领导查询等人员的使用。我们希望将这些工作的优先级降低或者放到晚间执行。这都是用数据库资源管理的经典例子。

首先了解资源管理器程序包的一些过程的用法。
1、执行 execute DBMS_RESOURCE_MANAGER.create_pending_area();     创建未决区域。
2、创建资源消费者组。我这里创建一个一般用户组general和资源消费大户组heavy。
   Execute DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP
        (consumer_group=>'general',Comment=>'一般人员');

   Execute DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP
        (consumer_group=>'heavy',Comment=>'长时间占用人员');
创建计划名称
   Execute DBMS_RESOURCE_MANAGER.create_plan
(plan=>'g',COMMENT=>'一般负荷');

   Execute DBMS_RESOURCE_MANAGER.create_plan
(plan=>'h',COMMENT=>'重负荷');

3、创建计划指令
   Execute DBMS_RESOURCE_MANAGER.create_plan_directive
(plan=>'g',
Group_or_subplan=>'general',
Comment =>'一般人员',
Cpu_p1 =>75,
Cpu_p2 =>0,
Parallel_degree_limit_p1 =>12);
将 75%的系统资源赋给一般用户。
Execute DBMS_RESOURCE_MANAGER.create_plan_directive
(plan=>'h',
Group_or_subplan=>'heavy',
Comment =>'长时间占用人员',
Cpu_p1 =>25,
Cpu_p2 =>0,
Parallel_degree_limit_p1 =>6);
将 25%的系统资源赋给长时间占用用户。
       
        这里普通人员的并行化程度限制为12,这里长时间占用人员的并行化程度限制为6。
        这个过程比较复杂、且比较重要。语法清单如下:
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (
   plan                      IN VARCHAR2,
   group_or_subplan          IN VARCHAR2,
   comment                   IN VARCHAR2,
   cpu_p1                    IN NUMBER   DEFAULT NULL,
   cpu_p2                    IN NUMBER   DEFAULT NULL,
   cpu_p3                    IN NUMBER   DEFAULT NULL,
   cpu_p4                    IN NUMBER   DEFAULT NULL,
   cpu_p5                    IN NUMBER   DEFAULT NULL,
   cpu_p6                    IN NUMBER   DEFAULT NULL,
   cpu_p7                    IN NUMBER   DEFAULT NULL,
   cpu_p8                    IN NUMBER   DEFAULT NULL,
   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);
       
       
4、将用户赋予资源消费者组
Execute DBMS_RESOURCE_MANAGER.set_initial_consumer_group(
user =>'UGYB001',Consumer_group =>'general');
5、Execute DBMS_RESOURCE_MANAGER.delete_consumer_group(consumer_group=>'general');
6、Execute DBMS_RESOURCE_MANAGER.validate_pending_area();
7、Execute DBMS_RESOURCE_MANAGER.submit_pending_area();
8、Execute DBMS_RESOURCE_MANAGER.clear_pending_area();
9、dbms_resource_manager.DELETE_PLAN();
10、dbms_resource_manager.update_PLAN();
11、dbms_resource_manager.DELETE_PLAN_cascade();


   下面是一个用户查询时间超过1分钟就取消查询的完整的流程
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN ='';
   清除已经存在的活跃计划
2、exec dbms_resource_manager.clear_pending_area();
   清除已经存在的组和计划
3、exec dbms_resource_manager.create_pending_area();
4、exec dbms_resource_manager.DELETE_PLAN ('LIMIT_EXEC_TIME');
在删除该计划时请进行查询,如果没有该计划就不需要删除了
5、exec dbms_resource_manager.DELETE_CONSUMER_GROUP ('GROUP_WITH_LIMITED_EXEC_TIME');
在删除该组时请进行查询,如果没有该计划就不需要删除了
exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
exec dbms_resource_manager.create_pending_area();
exec dbms_resource_manager.create_consumer_group(CONSUMER_GROUP=>'GROUP_WITH_LIMITED_EXEC_TIME',    COMMENT=>'此消耗组限制每个语句的查询时间');
exec dbms_resource_manager.set_consumer_group_mapping( attribute => DBMS_RESOURCE_MANAGER.ORACLE_USER,    value => 'UFLK01',    consumer_group =>'GROUP_WITH_LIMITED_EXEC_TIME'  );
11、
exec dbms_resource_manager.create_plan(PLAN=> 'LIMIT_EXEC_TIME',COMMENT=>'执行时间超过后杀掉语句');  );
12、
exec dbms_resource_manager.create_plan_directive(    PLAN=> 'LIMIT_EXEC_TIME',    GROUP_OR_SUBPLAN=>'GROUP_WITH_LIMITED_EXEC_TIME',    COMMENT=>'执行时间超过后杀掉语句',    SWITCH_GROUP=>'CANCEL_SQL',    SWITCH_TIME=>60,    SWITCH_ESTIMATE=>false  );
13、
exec dbms_resource_manager.create_plan_directive(    PLAN=> 'LIMIT_EXEC_TIME',    GROUP_OR_SUBPLAN=>'OTHER_GROUPS',    COMMENT=>'别管其它组',    CPU_P1=>100  );
14、
exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;
15、
Exec  DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
16、
exec dbms_resource_manager_privs.grant_switch_consumer_group('UFLK01','GROUP_WITH_LIMITED_EXEC_TIME',false);
17、
exec dbms_resource_manager.set_initial_consumer_group('UFLK01','GROUP_WITH_LIMITED_EXEC_TIME');

18、
select * from DBA_RSRC_CONSUMER_GROUPS;
select * from DBA_RSRC_GROUP_MAPPINGS;
select * from DBA_RSRC_PLANS;
select * from DBA_RSRC_PLAN_DIRECTIVES;
19、
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN ='LIMIT_EXEC_TIME';
20、
SELECT se.sid sess_id, co.name consumer_group,
se.state, se.consumed_cpu_time cpu_time, se.cpu_wait_time, se.queued_time
FROM v$rsrc_session_info se, v$rsrc_consumer_group co
WHERE se.current_consumer_group_id = co.id;
列出当前活跃计划的消费者组执行信息。
21、
select username,resource_CONSUMER_GROUP,count(*) from v$session group by username,resource_CONSUMER_GROUP;


16、

如果要添加新的oracle 用户进入GROUP_WITH_LIMITED_EXEC_TIME 组,需要执行以下两步:
1、dbms_resource_manager_privs.grant_switch_consumer_group('UFLK02','GROUP_WITH_LIMITED_EXEC_TIME',false);
2、
exec dbms_resource_manager.set_initial_consumer_group('UFLK02','GROUP_WITH_LIMITED_EXEC_TIME');

      类似的请思考,限制某些用户的CPU占用,不让它占用超过25%。
更详细的内容请参阅oracle 官方文档库。http://www.oracle.com/pls/db102/homepage  


特别提醒,由于是原创,欢迎剽窃作为你毕业论文以及职称文章,且不用通知本人。  

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2010-07-19 20:42 |只看该作者
不错。学习了啊。

论坛徽章:
3
CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43
3 [报告]
发表于 2010-07-19 21:35 |只看该作者

论坛徽章:
26
处女座
日期:2016-04-18 14:00:4515-16赛季CBA联赛之深圳
日期:2020-06-02 10:10:5015-16赛季CBA联赛之广夏
日期:2019-07-23 16:59:452016科比退役纪念章
日期:2019-06-26 16:59:1315-16赛季CBA联赛之天津
日期:2019-05-28 14:25:1915-16赛季CBA联赛之青岛
日期:2019-05-16 10:14:082016科比退役纪念章
日期:2019-01-11 14:44:062016科比退役纪念章
日期:2018-07-18 16:17:4015-16赛季CBA联赛之上海
日期:2017-08-22 18:18:5515-16赛季CBA联赛之江苏
日期:2017-08-04 17:00:4715-16赛季CBA联赛之佛山
日期:2017-02-20 18:21:1315-16赛季CBA联赛之天津
日期:2016-12-12 10:44:23
4 [报告]
发表于 2010-07-20 15:27 |只看该作者
很详细啊 ~

论坛徽章:
0
5 [报告]
发表于 2010-07-30 13:24 |只看该作者
楼主研究地很细
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP