在以前的版本中,没有简单的方法来控制单个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的值。
   这两个参数只作用于PDB,不对CDB和非多租户环境生效。另外,这两个参数不限制redo log的写入(LGWR进程)和buffercache脏块写入磁盘(DBWR进程)。

一些需要注意的地方:
  ·参数是独立的。 您可以使用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';
 
 
 
 
 
6
6
 
 
 
1
SQL>SET LINESIZE 180
2
SQL>COLUMN pdb_name FORMAT A10
3
SQL>COLUMN begin_time FORMAT A26
4
SQL>COLUMN end_time FORMAT A26
5
SQL>ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS';
6
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;
 
 
 
 
 
13
13
 
 
 
1
SQL>SELECT r.con_id,
2
       p.pdb_name,
3
       r.begin_time,
4
       r.end_time,
5
       r.iops,
6
       r.iombps,
7
       r.iops_throttle_exempt,
8
       r.iombps_throttle_exempt,
9
       r.avg_io_throttle
10
FROM v$rsrcpdbmetric r,
11
       cdb_pdbs p
12
WHERE r.con_id = p.con_id
13
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;​
 
 
 
 
 
14
14
 
 
 
1
SQL>SELECT r.con_id,
2
       p.pdb_name,
3
       r.begin_time,
4
       r.end_time,
5
       r.iops,
6
       r.iombps,
7
       r.iops_throttle_exempt,
8
       r.iombps_throttle_exempt,
9
       r.avg_io_throttle
10
FROM v$rsrcpdbmetric_history r,
11
       cdb_pdbs p
12
WHERE r.con_id = p.con_id
13
AND p.pdb_name = 'PDB1'
14
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;
 
 
 
 
 
 
 
 
 
 
 
1
SQL>SELECT r.snap_id,
2
       r.con_id,
3
       p.pdb_name,
4
       r.begin_time,
5
       r.end_time,
6
       r.iops,
7
       r.iombps,
8
       r.iops_throttle_exempt,
9
       r.iombps_throttle_exempt,
10
       r.avg_io_throttle
11
FROM dba_hist_rsrc_pdb_metric r,
12
       cdb_pdbs p
13
WHERE r.con_id = p.con_id
14
AND p.pdb_name = 'PDB1'
15
ORDER BY r.begin_time;
 
 
可以使用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;
 
 
 
 
 
17
17
 
 
 
1
set linesize 400
2
col PDB_NAME for a10
3
col BEGIN_TIME for a30
4
col END_TIME for a30
5
SELECTR.SNAP_ID,
6
   R.CON_ID,
7
   P.PDB_NAME,
8
   TO_CHAR(R.BEGIN_TIME, 'YYYY-MM-DHH24:MI') AS BEGIN_TIME,
9
   TO_CHAR(END_TIME, 'YYYY-MM-D HH24:MI')AS END_TIME,
10
   R.IOPS,
11
   R.IOMBPS,
12
   R.IOPS_THROTTLE_EXEMPT,
13
   R.IOMBPS_THROTTLE_EXEMPT,
14
   R.AVG_IO_THROTTLE
15
FROM DBA_HIST_RSRC_PDB_METRIC R, CDB_PDBS P
16
WHERE R.CON_ID = P.CON_ID
17
ORDER BY R.BEGIN_TIME;      
 
 
当数据库中出现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;
 
 
 
 
 
x
 
 
 
1
SELECT H.EVENT,
2
  H.P1 AS PDB_ID,
3
  C.PDB_NAME,
4
  H.SQL_ID,
5
  TO_CHAR(H.SAMPLE_TIME, 'YYYY-MM-D HH24:MI') AS SAMPLE_TIME,
6
  H.INSTANCE_NUMBER
7
FROMDBA_HIST_ACTIVE_SESS_HISTORY H
8
JOINCDB_PDBS C
9
ONC.PDB_ID = H.P1
10
ANDH.EVENT = 'resmgr: I/O rate limit'
11
ORDER BY 4;
 
 
12

 
 
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

oracle12c之一 控制-PDB的磁盘I/O(IOPS,MBPS)资源管理的更多相关文章

  1. oracle12c之 控制pdb中sga 与 pga 内存使用

    Memory Management using Resource Manager Oracle数据库资源管理器(资源管理器)现在可以在多租户容器数据库(CDB)中管理可插入数据库(PDBs)之间的内存 ...

  2. oracle12c之三 控制PDB中CPU 资源使用

      CPU资源隔离 数据库中,不同的PDB对主机CPU资源使用要求不同,那么我们就可以使用CDB resourceplans来管理不同pdb对CPU资源的使用. CDB Resource Plans ...

  3. oracle12c之四 控制PDB操作 PDBLockdown Profiles

    除了IO.内存.CPU之外,还有一些限制,比如:限制在pdb中的操作命令,我们可以创建一个lockdown profile来限制对当前PDB的操作,增强某些操作的安全性.   关于PDB Lockdo ...

  4. oracle12c之二 控制PDB中SGA 与 PGA 内存使用

    oracle12c之 控制pdb中sga 与 pga 内存使用 Memory Management using Resource Manager Oracle数据库资源管理器(资源管理器)现在可以在多 ...

  5. 磁盘性能评价指标—IOPS和吞吐量

    转:http://blog.csdn.net/hanchengxi/article/details/19089589 一.磁盘 I/O 的概念 I/O 的概念,从字义来理解就是输入输出.操作系统从上层 ...

  6. Oracle12c CDB和PDB数据库的启动与关闭说明

    Oracle 12c中,增加了可插接数据库的概念,即PDB,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB). CDB全称为Container Database,中文翻译为数据库容器,PDB ...

  7. Oracle12C如何启动PDB数据库

     在启动PDB类型的数据库之前需要用管理员账号[即:sys 或者system管理员账户登录进去CDB数据库,以下命令是在PLSQL登录进去CDB数据库的dos命令行执行的] alter pluggab ...

  8. 使用Oracle12c 以上的PDB创建数据库用户 密码过期的简单处理

    1. 先通过监听查看PDB的名字 Windows 打开命令行: 输入命令 lsnrctl status 一般在如图示的最下面 2. 也可以通过GS的全局配置文件来查看 数据库连接SID信息. C:\P ...

  9. Oracle12c中配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB)

    Oracle12c中的多宿主选项允许一个容器数据库(CDB)容纳多个独立的可插拔数据库(PDB).本文将展示如何配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB).1. 配置CDB中的实例 ...

随机推荐

  1. [GO]使用go语言实现比特币的工作量证明

    之前的博文已经实现了区块连的基本的工作原理,但在比特币系统中有一个很重要的概念:工作量证明POW,在比特币系统中它的作用就是在十分钟左右的时间内只有一个有能够记帐并得到奖励 在之前的博文中,区块的哈希 ...

  2. 设计模式15:Interpreter 解释器模式(行为型模式)

    Interpreter 解释器模式(行为型模式) 动机(Motivation) 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变 ...

  3. 深入理解java虚拟机(二)HotSpot Java对象创建,内存布局以及访问方式

    内存中对象的创建.对象的结构以及访问方式. 一.对象的创建 在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢? (一)判断类是否加载.虚拟机遇到一条new指令的 ...

  4. Java内存模型(转载)

    本文章节: 1.JMM简介 2.堆和栈 3.本机内存 4.防止内存泄漏 1.JMM简介 i.内存模型概述 Java平台自动集成了线程以及多处理器技术,这种集成程度比Java以前诞生的计算机语言要厉害很 ...

  5. Delphi 按Esc快捷键退出程序的简单方法

     第一种方法: 在窗体上放一个按钮: 1>.设置按钮的Cancel属性为True: 2>.在按钮的点击事件中写: procedure TForm1.btn1Click(Sender: TO ...

  6. [Postgres]合并多行到一列(转)

    转自http://csk83.sinaapp.com/?p=104 在实际应用中常常遇见这样的情况,见下表,我们现在需要统计出来每年每个人的工资总和以及发放月份. user_name year mon ...

  7. [LeetCode 题解]:Best Time to Buy and Sell Stock

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Say you ha ...

  8. asp.net——地址栏传递中文参数乱码解决方案

    地址栏传递中文参数乱码解决方案: 很多人在使用地址栏传递参数的时候都会遇到一个麻烦的问题(参数为中文时乱码了),那要怎么解决呢? 其实解决这个问题也不怎么难,无非就是给要传递的中文参数一个编码解码的过 ...

  9. BitArray简单例子

    using System; using System.Collections; using System.Text; namespace TestConsole { class Program { s ...

  10. 基于ZKEACMS的.Net Core多租户CMS建站系统

    多租户架构 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下共用相同的系统或程序组件,并且可确保各用户间数据的隔离性.简单讲:在一台服务器上运行单个应用实例,它为 ...