暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 12cR2如何限制pdb IO使用情况

Oracle蓝莲花 2021-04-15
769

👋 亲爱的读者,结尾有彩蛋哦






 600团队






引言

    今天聊一个Oracle 12cR2新特性,如何限制单个pdb可插拔数据库磁盘io使用情况,开门见山,今天的主角是两个参数,我们可以设置MAX_IOPS初始化参数和MAX_MBPS初始化参数来限制PDB生成的磁盘I/O,大量磁盘I/O会导致性能低下。有几个因素可能导致磁盘I/O过多,例如在dss olap大事物级别的数据库环境中设计不良的SQL或索引和全表扫描。如果一个PDB生成大量磁盘I/O,那么它会降低同一CDB中其他PDBs的性能。

👀

如何限定pdb的i/o

600团队

    我们可以使用以下初始化参数来限制特定PDB生成的I/O,如果我们为单个PDB设置了两个初始化参数,那么这两个限制都是强制。

      👐MAX_IOPS初始化参数限制每秒I/O操作的数量。

      👐MAX_MBPS初始化参数限制每秒I/O操作的兆字节数。

👊

参数调整注意事项

600团队

🔘如果将这些初始化参数设置到CDB作为当前容器,那么这些值将成为CDB中所有容器的默认值。如果将它们设置为应用程序端作为当前容器,那么这些值将成为应用程序容器中所有应用程序PDBs的默认值。当使用PDB或应用程序PDB作为当前容器进行设置时,这些设置优先于CDB或应用程序中的默认设置。这些参数不能在非cdb中设置。

🔘这两个初始化参数的默认值都是0(0)。如果在PDB中将这些初始化参数设置为0(0),并且将CDB设置为0,那么PDB没有I/O限制。如果在应用程序PDB中将这些初始化参数设置为0(0),并且将其应用程序设置为0,则应用程序PDB没有I/O限制。

🔘关键的I/O操作(如控制文件和密码文件的操作)不受此限制,即使达到该限制也会继续运行。然而,所有I/O操作,包括关键的I/O操作,都是在计算I/O操作的数量和兆字节时计算的。

🔘我们可以使用DBA_HIST_RSRC_PDB_METRIC视图计算PDB的合理I/O限制。在计算限制时,建议考虑关键字段信息,如::IOPS, IOMBPS, IOPS_THROTTLE_EXEMPT, 以及IOMBPS_THROTTLE_EXEMPT

🔘对于参数本身是相对独立的,设置期间可以选择none both one等均可。

🔘这两个参数不限制redo log的写入和buffercache脏块写入磁盘。

🔘在不同的级别设置这两个参数会产生不同的效果:

     🔹1. 如果只在CDB root里设置这两个参数,那么设置的值就会在所有的PDB中生效。

     🔹2. 如果只在application root(这是12.2中的新特性)中设置了这两个参数,那么设置的值就会在所有的application PDB中生效。

    🔹3. 如果在CDB root或者PDB level中都设置了这两个参数,那么PDB level设置的值会有更高的优先级。

     🔹4. 这两个参数的默认值都是0,也就是默认不限制IO产生的数量。

👇

等待事件说明

600团队

      💫当我们尝试在resource manager进行Throttling操作,会产生一个新的等待事件:resmgr: I/Orate limit,当会话正在等待I/O带宽可用来发布I/Os。当通过设置MAX_IOPS/MAX_MBPS参数启用PDB I/O速率限制时,将发生此事件。为了减少这种等待事件的发生,需要增加PDB I/O速率极限值。这可以通过增加MAX_IOPSMAX_MBPS的值来实现,或者通过将参数值设置为0来完全消除这些限制,简单点说,其实就是会话在等待i/o带宽实际可用时间。该等待事件只有一个P1参数对pdb_id

      💫发生该等待事件可以通过如下脚本定位

😙

具体参数设置方式方法

600团队

下面的示例在CDB级别设置MAX_IOPSMAX_MBPS参数,这是所有PDBs的默认值。

      💛缺省设置:

      💛取消缺省的参数设置:

下面的示例在PDB级别设置MAXIOPSMAXMBPS参数。

      💛设置PDB-specific值:

      💛取消设置,和cdb相同:

 600团队 💞


💞 实战操作


具体操作流程

验证pdb可插拔数据库信息

✨对pdboracle限制每秒钟只可以做5次IO

✨创建一个新用户,并且登录到pdboracle上并创建一个大表来产生大量磁盘IO


注意:这里pdboracle可插拔数据库会被夯住

✨新开一个窗口连入到cdb容器数据库

✨可以看到那个session正在等待resmgr: I/Orate limit,这就说明了对PDB的IO限制成功生效了。

如何监控pdb可插拔数据库i/o使用情况

监控pdb可插拔数据库,DBA擅长领域直捣黄龙自然是数据字典,那么我们为大家分享几个比较有用的数据字典

    💕 V$RSRCPDBMETRIC显示关于每个用户组对PDB的资源消耗和等待时间的信息,当STATISTICS_LEVEL设置为TYPICAL或ALL时,这个视图包含关于CPU利用率和等待时间的信息,即使没有设置资源管理器计划,或者资源管理器计划没有监视CPU或会话资源。在不监视CPU利用率的情况下,每分钟都会收集和存储指标,该数据字典详细指标说明,还是麻烦各位去oracle官网查一下,文章内容不做赘述。以下为一些常用的脚本信息:


🌟PDBORACLE的所有AWR快照信息查询:

🌟验证pdboraclecpu使用情况以及具体等待信息:

🌟验证pdboracle的I/O情况:

🌟验证pdboracle的并行情况:

🌟验证pdboracle的内存情况:

💛 v$ RSRCPDBMETRIC_HISTORY显示从v$ RSRCPDBMETRIC获取的PDB的资源管理器指标的历史(最后一个小时)。设置资源计划后,将清除并重新启动此历史记录。此视图提供关于每个使用者组消耗的资源和等待时间的信息。

💙 DBA_HIST_RSRC_PDB_METRIC按PDB显示关于过去一小时的历史资源管理器指标的信息,刚才在定位resmgr: I/Orate limit等待事件期间对这个数据字典使用过。

总结

对于12cR2的新特性,可以实现在可插拔pdb上做到io资源隔离,从而避免pdb产生大量io造成的cdb容器数据库和其他可插拔数据库性能隐患,非常感谢大家对600公众号文章一如既往支持。


各部门注意!

下面有请

600广告组

    🔥 🔥 🔥  3月中旬开始,600团队开启线上免费公开课,届时请关注600公众号,我们会在公众号注明具体公开课程下载地址,课程完全免费

💓 主题包括但不限于如下

1、结合作者在国网和石化以及五矿做开发DBA实体开发案例和群内其他成员案例;

2、如何编写高效的SQL语句,以及PLSQL代码;

3、如何分析awr报告,包括定位问题,诊断问题,如何看懂hanganalyze systemstate errorstack oradebug工具使用等等。

    😍 同时如果公开课反响不错,后期我们也会开放备份恢复,数据库性能优化和sql优化包括工作原理解析等实际生产环境遇到的案例。后期mysql和postgresql包括voltdb geode greenplum以及hadoop如果大家感兴趣,我们都可以在公开课内容体现,暂时以oracle为主,谢谢大家。


暖风微醺,我在等你。

识别二维码,关注600

轻风与君语

   最终解释权归600团队所有

文章转载自Oracle蓝莲花,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论