第一部分 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)
该部分参数可以动态设置。
