PDB资源管理之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、bronze。
- 创建pending area
在CDB$ROOT中
exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
This proceduremakes changes to resource manager objects.
All changes tothe plan schema must be done within a pending area. The pending area can bethought of as a "scratch" area for plan schema changes. The administratorcreates this pending area, makes changes as necessary, possibly validates thesechanges, and only when the submit is completed do these changes become active.
- 创建CDB资源计划,计划的名字是woqucdb_plan
BEGIN DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(
plan => 'newcdb_plan',
comment => 'CDB resource plan for newcdb');
END;
/
- 创建CDB资源计划指令
--创建PDB profile, gold
BEGIN DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
plan => 'newcdb_plan',
profile => 'gold',
shares => 3,
utilization_limit => 100,
parallel_server_limit => 100);
END;
/
--创建PDB profile, silver
BEGIN DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
plan => 'newcdb_plan',
profile => 'silver',
shares => 2,
utilization_limit => 40,
parallel_server_limit => 40);
END;
/
--创建PDB profile, bronze
BEGIN DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
plan => 'newcdb_plan',
profile => 'bronze',
shares => 1,
utilization_limit => 20,
parallel_server_limit => 20);
END;
/
#此CDB中的所有其他PDB都使用默认的PDB指令。
- 更新当前默认CDB资源计划指令
#如果PDB的当前默认CDB资源计划指令不符合您的要求,则使用该UPDATE_CDB_DEFAULT_DIRECTIVE过程更新指令
BEGIN DBMS_RESOURCE_MANAGER.UPDATE_CDB_DEFAULT_DIRECTIVE(
plan => 'newcdb_plan',
new_shares => 1,
new_utilization_limit => 10,
new_parallel_server_limit => 10);
END;
/
- 更新当前自动任务CDB资源计划指令
#如果当前自动任务CDB资源计划指令不符合您的要求,则使用该UPDATE_CDB_AUTOTASK_DIRECTIVE过程更新指令, autotask指令适用于在root 维护窗口中运行的自动维护任务
BEGIN DBMS_RESOURCE_MANAGER.UPDATE_CDB_AUTOTASK_DIRECTIVE(
plan => 'newcdb_plan',
new_shares => 1,
new_utilization_limit => 60,
new_parallel_server_limit => 60);
END;
/
- 使用以下VALIDATE_PENDING_AREA步骤验证pending area
exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
- 使用以下SUBMIT_PENDING_AREA步骤提交pending area
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
- 启用CDB资源管理
在CDB$ROOT中
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'newcdb_plan';
- 设置PDB db_performance_profile
alter session set container=pdbcndba;
ALTER SYSTEM SET DB_PERFORMANCE_PROFILE=gold SCOPE=spfile;
or
alter session set container=PDB1;
alter system set db_performance_profile='gold' scope=spfile;
alter session set container=PDB2;
alter system set db_performance_profile='silver' scope=spfile;
alter session set container=PDB3;
alter system set db_performance_profile='bronze' scope=spfile;
10.重启pdb
alter session set container=pdbcndba;
ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE OPEN;
#也可以在PDB中一个个单独设置并重启
alter session set container=PDB4;
alter system set db_performance_profile=gold scope=spfile;
alter pluggable database close immediate;
alter pluggable database open;
- 检查PDB的参数
Alter session set container=CDB$ROOT;
col value for a20
col name from a50
set line 200
SQL> Select inst_id, name, con_id, value, ispdb_modifiable from gv$system_parameter2 where name = 'db_performance_profile' order by 1,2,3,4;
INST_ID NAME CON_ID VALUE ISPDB
---------- --------------------------------------------------
1 db_performance_profile 0 TRUE
1 db_performance_profile 3 GOLD TRUE
- 检查PDB的资源管理设置
Alter session set container=CDB$ROOT;
Select p.name,shares,utilization_limit,parallel_server_limit,profile from v$rsrc_plan r,v$pdbs p where r.con_id = p.con_id;
SQL> Select p.name,shares,utilization_limit,parallel_server_limit,profile from v$rsrc_plan r,v$pdbs p where r.con_id = p.con_id;
NAME SHARES UTILIZATION_LIMIT PARALLEL_SERVER_LIMIT PROFILE
-------------------------------------------------- ----------
PDB$SEED 1 10 10
PDBCNDBA 3 GOLD
PDBCNDBA2 1 10 10
我们只需要在相应的pdb中设置db_performance_profile初始化参数即可让当前的PDB使用哪个profile了。
- 监视PDB的CPU使用情况
该V$RSRCPDBMETRIC视图使您能够以毫秒为单位,以会话数量或过去一分钟的利用率来跟踪CPU指标。它为每个PDB提供实时指标,并且在您正在运行工作负载并希望持续监视CPU资源利用率的情况下非常有用。
PDB的CPU使用率是使用PDB的CDB的活动CDB资源计划管理的。您可以使用此视图来比较具有其他PDB设置的PDB的最大可能CPU利用率和平均CPU利用率百分比,例如CPU使用时间,CPU等待时间,CPU使用的平均会话数以及正在等待的会话数用于CPU分配。例如,您可以查看PDB使用的CPU资源数量以及等待资源分配的时间。或者,您可以查看每个PDB执行的会话数与活动会话总数的关系。
--根据PDB的CPU利用率跟踪CPU消耗
要根据CPU利用率跟踪CPU消耗,请使用CPU_UTILIZATION_LIMIT和AVG_CPU_UTILIZATION列。AVG_CPU_UTILIZATION列出PDB消耗的服务器CPU的平均百分比。CPU_UTILIZATION_LIMIT表示PDB可以使用的服务器CPU的最大百分比。此限制是使用UTILIZATION_LIMIT指令属性设置的
COLUMN PDB_NAME FORMAT A10
SELECT r.CON_ID, p.PDB_NAME, r.CPU_UTILIZATION_LIMIT, r.AVG_CPU_UTILIZATION
FROM V$RSRCPDBMETRIC r, CDB_PDBS p
WHERE r.CON_ID = p.CON_ID;
CON_ID PDB_NAME CPU_UTILIZATION_LIMIT AVG_CPU_UTILIZATION
---------- ---------- --------------------- -------------------
3 PDBCNDBA100 0
5 PDBCNDBA2 10 0
--跟踪PDB的CPU消耗和节流
使用CPU_CONSUMED_TIME和CPU_TIME_WAIT列来跟踪每个PDB的CPU消耗和限制(以毫秒为单位)。该列NUM_CPUS表示Resource Manager正在管理的CPU数量。
COLUMN PDB_NAME FORMAT A10
SELECT r.CON_ID, p.PDB_NAME, r.CPU_CONSUMED_TIME, r.CPU_WAIT_TIME, r.NUM_CPUS
FROM V$RSRCPDBMETRIC r, CDB_PDBS p
WHERE r.CON_ID = p.CON_ID;
CON_ID PDB_NAME CPU_CONSUMED_TIME CPU_WAIT_TIMENUM_CPUS
---------- ---------- ----------------- ------------- ----------
3 PDBCNDBA 0 0 1
5 PDBCNDBA2 0 0 1
--根据PDB会话数跟踪CPU消耗和节流
跟踪会话的数量方面的CPU消耗和限制,使用RUNNING_SESSIONS_LIMIT,AVG_RUNNING_SESSIONS和AVG_WAITING_SESSIONS列。RUNNING_SESSIONS_LIMIT列出可以随时运行的特定PDB的最大会话数。此限制由UTILIZATION_LIMIT您为PDB设置的指令属性定义。AVG_RUNNING_SESSIONS列出正在使用CPU的会话的平均数量,并AVG_WAITING_SESSIONS列出正在等待CPU的平均会话数量。
COLUMN PDB_NAME FORMAT A10
SELECT r.CON_ID, p.PDB_NAME, r.RUNNING_SESSIONS_LIMIT, r.AVG_RUNNING_SESSIONS, r.AVG_WAITING_SESSIONS
FROM V$RSRCPDBMETRIC r, CDB_PDBS p
WHERE r.CON_ID = p.CON_ID;
CON_ID PDB_NAME RUNNING_SESSIONS_LIMIT AVG_RUNNING_SESSIONS AVG_WAITING_SESSIONS
---------- ---------- ---------------------- --------------------
3 PDBCNDBA 10 0
5 PDBCNDBA2 .10 0