Oracle- 资源隔离(IO、内存、CPU)

资源隔离-IO、内存、CPU

​ 服务器主机提供IO、内存、CPU、存储空间等资源为数据库使用,Oracle使用Flex Diskgroup为数据库提供存储空间并做了相应的资源隔离。下面看下Oracle是如何为不同的PDB做IO、内存、CPU限制的。

IO 资源管理

IO对数据库性能至关重要。如果某个PDB产生了大量的IO,那可能导致CDB中的其它PDB也受影响。

12cR2中,引入了两个参数MAX_IOPS和MAX_MBPS来限制PDB的物理IO。这两个参数只作用于PDB,不对CDB和非多租户环境生效。另外,这两个参数不限制redo log的写入(LGWR进程)和buffer cache脏块写入磁盘(DBWR进程)。

  • MAX_IOPS参数限制每个可插拔数据库(PDB)每秒IO操作次数

  • MAX_MBPS参数限制每个可插拔数据库(PDB)每秒IO吞吐

这两个参数可以在PDB中设置。如果参数在CDB中设置,则该CDB中的所有PDB将继承CDB中的参数值。该参数不能在非CDB环境中设置。

默认情况下,这两个参数都为0。如果在PDB中这两个参数为0,CDB$ROOT中也为0,那对于PDB来讲,没有IO限制。

有些情况下,虽然物理IO限制已经达到,但是一些关键IO仍然允许,比如:对控制文件的访问或对口令文件的访问,但是这些关键IO也是计入到IO数统计里的。不推荐设置MAX_IOPS的值小于100,MAX_MBPS的值小于25。

参数配置

下面是在CDB级别设置MAX_IOPS 和MAX_MBPS参数,值是对所有PDB。

--设置参数值
SQL>ALTER SYSTEM SET max_iops=100 SCOPE=BOTH;
SQL>ALTER SYSTEM SET max_mbps=400 SCOPE=BOTH;
--移除参数值
SQL>ALTER SYSTEM SET max_iops=0 SCOPE=BOTH;
SQL>ALTER SYSTEM SET max_mbps=0 SCOPE=BOTH;

下面是PDB级别设置这两个参数

SQL>ALTER SESSION SET CONTAINER = pdbcndba;
-- 设置指定PDB参数值
SQL>ALTER SYSTEM SET max_iops=100 SCOPE=BOTH;
SQL>ALTER SYSTEM SET max_mbps=400 SCOPE=BOTH;

-- 移除指定PDB参数值
SQL>ALTER SYSTEM SET max_iops=0 SCOPE=BOTH;
SQL>ALTER SYSTEM SET max_mbps=0 SCOPE=BOTH;

监控PDB的I/O使用情况

Oracle现在提供视图去监控PDB的资源使用(CPU, I/O, parallel execution, memory)

  • V$RSRCPDBMETRIC:每个PDB一行,保存1分钟样本的最后一个指标值
  • V$RSRCPDBMETRIC_HISTORY:每个PDB有61行,从V$RSRCPDBMETRIC视图保存最后60分钟的样本
  • DBA_HIST_RSRC_PDB_METRIC:AWR快照,基于AWR保留期保留

监视PDB实时的IO使用

SET LINESIZE 180
COLUMN pdb_name FORMAT A10
COLUMN begin_time FORMAT A26
COLUMN end_time FORMAT A26
ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD-MON-YYYY HH24:MI:SS.FF';
-- 每个PDB最后样本
SELECT r.con_id,
       p.pdb_name,
       r.begin_time,
       r.end_time,
       r.iops,
       r.iombps,
       r.iops_throttle_exempt,
       r.iombps_throttle_exempt,
       r.avg_io_throttle
FROM   v$rsrcpdbmetric r,
       cdb_pdbs p
WHERE  r.con_id = p.con_id
ORDER BY p.pdb_name;

监视PDB最近N个小时的使用情况

SELECT r.con_id,
       p.pdb_name,
       r.begin_time,
       r.end_time,
       r.iops,
       r.iombps,
       r.iops_throttle_exempt,
       r.iombps_throttle_exempt,
       r.avg_io_throttle
FROM   v$rsrcpdbmetric_history r,
       cdb_pdbs p
WHERE  r.con_id = p.con_id
AND    p.pdb_name = upper('pdbcndba')
ORDER BY r.begin_time;

基于AWR快照监视PDB的使用情况

可以使用DBA_HIST_RSRC_PDB_METRIC来计算一个PDB合理的IO限制。

当计算IO限制值时,可以参考以下列:IOPS、IOMBPS、IOPS_THROTTLE_EXEMPT和IOMBPS_THROTTLE_EXEMPT。

-- pdbcndba的所有AWR快照的信息
SELECT r.snap_id,
       r.con_id,
       p.pdb_name,
       r.begin_time,
       r.end_time,
       r.iops,
       r.iombps,
       r.iops_throttle_exempt,
       r.iombps_throttle_exempt,
       r.avg_io_throttle
FROM   dba_hist_rsrc_pdb_metric r,
       cdb_pdbs p
WHERE  r.con_id = p.con_id
AND    p.pdb_name = 'pdbcndba'
ORDER BY r.begin_time;            

内存资源管理

在12cR2的多租户环境中,PDB的SGA使用情况可能会很不均衡,有些PDB占用了大量的SGA内存,导致某些PDB得不到足够的SGA,进而影响性能。在12cR2的多租户环境中,可以控制和监控每个PDB的主机的内存情况。

满足条件

要控制每个PDB内存使用,下面两个条件必须满足:

  • CDB$ROOT中初始化参数NONCDB_COMPATIBLE保持为默认的FALSE。
  • CDB$ROOT中初始化参数MEMORY_TARGET没有设置或设置为0,即关闭内存自动管理

管理PDB内存资源

管理PDB的SGA

  • SGA_TARGET参数控制PDB使用的最大SGA大小,在PDB中,SGA_TARGET必须要小于或等于CDB$ROOT中的SGA_TARGET

  • SGA_MIN_SIZE参数控制PDB最小SGA大小,SGA_MIN_SIZE参数的设置指导如下:

    • SGA_MIN_SIZE值必须要小于CDB$ROOT中SGA_TARGET的值50%

    • SGA_MIN_SIZE值必须要小于PDB中SGA_TARGET值的50%

    • 所有PDB的SGA_MIN_SIZE值总和必须要小于CDB$ROOT中SGA_TARGET的值50%

注意:只有当CDB$ROOT中SGA_TARGET为非0值时,PDB中的SGA_TARGET和SGA_MIN_SIZE才生效。

命令如下:

ALTER SESSION SET CONTAINER=PDB1;
ALTER SYSTEM SET SGA_TARGET = 1500M SCOPE = BOTH;
ALTER SYSTEM SET SGA_MIN_SIZE = 500M SCOPE = BOTH;

对于更细致的控制,也可以设置PDB的DB_CACHE_SIZE和SHARED_POOL_SIZE。

管理PDB的PGA

在PDB级别上设置PGA_AGGREGATE_TARGET和PGA_AGGREGATE_LIMIT可以控制某个PDB的PGA使用情况。

PGA_AGGREGATE_TARGET是目标值,PGA_AGGREGATE_LIMIT是限制值。如果PGA使用量达到PGA_AGGREGATE_LIMIT这个限制值,会话就会报错。

参数配置标准

PGA_AGGREGATE_TARGET设置指导如下:

  • 必须小于或等于CDB$ROOT的PGA_AGGREGATE_TARGET
  • 必须小于或等于CDB$ROOT的PGA_AGGREGATE_LIMIT的50%
  • 必须小于或等于PDB的PGA_AGGREGATE_LIMIT的50%

PGA_AGGREGATE_LIMIT设置PDB的最大PGA使用量,设置指导如下:

  • 必须小于或等于CDB$ROOT的PGA_AGGREGATE_LIMIT
  • 必须大于或等于PDB的PGA_AGGREGATE_TARGET × 2

设置PDB的内存参数

show parameter NONCDB_COMPATIBLE
show parameter MEMORY_TARGET
alter system set MEMORY_TARGET=0 SCOPE = BOTH;
show parameter MEMORY_TARGET

-- 连接对应PDB并配置
alter session set container=PDB1;

ALTER SYSTEM SET SGA_TARGET = 500M SCOPE = BOTH;
ALTER SYSTEM SET SGA_MIN_SIZE = 100M SCOPE = BOTH;

ALTER SYSTEM SET PGA_AGGREGATE_LIMIT  = 500M SCOPE = BOTH;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 300M SCOPE = BOTH;

控制PDB内存管理的初始化参数

当您使用PDB作为当前容器设置以下初始化参数时,这些参数将控制当前PDB的内存使用情况。当为PDB设置了一个或多个这些参数时,请确保CDB和其他PDB具有足够的内存用于其操作。

Initialization Parameter Description
DB_CACHE_SIZE Sets the minimum, guaranteed buffer cache space for the PDB.The following requirements must be met:It must be less than or equal to 50% of the setting for the DB_CACHE_SIZE in the CDB root.The sum of the DB_CACHE_SIZE settings for all PDBs must be less than or equal to 50% of the setting for the DB_CACHE_SIZE in the CDB root.These requirements do not apply if the SGA_TARGET initialization parameter is set to a non-zero value in the CDB root.When the SGA_TARGET initialization parameter is set to a non-zero, the following requirements must be met:The values of DB_CACHE_SIZE plus SHARED_POOL_SIZE in a PDB must be less than or equal to 50% of the PDB’s SGA_TARGET value.The values of DB_CACHE_SIZE plus SHARED_POOL_SIZE in a PDB must be less than or equal to 50% of the SGA_TARGET value at the CDB level.The sum of DB_CACHE_SIZE plus SHARED_POOL_SIZE across all the PDBs in a CDB must be less than or equal to 50% of the SGA_TARGET value at the CDB level.
SHARED_POOL_SIZE Sets the minimum, guaranteed shared pool space for the PDB.The following requirements must be met:It must be less than or equal to 50% of the setting for the SHARED_POOL_SIZE in the CDB root.The sum of the SHARED_POOL_SIZE settings for all PDBs must be less than or equal to 50% of the setting for the SHARED_POOL_SIZE in the CDB root.These requirements do not apply if the SGA_TARGET initialization parameter is set to a non-zero value in the CDB root.When the SGA_TARGET initialization parameter is set to a non-zero, the following requirements must be met:The values of DB_CACHE_SIZE plus SHARED_POOL_SIZE in a PDB must be less than or equal to 50% of the PDB’s SGA_TARGET value.The values of DB_CACHE_SIZE plus SHARED_POOL_SIZE in a PDB must be less than or equal to 50% of the SGA_TARGET value at the CDB level.The sum of DB_CACHE_SIZE plus SHARED_POOL_SIZE across all the PDBs in a CDB must be less than or equal to 50% of the SGA_TARGET value at the CDB level.
PGA_AGGREGATE_LIMIT Sets the maximum PGA size for the PDB.The following requirements must be met:It must be less than or equal to the setting for the PGA_AGGREGATE_LIMIT in the CDB root.It must be greater than or equal to two times the setting for the PGA_AGGREGATE_TARGET in the PDB.
PGA_AGGREGATE_TARGET Sets the target aggregate PGA size for the PDB.The following requirements must be met:It must be less than or equal to the PGA_AGGREGATE_TARGET value set at the CDB level.It must be less than or equal to 50% of the PGA_AGGREGATE_LIMIT initialization parameter value set at the CDB level.It must be less than or equal to 50% of the PGA_AGGREGATE_LIMIT value set in the PDB.
SGA_MIN_SIZE Sets the minimum SGA size for the PDB.The following requirements must be met:It must be less than or equal to 50% of the setting for the SGA_TARGET in the CDB root.It must be less than or equal to 50% of the setting for the SGA_TARGET in the PDB.The sum of the SGA_MIN_SIZE settings for all PDBs must be less than or equal to 50% of the setting for the SGA_TARGET in the CDB root.These requirements do not apply if the SGA_TARGET initialization parameter is not set or is set to 0 (zero) in the CDB root.The best practice is to limit the sum of the SGA_MIN_SIZE values for all PDBs to 50% or less of the SGA size of the CDB.
SGA_TARGET Sets the maximum SGA size for the PDB.The SGA_TARGET setting in the PDB is enforced only if the SGA_TARGET initialization parameter is set to a non-zero value in the CDB root. The SGA_TARGET setting in the PDB must be less than or equal to the SGA_TARGET setting in the CDB root.

监控PDB的内存使用

以下视图用于监控PDB的资源使用

  • V$RSRCPDBMETRIC : 一个PDB对应一条记录,只保留最近一分钟的数据
  • V$RSRCPDBMETRIC_HISTORY : 一个PDB对应61行记录,保留最近60分钟的数据
  • DBA_HIST_RSRC_PDB_METRIC : AWR快照,保留时间基于AWR的保留时间

监视内存SQL语句

监视最近一分钟指标数据
SET LINESIZE 150
COLUMN pdb_name FORMAT A10
COLUMN begin_time FORMAT A26
COLUMN end_time FORMAT A26
ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS'; 
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD-MON-YYYY HH24:MI:SS.FF'; 

-- Last sample per PDB.
SELECT r.con_id,
       p.pdb_name,
       r.begin_time,
       r.end_time,
       r.sga_bytes,
       r.pga_bytes,
       r.buffer_cache_bytes,
       r.shared_pool_bytes
FROM   v$rsrcpdbmetric r,
       cdb_pdbs p
WHERE  r.con_id = p.con_id
ORDER BY p.pdb_name;

SGA_BYTES : PDB当前SGA大小

BUFFER_CACHE_BYTES : PDB当前buffer cache大小

SHARED_POOL_BYTES : PDB当前shared pool大小

PGA_BYTES : PDB当前PGA大小

监视最近一小时指标数据
-- Last hours samples for PDB1
SELECT r.con_id,
       p.pdb_name,
       r.begin_time,
       r.end_time,
       r.sga_bytes,
       r.pga_bytes,
       r.buffer_cache_bytes,
       r.shared_pool_bytes
FROM   v$rsrcpdbmetric_history r,
       cdb_pdbs p
WHERE  r.con_id = p.con_id
AND    p.pdb_name = 'PDB1'
ORDER BY r.begin_time;
基于快照时间资源指标数据
-- All AWR snapshot information for PDB1.
SELECT r.snap_id,
       r.con_id,
       p.pdb_name,
       r.begin_time,
       r.end_time,
       r.sga_bytes,
       r.pga_bytes,
       r.buffer_cache_bytes,
       r.shared_pool_bytes
FROM   dba_hist_rsrc_pdb_metric r,
       cdb_pdbs p
WHERE  r.con_id = p.con_id
AND    p.pdb_name = 'PDB1'
ORDER BY r.begin_time;

CPU资源管理

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

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

Oracle资源管理器(Oracle Database Resource Manager,以下简称DBRM)管理数据库资源,为不同的会话分配不同的数据库资源。DBRM管理的资源主要包括CPU时间。

给PDB分配资源配额

要在PDB之间分配资源,请为每个PDB或每个PDB性能配置文件分配一个共享值。较高的份额值可为PDB或使用PDB性能配置文件的PDB提供更多的保证资源。

使用DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE为PDB指定共享值,shares参数指定PDB的份额值。

使用DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE为PDB性能配置文件指定共享值,shares参数指定PDB性能配置文件的份额值。

多个PDB可以使用相同的PDB性能配置文件profile。

指令中的share参数意义

下图显示了一个在CDB资源计划中为他们指定了共享值的三个PDB的示例

img

显示shares总数为7(3加3加1)。salespdb和servicespdbPDB是资源的每个保证资源的3/7,而hrpdbPDB是保证资源的1/7。但是,如果没有资源争用,任何PDB都可以使用比保证的资源更多的资源。

Resource Resource Allocation
CPU The salespdb and servicespdb PDBs can consume the same amount of CPU resources. The salespdb and servicespdb PDBs are each guaranteed three times more CPU resource than the hrpdb PDB.See "CPU" for more information about this resource.
Parallel execution servers Queued parallel queries from the salespdb and servicespdb PDBs are selected equally. Queued parallel queries from the salespdb and servicespdb PDBs are selected three times as often as queued parallel queries from the hrpdb PDB.See "Degree of Parallelism Limit" for more information about this resource.

PDB的资源限制,我们既可以设置CDB resource plan同样也可以设置pdb的初始化参数控制,两者皆可。当PDB数据很多时,更建议使用CDB resource plan结合pdb performance profile使用。

img

参数指令

PDB指令

当一个PDB从CDB拔出时,PDB的指令被保留。如果同一个PDB被插回到CDB中

指令 属性值
shares 1
utilization_limit 100
parallel_server_limit 100
CDB 资源计划中的默认指令

img

上图说明默认的pdb指令share值为1,utilization_limit为50%,parallel_server_limit 是50%,当pdb没有指定指令时,例如marketingpdb和testingpdb就会使用默认的performance profile,因此marketingpdb和testingpdb每个都拿到1份额和cpu使用的50%。

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

CDB Resource Plans

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

创建CDB资源计划:newcdb_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资源计划

在CDB$ROOT中创建计划的名字是newcdb_plan的资源计划

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(
    plan    => 'newcdb_plan',
    comment => 'CDB resource plan for newcdb');
END;
/
创建PDB Performance profile

在CDB$ROOT中创建profile

创建PDB profile (gold)
-- 创建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)
-- 创建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)
--创建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 directive

如果PDB的当前默认CDB资源计划指令不符合您的要求,则使用该UPDATE_CDB_DEFAULT_DIRECTIVE过程更新

-- 如果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;
/
更新指定profile的资源计划
BEGIN
  DBMS_RESOURCE_MANAGER.UPDATE_CDB_PROFILE_DIRECTIVE(
    plan                      => 'newcdb_plan', 
    profile                   => 'bronze'
    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;
/
校验pending area
exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
提交pending area
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
启用CDB资源管理
-- 在CDB$ROOT中配置
alter session set container=CDB$ROOT;
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'newcdb_plan' scope=both;
检查确认启用资源管理计划
alter session set container=cdb$root; 
set lines 168 pages 99
col plan for a32
col comments for a32
col status for a8
col mandatory for a10
select plan_id, plan, comments, status, mandatory from dba_cdb_rsrc_plans;

资源计划配置信息
col PLUGGABLE_DATABASE for a32
col profile for a24
select plan,pluggable_database,shares,utilization_limit, PARALLEL_SERVER_LIMIT,profile from dba_cdb_rsrc_plan_directives;

set lines 168 pages 99
col plan for a28
col comments for a32
col status for a8
col mandatory for a10
col PLUGGABLE_DATABASE for a28
col profile for a12
select rp.plan_id, rp.plan, rp.status, rp.mandatory, pd.pluggable_database, pd.shares, pd.utilization_limit, pd.parallel_server_limit, pd.profile, rp.comments from dba_cdb_rsrc_plans rp, dba_cdb_rsrc_plan_directives pd
where rp.plan = pd.plan;

在PDB中设置db_performance_profile
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;
重启PDB
-- 所有PDB
ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE INSTANCES=all;
ALTER PLUGGABLE DATABASE OPEN INSTANCES=all;

也可以在PDB中一个个单独设置并重启

alter session set container=PDB1;
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

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
 
alter session set container=cdb$root; 
set lines 168 pages 99
col name for a24
col value for a24
select p.inst_id, p.name, c.name, p.value, p.ispdb_modifiable, c.con_id 
from gv$system_parameter2 p, gv$containers c 
where p.con_id = c.con_id and p.inst_id = c.inst_id and p.name = 'db_performance_profile'
order by p.con_id ;
检查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;

只需要在相应的pdb中设置db_performance_profile初始化参数即可让当前的PDB使用哪个profile了。

默认performance profile

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

img

更改默认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;
/

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

监视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;

监视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;

监视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;

参考文档

1) https://docs.oracle.com/en/database/oracle/oracle-database/12.2/admin/using-oracle-resource-manager-for-pdbs-with-sql-plus.html#GUID-2708E76D-E18B-4586-920A-BD4B904AE14D

2)Managing OS Resources Among PDBs Using PDB Perfromance Profiles - 12.2 New Feature (文档 ID 2171135.1)

原文地址:https://www.cnblogs.com/binliubiao/p/13328593.html