Oracle PDB 资源管理和隔离实操

来源:这里教程网 时间:2026-03-03 18:30:53 作者:

第一部分 PDB 资源管理和隔离

1.1 PDB CPU资源管理

参数设置 资源管理器,要强制执行CPU 资源分配,必须将CDB 级别的“RESOURCE_MANAGER_PLAN ”设置“ DEFAULT_CDB_PLAN ”。

1 PDB CPU 使用受限于PDB CPU_COUNT 计数,从12.2 开始。

2 )基于PDB CPU_COUNT 计数,系统自动设置PDB CPU 调度份额,从18.1 开始。

l   autotask

shares: -1

utilization_limit: 90

parallel_server_limit: 100

shares -1 意味着自动维护任务使用系统 20% 资源的分配

v$rsrcmgrmetric_history 记录了资源的分配和使用情况

 

l   default_pdb_directive

new_shares: 1

utilization_limit: 100

parallel_server_limit: 100

备注: Shares=1

default_pdb_directive 默认分配所有的资源给创建的 PDB ,当前使用 cpu_count 限制资源的分配, Shares 默认 1

 

 

 

 

下面演示如何在 19c 平台下配置 CPU 等资源隔离策略的使用:

 

配置资源使用策略演示 ( 注意: shares 等这些参数请根据实际硬件配置和 PDB 规划来设置 )

-- CDB 级别创建:

 

exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

 

BEGIN

DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(

plan => 'hlcmcc_plan',

comment => 'CDB resource plan for hlcmccdb');

END;

/

 

-- 黄金级配置

BEGIN

DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(

plan => 'hlcmcc_plan',

profile => 'gold',

shares => 2,

utilization_limit => 100,

parallel_server_limit => 100);

END;

/

 

-- 白银级配置

BEGIN

DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(

plan => 'hlcmcc_plan',

profile => 'silver',

shares => 1,

utilization_limit => 40,

parallel_server_limit => 40);

END;

/

 

-- 青铜级配置

BEGIN

DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(

plan => 'hlcmcc_plan',

profile => 'bronze',

shares => 1,

utilization_limit => 20,

parallel_server_limit => 20);

END;

/

 

-- 配置提交

exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();

exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

 

CDB 级别配置生效:

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'hlcmcc_plan' scope=both;

 

PDB 里使用不同的级别配置:

-- 此处可以先做好准备,后续如果需要多个PDB 资源分配,随时分配采用即可,之后就是重启设置的PDB 生效

alter session set container=ORCLPDB1;

alter system set db_performance_profile='gold' scope=spfile;

alter session set container=FRANKPDB;

alter system set db_performance_profile='silver' scope=spfile;

 

-- CDB 级别重启所有设置的PDB 命令( 请根据实际割接窗口选择)

conn/as sysdba

alter pluggable database all close immediate;

alter pluggable database all open;

 

 

 

 

额外步骤 ,如果 profile 配置不合适,需要更新,可以在 CDB 级别进行动态更新操作 :

exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

 

BEGIN

DBMS_RESOURCE_MANAGER.UPDATE_CDB_PROFILE_DIRECTIVE(

plan=> 'hlcmcc_plan',

profile=> 'gold',

new_shares=> 2,

new_utilization_limit=> 10,

new_parallel_server_limit=> 20);

END;

/

 

exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();

exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

 

可以使用下面的脚本监控每个 pdb 中的 profile 配置情况:

 

-- 之后在CDB 级别检查所有PDB db_performance_profile 配置

set linesize 200

col name for a40

col value for a30

set colsep |

SELECT CON_ID,NAME,VALUE 

FROM v$system_parameter

WHERE NAME='db_performance_profile'

order by CON_ID;

 

-- CDB 级别所有profile 配置概览

COLUMN plan FORMAT A30

COLUMN pluggable_database FORMAT A25

column profile format a20

SET LINESIZE 200

SELECT plan,

       pluggable_database, profile,

       shares,

       utilization_limit AS util,

       parallel_server_limit AS parallel

FROM   dba_cdb_rsrc_plan_directives

WHERE  plan = 'HLCMCC_PLAN'

ORDER BY pluggable_database;

 

 

可以使用下面的脚本监控每个 pdb 中的 CPU 资源使用情况:

 

--CPU_CONSUMED_TIME, CPU_WAIT_TIME CPU 的使用和等待事件

--CPU_UTILIZATION_LIMIT, AVG_CPU_UTILIZATION CPU 使用率  

set linesize 200  

COLUMN PDB_NAME FORMAT A10

SELECT r.CON_ID, p.PDB_NAME, r.num_cpus, r.CPU_CONSUMED_TIME, r.CPU_WAIT_TIME,

r.CPU_UTILIZATION_LIMIT, r.AVG_CPU_UTILIZATION

   FROM V$RSRCPDBMETRIC r, CDB_PDBS p

   WHERE r.CON_ID = p.CON_ID;  

1.2 PDB 内存资源管理

功能简述

多个pdb 使用, 必然引起资源争用,Oracle 12.2 可以有效的控制和协调各个资源的使用。

 

PDB 内存管理需要设置的参数:

目的

参数

数值

范围

备注

动态调整

PDB

资源限制

sga_target ( 建议ASMM)

需要容量评估

PDB

PDB SGA 最大内存

支持

pga_aggregate_target

需要容量评估

PDB

PDB PGA 内存

支持

pga_aggregate_limit

需要容量评估

PDB

PDB PGA 最大内存

支持

db_cache_size

需要容量评估

PDB

PDB 缓存最小值

支持

shared_pool_size

需要容量评估

PDB

PDB 共享池最小值

支持

Session

需要容量评估

PDB

PDB 连接限制

支持

 

参数注解 :

²   PDB: SGA_TARGET  PDB 内存最大使用参数

该参数小于CDB 该参数设置

 

²   PDB:DB_CACHE_SIZE PBD 数据缓存,设置该参数,内存不会被 偷走

如果使用 ASMM 内存管理模式,数据缓存的最小配置 20%SGA-30%SGA

 

²   PDB:SHARED_POOL_SIZE  PDB 共享池缓存,设置该参数,内存不会被 偷走

如果使用ASMM 内存管理模式,共享池最小配置 30%SGA-20%SGA

共享池优先原则: <50%* SGA_TARGET ,保证共享池内存足够

 

²   PDB:PGA_AGGREGATE_LIMIT [2G , sessions*3M]

PDB 该参数设置 , CDB 该参数设置

PDB 该参数设置不小于 PGA_AGGREGATE_TARGET 的两倍设置

 

²   PDB:PGA_AGGREGATE_TARGET [< PGA_AGGREGATE_LIMIT/2]

PDB 级别该参数设置,小于 CDB 级别该参数设置                  

PDB 级别该参数设置,小于 PDB PGA_AGGREGATE_LIMIT*50%                                    

 

可以使用下面的脚本监控每个pdb 中的内存使用情况:

set linesize 200

COLUMN PDB_NAME FORMAT A10

SELECT r.CON_ID, p.PDB_NAME, r.SGA_BYTES/1024/1024 sga_bytes,

   r.PGA_BYTES/1024/1024 pga_bytes,

   r.BUFFER_CACHE_BYTES/1024/1024 buffer_cache_bytes,

   r.SHARED_POOL_BYTES/1024/1024 shared_pool_bytes

   FROM V$RSRCPDBMETRIC r, CDB_PDBS p

   WHERE r.CON_ID = p.CON_ID;

 

文档参考:

How to Control and Monitor the Memory Usage (Both SGA and PGA) Among the PDBs in Mutitenant Database- 12.2 New Feature (Doc ID 2170772.1)

How To Deal With "SGA: allocation forcing component growth" Wait Events (Doc ID 1270867.1)

 

1.3 PDB IO 资源管理

PDB 级别IO 使用控制:

²   PDB:MAX_IOPS PDB 每秒最大IO 请求,单位次,可动态修改

²   PDB:MAX_MBPS PDB 每秒最大IO 请求,单位M ,可动态修改

SQL> alter system set MAX_IOPS=1000;   -- 压力测试中最大值

SQL> alter system set MAX_MBPS=500;   -- 压力测试中最大值

 

   注意:这两个参数只作用于PDB ,不对CDB 和非多租户环境生效。另外,这两个参数不限制redo log 的写入(LGWR 进程)和buffer cache 脏块写入磁盘(DBWR 进程)。

 

可以使用下面的脚本指导上述参数在每个pdb 中的设置值:

set linesize 200

 col PDB_NAME for a10

 col BEGIN_TIME for a30

 col END_TIME for a30

SELECT R.SNAP_ID,

   R.CON_ID,

   P.PDB_NAME,

   TO_CHAR(R.BEGIN_TIME, 'YYYY-MM-DHH24:MI') AS BEGIN_TIME,

   TO_CHAR(END_TIME, 'YYYY-MM-D HH24:MI')AS 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 ORDER BY R.BEGIN_TIME;    

 

文档参考

I/O Rate Limits for PDBs 12.2 New feature . (Doc ID 2164827.1)

该部分参数可以动态设置。

相关推荐