Oracle 12C R2-新特性-PDB的磁盘I/O(IOPS,MBPS)资源管理
在以前的版本中,没有简单的方法来控制单个PDB使用的磁盘I / O量。 因此,某个PDB可能耗尽大量磁盘I / O,并影响同一实例中的其他PDB的性能。 Oracle 12c R2可以控制PDB使用的磁盘I / O量,是多PDB相处更融洽。
1 I/O参数介绍
下面的一些参数可以在PDB或者CDB级别设置已达到限制PDB I/O的目的。
MAX IOPS:PDB的每秒最大I / O操作数。 默认值为“0”。 不推荐使用小于100 IOPS的值。
MAX_MBPS:PDB的每秒I / O的最大兆字节数。 默认值为“0”。 不推荐使用小于25 MBPS的值。
一些需要注意的地方:
·参数是独立的。 您可以使用none,one或both。
·当参数设置在CDB级别时,它们成为所有PDB使用的默认值。
·当它们设置在PDB级别时,它们覆盖任何默认值。
·如果在CDB和PDB级别的值为“0”,则没有I / O限制。
·实例的正常功能所必需的关键I / O不受限制,但只要涉及极限,就会计入总I / O,因此I / O可能暂时超过限制。
·这些参数仅适用于多租户架构。
·此功能不适用于Exadata。
·限制将导致名为I/O rate limit的等待事件。
2 设置I/O参数
下面是在CDB级别设置MAX_IOPS 和MAX_MBPS参数,值是对所有PDB。
--设置参数值
SQL>ALTER SYSTEM SET max_iops=100 SCOPE=BOTH; SQL>ALTER SYSTEM SET max_mbps=400 SCOPE=BOTH;
--移除参数值
SQL>ALTER SYSTEM SET max_iops=0 SCOPE=BOTH; SQL>ALTER SYSTEM SET max_mbps=0 SCOPE=BOTH;
下面是PDB级别设置这两个参数:
SQL>ALTER SESSION SET CONTAINER = pdb1;
-- 设置指定PDB参数值
SQL>ALTER SYSTEM SET max_iops=100 SCOPE=BOTH; SQL>ALTER SYSTEM SET max_mbps=400 SCOPE=BOTH;
-- 移除指定PDB参数值
SQL>ALTER SYSTEM SET max_iops=0 SCOPE=BOTH; SQL>ALTER SYSTEM SET max_mbps=0 SCOPE=BOTH;
3 监控PDB的I/O使用情况
Oracle现在提供视图去监控PDB的资源使用(CPU, I/O, parallel execution, memory)
如:
·V $ RSRCPDBMETRIC:每个PDB一行,保存1分钟样本的最后一个。
·V $ RSRCPDBMETRIC_HISTORY:每个PDB有61行,从V $ RSRCPDBMETRIC视图保存最后60分钟的样本。
·DBA_HIST_RSRC_PDB_METRIC:AWR快照,基于AWR保留期保留。
下面是具体的SQL:
SQL>SET LINESIZE 180 SQL>COLUMN pdb_name FORMAT A10 SQL>COLUMN begin_time FORMAT A26 SQL>COLUMN end_time FORMAT A26 SQL>ALTER SESSION SET NLS_DATE_FORMAT=‘DD-MON-YYYY HH24:MI:SS‘; SQL>ALTER SESSION SET NLS_TIMESTAMP_FORMAT=‘DD-MON-YYYY HH24:MI:SS.FF‘;
-- 每个PDB最后样本
SQL>SELECT r.con_id, p.pdb_name, r.begin_time, r.end_time, r.iops, r.iombps, r.iops_throttle_exempt, r.iombps_throttle_exempt, r.avg_io_throttle FROM v$rsrcpdbmetric r, cdb_pdbs p WHERE r.con_id = p.con_id ORDER BY p.pdb_name;
-- PDB1的最后几个小时的样本
SQL>SELECT r.con_id, p.pdb_name, r.begin_time, r.end_time, r.iops, r.iombps, r.iops_throttle_exempt, r.iombps_throttle_exempt, r.avg_io_throttle FROM v$rsrcpdbmetric_history r, cdb_pdbs p WHERE r.con_id = p.con_id AND p.pdb_name = ‘PDB1‘ ORDER BY r.begin_time;
-- PDB1的所有AWR快照的信息
SQL>SELECT r.snap_id, r.con_id, p.pdb_name, r.begin_time, r.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 AND p.pdb_name = ‘PDB1‘ ORDER BY r.begin_time;