Oracle12.2新特性,在多租户数据库里,Resource Manager 可以在两个级别上管理资源。
- CDB 级别的 Resource Plan
Resource Manager 可以管理争用系统和CDB资源的多个PDB的工作负载。您可以指定如何为PDB分配资源,还可以限制特定PDB的资源利用率。 - PDB 级别的 Resource Plan
Resource Manager 可以管理每个PDB中的工作负载,类似于非CDB。
即,资源分两步分配。 资源管理器首先将系统资源的一部分分配给容器数据库中的每个PDB。 然后,在特定PDB中,它将获得的系统资源的一部分(从前一步骤)分配给连接到PDB的每个会话。
从12.1开始,CDB级 resource plans 可用。 使用CDB级 resource plans,我们可以限制特定PDB的资源使用,例如:
(1)限制特定PDB的CPU使用率。
(2)限制特定PDB可以使用的并行执行 Server 的个数。
(3)限制特定PDB的内存使用。
(4)限制连接到单个PDB的不同会话的资源使用情况。
(5)限制特定PDB生成的 I/O。
对于具有数千个可插拔数据库(PDB)的多租户容器数据库(CDB),为CDB级 resource plan 配置内存和其他Resource Manager 指标会变得非常麻烦。
12.2中引入的 Performance Profiles 和 Mandatory PDB Profiles 可以为一组PDB而不是单个PDB配置CDB resource plan 指标。
您可以把使用类似的资源要求的PDB分为一组,并为它们创建 performance profile。 CDB resource plan指标是针对这些 performance profile(或这一组PDB)创建的。 可以使用 DB_PERFORMANCE_PROFILE 初始化参数指定每个PDB的 performance profile。
可以使用CREATE_CDB_PROFILE_DIRECTIVE过程为PDB performance profiles 设置shares,utilization_limit和parallel_server_limit等属性。
Oracle Exadata还有其他选项,如memory_limit和memory_min,用于控制PDB performance profiles 中的 Database Smart Flash Cache。
使用PDB Performance Profile 创建CDB Resource Plan 的步骤:
在这里,我假设为一个名为newcdb的CDB创建CDB resource plan 的场景。 该计划包括一个名为 gold,silver,bronze的每个PDB performance profiles 的指标。 然后将这些PDB performance profiles 分配给CDB中的PDB或将来插入的PDB。
-
使用CREATE_PENDING_AREA过程创建 pending area
cdb执行
exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA(); -
使用CREATE_CDB_PLAN过程创建CDB resource plan
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(
plan => ‘newcdb_plan’,
comment => ‘CDB resource plan for newcdb’);
END;
/ -
使用CREATE_CDB_PROFILE_DIRECTIVE过程为PDB performance profiles 创建指标
<PDB profile 的 plan指标,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 的 plan指标,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 的 plan指标, bronze>
BEGIN
DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
plan => ‘newcdb_plan’,
profile => ‘bronze’,
shares => 1,
utilization_limit => 20,
parallel_server_limit => 20);
END;
/ -
(可选)使用UPDATE_CDB_DEFAULT_DIRECTIVE过程更新默认PDB 的指标
如果需要的话,可以使用UPDATE_CDB_DEFAULT_DIRECTIVE过程更新CDB resource plan 指标
BEGIN
DBMS_RESOURCE_MANAGER.UPDATE_CDB_PROFILE_DIRECTIVE(
plan => ‘newcdb_plan’,
profile => ‘bronze’,
new_shares => 1,
new_utilization_limit => 10,
new_parallel_server_limit => 20);
END;
/ -
(可选)使用UPDATE_CDB_AUTOTASK_DIRECTIVE过程更新缺省 autotask 指标
-
使用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 Resource Plan
cdb执行
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = ‘newcdb_plan’ scope=both; -
在PDB中指定 Performance Profiles
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
conn /as sysdba
alter pluggable database all close immediate;
alter pluggable database all open;也可以逐个设置plan 指标,也可以单独重新启动PDB。
alter session set container=PDB4;
alter system set db_performance_profile=gold scope=spfile;
alter pluggable database close immediate;
alter pluggable database open;
您甚至可以为同一CDB中的单个PDB和PDB performance profiles指定指标。
可以使用CREATE_CDB_PLAN_DIRECTIVE创建PDB的指标。
相同的PDB或相同的PDB performance profile不能引用当前的活动的 Plan 的两个指标。
应在所有RAC实例上为db_performance_profile参数设置相同的值。
要查看 PDB Performance Profiles:
alter session set container=CDB$ROOT;
select inst_id, name, con_id, value, ispdb_modifiable from gv$system_parameter2 where name = 'db_performance_profile' order by 1,2,3,4;
要查看不同PDB的指标的细节:
alter session set container=CDB$ROOT;
select p.name, shares, utilization_limit, profile from v$rsrc_plan r, v$pdbs p where r.con_id = p.con_id;