zoukankan      html  css  js  c++  java
  • 在数据库中限制某个用户的CPU使用率

    虽然知道dbms_resource_manager可以限制CPU的使用率,但也一直未真正使用过。今天有个需求,需要限制数据库某一个或几个用户的CPU最大使用率,于是有了如下测试。

    1. 在数据库中创建MAINTENANCE资源消费组
    begin
    dbms_resource_manager.create_pending_area();

    dbms_resource_manager.create_consumer_group(
    consumer_group=>'MAINTENANCE'
    );

    dbms_resource_manager.submit_pending_area();
    end;
    /


    2. 在数据库中创建消费者与资源消费组的映射规则。
    ----也即将数据库用户test 加入到MAINTENANCE消费组
    begin
    dbms_resource_manager.create_pending_area();

    -- Map 'TEST' user to MAINTENANCE group
    dbms_resource_manager.set_consumer_group_mapping(
    attribute=>'ORACLE_USER',
    value=>'TEST',
    consumer_group=>'MAINTENANCE');

    dbms_resource_manager.submit_pending_area();
    end;
    /


    3. 为数据库用户授权,允许访问资源消费者组。
    begin
    dbms_resource_manager.create_pending_area();

    dbms_resource_manager_privs.grant_switch_consumer_group(
    grantee_name=>'PUBLIC',
    consumer_group=>'MAINTENANCE',
    grant_option=>FALSE);

    dbms_resource_manager.submit_pending_area();
    end;
    /


    4. 设置消费组映射优先级。
    begin
    dbms_resource_manager.create_pending_area();

    dbms_resource_manager.set_consumer_group_mapping_pri(
    explicit => 1,
    oracle_user => 2,
    client_program => 3,
    service_module_action => 4,
    service_module => 5,
    module_name_action => 6,
    module_name => 7,
    service_name => 8,
    client_os_user => 9,
    client_machine => 10 );

    dbms_resource_manager.submit_pending_area();
    end;
    /


    5. 创建数据库资源分配计划
    ---也即MAINTENANCE消费组中的用户最多只允许使用10%的CPU资源
    begin
    dbms_resource_manager.create_pending_area();

    -- Create Resource Plan
    dbms_resource_manager.create_plan(
    plan=>'MYPLAN',
    comment=>'Plan for data warehouse');

    dbms_resource_manager.create_plan_directive(
    plan=>'MYPLAN',
    group_or_subplan=>'MAINTENANCE',
    comment=>'allocation for MAINTENANCE',
    max_utilization_limit=>10);

    dbms_resource_manager.create_plan_directive(
    plan=> 'MYPLAN',
    group_or_subplan=> 'other_groups',
    comment=> 'this group is mandatory',
    max_utilization_limit => 90);

    dbms_resource_manager.submit_pending_area();
    end;
    /


    6. 资源计划生效
    alter system set resource_manager_plan='MYPLAN' sid='*';
    alter system set resource_limit = true;


    7. 压力测试脚本进行验证:
    declare
    i number;
    j number;
    begin
    i := 0;
    loop
    j := sqrt(i);
    i := i + 1;
    end loop;
    end;
    /

    8. 测试结果如图所示:

     一共开启了4个会话分别执行压力测试脚本。 第2,3,4这三个进程是用test用户连接的数据库,所以CPU的使用率基本上在10%左右,而第1个进程是用其他用户连接的数据库,所以它的CPU使用率基本上是100%。

  • 相关阅读:
    ASP.NET前台代码绑定后台变量方法总结
    <%# Eval("name")%>与<%# Bind("name")%>
    验证数字的正则表达式集
    品高:C#与JAVASCRIPT函数的相互调用:1.如何在JavaScript访问C#函数? 2.如何在JavaScript访问C#变量? 3.如何在C#中访问JavaScript的已有变量? 4.如何在C#中访问JavaScript函数?
    Visual Web Developer 的自定义WebForm模板
    关键字加亮JS方法
    vss安装,设置以及与vs2005联合项目操作(转)
    删除SQL中重复行
    完全兼容的 鼠标滚轴缩放图片
    为循环的repeater的第一行加个样式
  • 原文地址:https://www.cnblogs.com/missyou-shiyh/p/14149268.html
Copyright © 2011-2022 走看看