Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-28

第四期 容器数据库的性能管理

本周赶上端午节放假,差点忘了写这篇文档,赶在周日写出来。

1.PDB的IO管理

IO管理一直是数据库运维管理中比较头痛的问题,特别是多租户PDB环境下,各个PDB之间会对存储IO性能进行争用,在一些情况下会造成部分PDB的性能问题。在一些情况下,一些作为研发测试的PDB也不需要那么大的IO,那么作为DBA我们希望可以限制这些PDB的IO使用。
作为目前功能最完善的数据库产品,Oracle数据库从12.2开始引入了PDB的IO管理功能,在PDB中由max_iops和max_mbps参数进行控制,可以限制PDB的IOPS和IOMBPS,具体参数如下图所示:
在这里插入图片描述
这两个参数是可以动态调节的:

alter system set max_iops=xxx;
alter system set max_mbps=xxx;

在这里插入图片描述
这里还需要注意两点:
1.这两个在Exadata数据库一体机上是不生效的,一体机上是使用其他机制来管理IO
2.这两个参数在使用asmlib和AFD的时候并不能很好的实现功能,只能一定程度的实现IO控制,根据Oracle Support相关bug及文档反馈,该功能于19.6.0.0.200114 DBRU及20.1版本中修复(所以大家尽量升级到19.6吧,-)。

2.PDB的PGA和SGA管理

PDB中也有PGA和SGA的管理,通过pga_aggregate_limit,pga_aggregate_target和sga_target来控制:
在这里插入图片描述
同一般数据库一样,在PDB中pga_aggregate_limit限制PDB使用的最大SGA大小(类似于PGA使用的硬限制),pga_aggregate_target为PDB使用的PGA大小(类似于PGA使用的软限制);PDB使用PGA内存如果超过pga_aggregate_limit设置的限制,就会出现[ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT]的报错,并杀掉超过PGA使用限制的当前会话。
sga_target限制了PDB使用的SGA大小,如果CDB使用ASMM,那么该参数默认为0,PDB可以使用全部SGA。
PDB中PGA和SGA参数默认是读取CDB的参数设置,因此一般来说是需要根据实际情况进行调整,PGA参数是可以动态调整,SGA参数调整需要重启PDB:

alter system set pga_aggregate_limit=xxx;
alter system set pga_aggregate_target=xxx;

alter system set sga_target=xxx scope=spfile;
alter pluggable database close;
alter pluggable database open;

3.Resource Manager

从12.2开始Oracle引入了Resource Manager来对PDB进行资源管理,可以限制PDB的shares(CPU和并行执行服务器资源的资源分配共享值),utilization_limit(PDB使用CPU最大百分比)和parallel_server_limit(PDB可以使用的并行执行服务器的最大百分比)。PDB资源管理分为两种:第一种是指定PDB进行资源管理;第二种是通过性能概要进行的PDB资源管理。

4.指定PDB的资源管理

通过srvctl status service命令可以查看SERVICE状态:
1.创建CDB resource plan:

exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

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

2.创建指定PDB的资源管理

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(
    plan					=> 'newcdb_plan', 
    pluggable_database		=> 'pdb1', 
    shares					=> 3, 
    utilization_limit		=> 100,
    parallel_server_limit	=> 100);
END;
/

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(
    plan					=> 'newcdb_plan', 
    pluggable_database		=> 'pdb2', 
    shares					=> 3, 
    utilization_limit		=> 100,
    parallel_server_limit	=> 100);
END;
/

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE(
    plan					=> 'newcdb_plan', 
    pluggable_database		=> 'pdb3', 
    shares					=> 1, 
    utilization_limit		=> 70,
    parallel_server_limit	=> 70);
END;
/

3.修改默认资源管理

BEGIN
  DBMS_RESOURCE_MANAGER.UPDATE_CDB_DEFAULT_DIRECTIVE(
    plan						=> 'newcdb_plan', 
    new_shares					=> 1, 
    new_utilization_limit		=> 50,
    new_parallel_server_limit	=> 50);
END;
/

4.验证并释放pending area

exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

5.启用、停用资源管理

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'newcdb_plan';
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = ' ';

6.修改指定PDB资源管理

exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
BEGIN
  DBMS_RESOURCE_MANAGER.UPDATE_CDB_PLAN_DIRECTIVE(
    plan						=> 'newcdb_plan', 
    pluggable_database			=> 'pdb1', 
    new_shares					=> 1, 
    new_utilization_limit		=> 10,
    new_parallel_server_limit	=> 20);
END;
/
exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

7.删除指定PDB资源管理

exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
BEGIN
  DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN_DIRECTIVE(
    plan					=> 'newcdb_plan', 
    pluggable_database		=> 'pdb2');
END;
/
exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

8.删除资源管理

exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
exec DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN('newcdb_plan');
exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

5.通过性能概要进行的PDB资源管理

1.创建CDB resource plan:

exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

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

2.创建性能概要(db_performance_profile)

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
    plan					=> 'newcdb_plan', 
    profile					=> 'gold', 
    shares					=> 3, 
    utilization_limit		=> 100,
    parallel_server_limit	=> 100);
END;
/

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
    plan					=> 'newcdb_plan', 
    profile					=> 'silver', 
    shares					=> 2, 
    utilization_limit		=> 40,
    parallel_server_limit	=> 40);
END;
/

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(
    plan					=> 'newcdb_plan', 
    profile					=> 'bronze', 
    shares					=> 1, 
    utilization_limit		=> 20,
    parallel_server_limit	=> 20);
END;
/

3.修改默认资源管理

BEGIN
  DBMS_RESOURCE_MANAGER.UPDATE_CDB_DEFAULT_DIRECTIVE(
    plan						=> 'newcdb_plan', 
    new_shares					=> 1, 
    new_utilization_limit		=> 10,
    new_parallel_server_limit	=> 10);
END;
/

4.验证并释放pending area

exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

5.修改PDB中db_performance_profile参数

alter session set container=pdb1;
alter system set db_performance_profile=gold scope=spfile;
alter pluggable database close;
alter pluggable database open;

alter session set container=pdb2;
alter system set db_performance_profile=sliver scope=spfile;
alter pluggable database close;
alter pluggable database open;

alter session set container=pdb3;
alter system set db_performance_profile=bronze scope=spfile;
alter pluggable database close;
alter pluggable database open;

6.启用、停用资源管理

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'newcdb_plan';
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = ' ';

6.修改性能概要

exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
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;
/
exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

8.删除性能概要

exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
BEGIN
  DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN_DIRECTIVE(
    plan		=> 'newcdb_plan', 
    profile		=> 'brozen');
END;
/
exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

9.删除资源管理

exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
exec DBMS_RESOURCE_MANAGER.DELETE_CDB_PLAN('newcdb_plan');
exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

目前我管理的生产环境使用的是第二种PDB资源管理方式。

下期预告:

在PDB中限制一些命令执行。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖头鱼的鱼缸(尹海文)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值