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






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM