IT基础架构(存储 数据库 服务器 虚拟化)专家服务
Oracle 12c版本引入了多租户的概念,可以把不同的业务整合到同一套数据库中的不同租户中,但与此同时也带来了各个租户之间对于硬件资源的争用,当一个租户出现异常时可能会影响其他租户的正常运行。为实现租户间的资源均衡,限制和隔离,通过ORACLE的resource manager功能进行控制。
在Oracle 12c版本之前,resource manager用来管理数据库对于操作系统资源的控制,如果一台主机上有多个数据库,那么需要分别在对应的数据库上单独设置resource manager,无法实现资源的统一分配。在Oracle 12c增强了resource manager的功能,能够对CDB和PDB进行资源控制,在一个有多个PDB的数据库中,可以对每个PDB指定不同的资源控制方案来分配操作系统和CDB资源,实现一个数据库中多个PDB的资源的统一管理。
以下测试是基于CDB下的PDB资源管控的实施测试场景,鉴于生产环境使用版本及12C与18C关于resource manager无功能差异,此测试使用12.2版本进行。
测试场景(一):最低资源测试
测试条件
资源计划名称DAYTIME,CDB下存在3个PDB,具体资源限制如下:
测试步骤
1.创建资源计划
资源计划:DAYTIME
1).创建临时区
exec dbms_resource_manager.create_pending_area();
2).创建新的资源计划
begin
dbms_resource_manager.create_cdb_plan(
plan=> 'DAYTIME',
comment => 'DAYTIME');
end;
/
3).创建资源指令
4).验证临时区
exec dbms_resource_manager.validate_pending_area();
5).提交修改
exec dbms_resource_manager.submit_pending_area();
2.启用资源计划
[CDB级别]
alter system set resource_manager_plan ='DAYTIME';
3.验证资源控制
运行压测脚本
[分别在PDBPROD1,PDBPROD2,PDBPROD3中执行]
USER1@PDBPROD1:SQL> @run11.sql
/* 脚本为对超大表进行内容HASH运算,消耗大量的CPU及IO资源 */
查看资源控制及使用情况
抽样CPU使用情况:
测试小结
1.通过共享片(shares)方式分配资源,分配资源为最低保证资源。
2.当系统资源满足最低PDB保证资源后,剩余资源被多个PDB共享。
3.若CPU上限不进行限制,CPU资源被所有PDB共享。
4.这种资源控制方式无法实现资源的有效隔离,仍然会导致一损皆损的结果。
测试场景(二):限制资源测试[CPU]
测试条件
测试步骤
1.修改资源计划
2.验证资源控制
运行压测脚本
查看资源控制及使用情况
抽样CPU使用情况:
/* PDB的CPU使用占比与CPU使用限制配置相一致,基本保持在4:1:1的关系 */
抽样IO资源使用情况:
/* PDB的IO使用占比基本保持在4:1:1的关系 */
期间各PDB的CPU使用情况
期间各PDB的IOPS使用情况
测试小结:
1. 若cpu资源上限作出限制,可以看到cpu总使用率在60%以下,资源分配为4:1:1
2. 随着cpu资源上限作出限制,可以看到IO的总体使用率也会得到相应的控制,呈现出一种正相关的变化趋势
3. 能够有效控制cpu的使用情况,合理分配cpu资源,能够保护各个PDB和操作系统的CPU资源使用
测试场景(三):并行资源测试
测试条件
测试步骤
1.修改资源计划
2.验证并行测试
运行压测脚本
[分别在PDBPROD1,PDBPROD2,PDBPROD3中执行]
PDBPROD1:脚本并行设置70(小于限制80),启动顺序1
PDBPROD2:脚本并行设置30(小于限制40),启动顺序2
PDBPROD3:脚本并行设置19(小于限制20),启动顺序3
查看资源控制及使用情况
/* 三个PDB下的压测脚本均可按照设定并行度正常执行,未出现排队现象 */
调整压测并行度测试
按照上面的方法分别模拟四种情况
1、脚本并行设置100(大于限制80),启动顺序1
脚本并行设置30(小于限制40),启动顺序2
脚本并行设置21(大于限制20),启动顺序3
/*
1. 通过资源监控发现,PDBPROD1并行100大于限制80,任务处于运行状态,
2. PDBPROD2并行30小于40限制,任务正常运行.
3. PDBPROD3并行21大于20限制,但任务被阻塞,处于排队状态.
*/
2、脚本并行设置100(大于限制80),启动顺序2
脚本并行设置30(小于限制40),启动顺序1
脚本并行设置21(大于限制20),启动顺序3
/*
1. 通过资源监控发现,PDBPROD1并行100大于限制80,任务处于排队状态,
2. PDBPROD2并行30小于40限制,任务正常运行.
3. PDBPROD3并行21大于20限制,任务处于排队状态.
*/
3、脚本并行设置100(大于限制80),启动顺序2
脚本并行设置30(小于限制40),启动顺序1
脚本并行设置19(小于限制20),启动顺序3
/*
1. 通过资源监控发现,PDBPROD1并行100大于限制80,任务处于排队状态,
2. PDBPROD2并行30小于40限制,任务正常运行.
3. PDBPROD3并行19小于20限制,任务正常运行.
*/
4、脚本并行设置100(大于限制80),启动顺序3
脚本并行设置30(小于限制40),启动顺序1
脚本并行设置19(小于限制20),启动顺序2
/*
1. 通过资源监控发现,PDBPROD1并行100大于限制80,任务处于排队状态,
2. PDBPROD2并行30小于40限制,任务正常运行.
3. PDBPROD3并行19小于20限制,任务正常运行.
*/
测试小结
1.资源空闲情况下,首个运行并行的PDB,并行不受资源管理器控制,可超过限制运行。
2.多个PDB都存在并行的情况下,并行控制与资源管理器配置相一致。
3.超出PDB资源控制的那一部分会话需要等待有空闲资源后才能继续执行。
(0755)88305803