ORACLE 12C探索之路07(PDB资源管理之CPU)

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。

  1. 创建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.

  1. 创建CDB资源计划,计划的名字是woqucdb_plan
BEGIN  DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(
    plan    => 'newcdb_plan',
    comment => 'CDB resource plan for newcdb');
END;
/
  1. 创建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指令。
  1. 更新当前默认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;
/
  1. 更新当前自动任务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;
/
  1. 使用以下VALIDATE_PENDING_AREA步骤验证pending area
exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
  1. 使用以下SUBMIT_PENDING_AREA步骤提交pending area
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
  1. 启用CDB资源管理
在CDB$ROOT中
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'newcdb_plan';
  1. 设置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;
  1. 检查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
  1. 检查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了。
  1. 监视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

你可能感兴趣的:(ORACLE 12C探索之路07(PDB资源管理之CPU))