ITPub博客

首页 > 数据库 > Oracle > Oracle 12c系列(四)|资源隔离之IO、内存、CPU

Oracle 12c系列(四)|资源隔离之IO、内存、CPU

原创 Oracle 作者:哎呀我的天呐 时间:2018-04-28 20:30:29 0 删除 编辑

沃趣科技数据库技术专家  姚崇



一、IO 资源隔离

12cR2中,引入了两个参数MAX_IOPS和MAX_MBPS来限制PDB的物理IO。这两个参数只作用于PDB,不对CDB和非多租户环境生效。另外,这两个参数不限制redo log的写入(LGWR进程)和buffercache脏块写入磁盘(DBWR进程)。

默认情况下,这两个参数都为0。如果在PDB中这两个参数为0,CDB$ROOT中也为0,那对于PDB来讲,没有IO限制。

可以使用DBA_HIST_RSRC_PDB_METRIC来计算一个PDB合理的IO限制。当计算IO限制值时,可以参考以下列:IOPS、IOMBPS、IOPS_THROTTLE_EXEMPT和IOMBPS_THROTTLE_EXEMPT。

set linesize 400 col PDB_NAME for a10 col BEGIN_TIME for a30 col END_TIME for a30
SELECTR.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;                          		

下面在同一数据库中,设置不同的max_iops和max_mbps查询相同的语句所需要的时间,可以看出max_iops和max_mbps对IO的限制是起作用的。

当数据库中出现resmgr: I/O rate limit等待事件时,可以通过如下视图查询当前IO过载影响到的sql,p1值标示当前pdb_id,出现此等待事件就需要合理的调整max_iops 和max_mbps值,避免影响到关键性业务。

SELECT H.EVENT,
  H.P1 AS PDB_ID,
  C.PDB_NAME,
  H.SQL_ID,
  TO_CHAR(H.SAMPLE_TIME, 'YYYY-MM-D HH24:MI') AS SAMPLE_TIME,
  H.INSTANCE_NUMBER
FROMDBA_HIST_ACTIVE_SESS_HISTORY H
JOINCDB_PDBS C
ONC.PDB_ID = H.P1
ANDH.EVENT = 'resmgr: I/O rate limit' ORDER BY 4;  		

二、内存资源隔离

在12cR2的多租户环境中,PDB的SGA使用情况可能会很不均衡,有些PDB占用了大量的SGA内存,导致某些PDB得不到足够的SGA,进而影响性能。在12cR2的多租户环境中,可以控制和监控每个PDB的主机的内存情况。

满足条件


  • CDB$ROOT中初始化参数NONCDB_COMPATIBLE保持为默认的FALSE。

  • CDB$ROOT中初始化参数MEMORY_TARGET没有设置或设置为0,关闭内存自动管理,这是我们期待的。

管理PDB的SGA
    命令如下:


ALTER SESSION SET CONTAINER=PDB1; ALTER SYSTEM SET SGA_TARGET = 1500M SCOPE = BOTH; ALTER SYSTEM SET SGA_MIN_SIZE = 500M SCOPE = BOTH;  												

在PDB级别上设置PGA_AGGREGATE_TARGET和PGA_AGGREGATE_LIMIT可以控制某个PDB的PGA使用情况。

以下两个视图用于监控PDB的内存使用情况



下面说明内存组件在数据库中设置时需要满足的条件。

PDB数量很多的情况下,使用这种CDB级别的资源计划对每个PDB进行资源限制会很麻烦。在12cR2版本中,引入了PDB Performance profile特性,来使一组PDB使用相同的resource plan,而不是一个个PDB进行配置。一些资源需求相同的PDB,可以创建一个performance profile,这些PDB只要设置一下DB_PERFORMANCE_PROFILE初始化参数,就可以使用相同的性能配置。


创建CDB资源计划:woqucdb_plan。里面包括PDB performance profile,gold、silver、bronze。

1)创建pending area

This proceduremakes changes to resource manager objects.

计划的名字是woqucdb_plan

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

3)创建PDB Performance profile

创建PDBProfile, silver

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

使用UPDATE_CDB_AUTOTASK_DIRECTIVE

6)校验pending area

execDBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();  																			

7)提交pending area

execDBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();  																			

8)启用CDB资源管理

重启PDB

conn/as sysdba alterpluggable database all close immediate; alterpluggable database all open;  																			

DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN_DIRECTIVE中shares来明确给PDB的共享值。多个PDB可以共用这一个profile。

the total number of shares is seven (3 plus 3 plus 1). 

PDB的资源限制,我们既可以设置CDB resource plan同样也可以设置pdb的初始化参数控制,两者皆可。当PDB数据很多时,更建议使用CDB resource plan结合pdb performance profile使用。

我们可以通过show parameter 命令查看当前pdb的performance profile,如果是空值的话,即为默认的performanceprofile。默认的performance profile中,shares值默认为1,utilization_limit和parallel_server_limit都为100,也就是说不对当前的pdb做任何的有关cpu资源的限制。


更改默认performance profile

当一个PDB从CDB中拔出时,相应的指令默认保留,当这个PDB迁移回来,它就会继续使用这个指令。除非手工删除。

上图说明默认的pdb指令share值为1,utilization_limit为50%,parallel_server_limit 是50%,当pdb没有指定指令时,例如marketingpdb和testingpdb就会使用默认的performance profile,因此marketingpdb和testingpdb每个都拿到1和cpu使用的50%。


四、 PDBLockdown Profiles

以下通过一个简单的测试来看看这个特性的基本功能。 首先在CDB root下创建一个profile,这个profile将对全局可用,并且需要:


创建PDB Lockdown Profile
SQL> connect / as sysdba Connected.  SQL> CREATE LOCKDOWN PROFILE woqutech; Lockdown Profile created.  SQL> ALTER LOCKDOWN PROFILE woqutechDISABLE STATEMENT  = ('ALTER SYSTEM'); Lockdown Profile altered.  																																	

测试一下,可以看到所有的ALTER SYSTEM的操作都被禁用了:

现在测试一下,可以看到在PDB上,限制精确的生效,CHECKPOINT操作不允许被执行:

SQL>alter session set container = wxh; 																																					

禁止当前PDB所有的alter system语句

ALTER LOCKDOWN PROFILE woqutech DISABLESTATEMENT  = ('ALTER SYSTEM');  																																					

禁止PDB中XDB protocols(FTP, HTTP, HTTPS)的使用

ALTER LOCKDOWN PROFILE woqutech DISABLEFEATURE = ('XDB_PROTOCOLS')  																																					

删除PDB Lockdown Profile

DROP LOCKDOWN_PROFILE woqutech; 																																						



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29990276/viewspace-2153530/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
从事Oracle/MySQL工作多年,Oracle OCM、MySQL OCP,擅长Oracle/MySQL SQL Tuning & DB Performance

注册时间:2014-10-30

  • 博文量
    293
  • 访问量
    2002326