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;">





posted @ 2019-04-24 11:24  www.cqdba.cn  阅读(2005)  评论(0编辑  收藏  举报