• 在数据库中限制某个用户的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%。

  • 相关阅读:
    flutter 使用keyboard_actions 关闭ios键盘
    Android Studio androidx 包冲突解决方法
    flutter 卡在Running Gradle task 'assembleDebug'...
    SpringBoot Controller接收参数的几种常用方式
    RN 0.6以后react-navigation 导航报错null is not an object (evaluating '_RNGestureHandlerModule.default.Direction')
    flutter 调用摄像头和照片
    RN 真机roload
    iOS Undefined symbols for architecture armv7:
    android 签名生成和签名验证
    Keil MDK中Image~~RW_IRAM1~~ZI~~Limit(~表示$)
  • 原文地址:https://www.cnblogs.com/missyou-shiyh/p/14149268.html
Copyright © 2020-2023  润新知