zoukankan      html  css  js  c++  java
  • oracle12c之三 控制PDB中CPU 资源使用

     

    CPU资源隔离

    数据库中,不同的PDB对主机CPU资源使用要求不同,那么我们就可以使用CDB resourceplans来管理不同pdb对CPU资源的使用。

     

    CDB Resource Plans

    PDB数量很多的情况下,使用这种CDB级别的资源计划对每个PDB进行资源限制会很麻烦。在12cR2版本中,引入了PDB Performance profile特性,来使一组PDB使用相同的resource plan,而不是一个个PDB进行配置。一些资源需求相同的PDB,可以创建一个performance profile,这些PDB只要设置一下DB_PERFORMANCE_PROFILE初始化参数,就可以使用相同的性能配置。

     

    例:

    创建PDB性能配置的CDB资源计划

    创建CDB资源计划:woqucdb_plan。里面包括PDB performance profile,gold、silver。
     

    1)创建pending area

    CDB$ROOT

    exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
     
     
     
     
     
    1
    1
     
     
     
    1
    exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
     
     
    此过程会对资源管理器对象进行更改。
    对计划模式的所有更改都必须在待处理区域内完成。 待处理区域可以作为计划架构更改的“临时”区域。 
    管理员创建此挂起区域,根据需要进行更改,可能验证这些更改,并且只有在提交完成后,这些更改才会生效。
     
    2)创建CDB资源计划
    计划的名字是woqucdb_plan
    BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(
    plan => 'woqucdb_plan',
    comment => 'CDB resource plan for woqucdb');
    END;
    /
     
     
     
     
     
    6
    6
     
     
     
    1
    BEGIN
    2
    DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(
    3
    plan => 'woqucdb_plan',
    4
    comment => 'CDB resource plan for woqucdb');
    5
    END;
    6
    /
     
     
    3)创建PDB Performance profile
    创建PDBprofile, gold
    BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
    plan => 'woqucdb_plan,
    profile => 'gold',
    shares => 3,
    utilization_limit => 100,
    parallel_server_limit => 100);
    END;
    /
     
     
     
     
     
    9
    9
     
     
     
    1
    BEGIN
    2
    DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
    3
    plan => 'woqucdb_plan,
    4
    profile => 'gold',
    5
    shares => 3,
    6
    utilization_limit => 100,
    7
    parallel_server_limit => 100);
    8
    END;
    9
    /
     
     
    创建PDBProfile, silver
    BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
    plan => 'newcdb_plan',
    profile => 'silver',
    shares => 2,
    utilization_limit => 40,
    parallel_server_limit => 40);
    END;
    /
     
     
     
     
     
    9
    9
     
     
     
    1
    BEGIN
    2
    DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
    3
    plan => 'newcdb_plan',
    4
    profile => 'silver',
    5
    shares => 2,
    6
    utilization_limit => 40,
    7
    parallel_server_limit => 40);
    8
    END;
    9
    /
     
     
    DBProfile, bronze
    BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
    plan => 'newcdb_plan',
    profile => 'bronze',
    shares => 1,
    utilization_limit => 20,
    parallel_server_limit => 20);
    END;
    /
     
     
     
     
     
    9
    9
     
     
     
    1
    BEGIN
    2
    DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
    3
    plan => 'newcdb_plan',
    4
    profile => 'bronze',
    5
    shares => 1,
    6
    utilization_limit => 20,
    7
    parallel_server_limit => 20);
    8
    END;
    9
    /
     
     
     
    4)更新默认的PDBdirective
    BEGIN
    DBMS_RESOURCE_MANAGER.UPDATE_CDB_PROFILE_DIRECTIVE(
    plan=> 'woqucdb_plan',
    profile=> 'gold',
    new_shares=> 1,
    new_utilization_limit=> 10,
    new_parallel_server_limit=> 20);
    END;
    /
     
     
     
     
     
    9
    9
     
     
     
    1
    BEGIN
    2
    DBMS_RESOURCE_MANAGER.UPDATE_CDB_PROFILE_DIRECTIVE(
    3
    plan=> 'woqucdb_plan',
    4
    profile=> 'gold',
    5
    new_shares=> 1,
    6
    new_utilization_limit=> 10,
    7
    new_parallel_server_limit=> 20);
    8
    END;
    9
    /
     
     
    5)更新自动PDB directive
          使用UPDATE_CDB_AUTOTASK_DIRECTIVE
     
    6)校验pending area
    execDBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
     
     
     
     
     
    1
    1
     
     
     
    1
    execDBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
     
     
     
    7)提交pending area
    execDBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
     
     
     
     
     
    1
    1
     
     
     
    1
    execDBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
     
     
    8)启用CDB资源管理
     
    在CDB$ROOT中
    ALTERSYSTEM SET RESOURCE_MANAGER_PLAN = 'woqucdb_plan' scope=both;
     
     
     
     
     
    1
    1
     
     
     
    1
    ALTERSYSTEM SET RESOURCE_MANAGER_PLAN = 'woqucdb_plan' scope=both;
     
     
    9)在PDB中设置performanceprofile
    altersession set container=PDB1;
    altersystem set db_performance_profile='gold' scope=spfile;
    altersession set container=PDB2;
    altersystem set db_performance_profile='silver' scope=spfile;
    altersession set container=PDB3;
    altersystem set db_performance_profile='bronze' scope=spfile;
     
     
     
     
     
    6
    6
     
     
     
    1
    altersession set container=PDB1;
    2
    altersystem set db_performance_profile='gold' scope=spfile;
    3
    altersession set container=PDB2;
    4
    altersystem set db_performance_profile='silver' scope=spfile;
    5
    altersession set container=PDB3;
    6
    altersystem set db_performance_profile='bronze' scope=spfile;
     
     
     
    重启PDB
    conn/as sysdba
    alterpluggable database all close immediate;
    alterpluggable database all open;
     
     
     
     
     
    3
    3
     
     
     
    1
    conn/as sysdba
    2
    alterpluggable database all close immediate;
    3
    alterpluggable database all open;
     
     
     
    也可以在PDB中一个个单独设置并重启
    altersession set container=PDB4;
    altersystem set db_performance_profile=gold scope=spfile;
    alterpluggable database close immediate;
    alterpluggable database open;
     
     
     
     
     
    4
    4
     
     
     
    1
    altersession set container=PDB4;
    2
    altersystem set db_performance_profile=gold scope=spfile;
    3
    alterpluggable database close immediate;
    4
    alterpluggable database open;
     
     
     
    10)检查PDB的参数
    altersession set container=CDB$ROOT;
    selectinst_id, name, con_id, value, ispdb_modifiable from gv$system_parameter2 wherename = 'db_performance_profile' order by 1,2,3,4;
     
     
     
     
     
    2
    2
     
     
     
    1
    altersession set container=CDB$ROOT;
    2
    selectinst_id, name, con_id, value, ispdb_modifiable from gv$system_parameter2 wherename = 'db_performance_profile' order by 1,2,3,4;
     
     
    11)检查PDB的资源管理设置
    我们只需要在相应的pdb中设置db_performance_profile初始化参数即可让当前的PDB使用哪个profile了。
     
    PDB的资源限制,我们既可以设置CDB resource plan同样也可以设置pdb的初始化参数控制,两者皆可。
    当PDB数据很多时,更建议使用CDB resource plan结合pdb performance profile使用。
     

    指令中的share参数意义

    DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE中shares来明确给PDB的共享值。多个PDB可以共用这一个profile。

    CPU  : utilization_limit标识一个pdb可以使用系统百分比,取值0-100. 你可以在pdb中设置cpu_count参数限制使用。

              例:cpu_count=4  那么当前pdb任何情况下都不会超过4,如果utilization_limit和 cpu_count同时设置,默认取最小值 

    Paralle:如果初始化PARALLEL_SERVERS_TARGET 设置为200 并具,parallel_server_limit 在当前PDB设置为10%,对于PDB利用极限是20并行度(200乖以0.1)

     
     
    12)默认performance profile
    我们可以通过show parameter 命令查看当前pdb的performance profile,如果是空值的话,即为默认的performanceprofile。默认的performance profile中,shares值默认为1,utilization_limit和parallel_server_limit都为100,也就是说不对当前的pdb做任何的有关cpu资源的限制。
    show parameter db_performance_profile
     
     
     
     
     
    1
    1
     
     
     
    1
    show parameter db_performance_profile
     
     

    31)更改默认performance profile

    我们可以用下面的过程来更改默认的指令。

     
    BEGIN
    DBMS_RESOURCE_MANAGER. UPDATE_CDB_DEFAULT_DIRECTIVE (
    PLAN =>'newcdb_plan',
    NEW_COMMENT => 'CDB resourceplan for newcdb1',
    NEW_SHARES => 3,
    NEW_UTILIZATION_LIMIT => 100,
    NEW_PARALLEL_SERVER_LIMIT => 100);
    END;
    /
     
     
     
     
     
    9
     
     
     
     
     
    1
    BEGIN
    2
    DBMS_RESOURCE_MANAGER. UPDATE_CDB_DEFAULT_DIRECTIVE (
    3
    PLAN =>'newcdb_plan',
    4
    NEW_COMMENT => 'CDB resourceplan for newcdb1',
    5
    NEW_SHARES => 3,
    6
    NEW_UTILIZATION_LIMIT => 100,
    7
    NEW_PARALLEL_SERVER_LIMIT => 100);
    8
    END;
    9
    /
     
     

    当一个PDB从CDB中拔出时,相应的指令默认保留,当这个PDB迁移回来,它就会继续使用这个指令。除非手工删除。

    一个指令可以给多个PDB使用,但是一个PDB不能用多个指令。




    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





  • 相关阅读:
    使用 Istio 进行 JWT 身份验证(充当 API 网关)
    DNS 私有域的选择:internal.xxx.com/lan.xxx.com 还是 xxx.local/xxx.srv?
    「Bug」K8s 节点的 IP 地址泄漏,导致 IP 被耗尽
    Linux网络学习笔记(二):域名解析(DNS)——以 CoreDNS 为例
    Linux 发行版的选用(服务器和个人桌面)
    「Bug」VMware 虚拟机的关机测试中,Ubuntu 明显比 CentOS 慢
    VMware vSphere :服务器虚拟化
    「Bug」ubuntu 使用国内 apt 源构建 docker 时提示 hash 不匹配
    留言板
    Idea 自定义快捷代码输入 如syso => System.out.println()
  • 原文地址:https://www.cnblogs.com/cqdba/p/f58ae3b561e0eebe1f2e6719c02c21b2.html
Copyright © 2011-2022 走看看