zoukankan      html  css  js  c++  java
  • oracle12c之一 控制-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的值。
       这两个参数只作用于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_EXEMPTIOMBPS_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;">





  • 相关阅读:
    循环事件绑定和原型的应用
    小知识随手记(四)
    JavaScript数组与字符串常用方法总结
    jquery获得select option的值和对select option的操作
    前端图片上传前预览
    CSS 的优先级机制总结
    汇编语言学习笔记(8)——数据处理的基本问题
    SPOJ 1811LCS Longest Common Substring
    mysql 安装完毕后登陆不了mysql的 shell 即mysql&gt;遇到:ERROR 1045 (28000): Access denied for user 'root'@'localhost‘
    [LeetCode]Power of Two
  • 原文地址:https://www.cnblogs.com/cqdba/p/827ab08a8ff3dcab7f8dea41b8e410b4.html
Copyright © 2011-2022 走看看