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

暖
风
微
醺
与
君
语
春
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_IOPS和MAX_MBPS的值来实现,或者通过将参数值设置为0来完全消除这些限制,简单点说,其实就是会话在等待i/o带宽实际可用时间。该等待事件只有一个P1参数对pdb_id。
💫发生该等待事件可以通过如下脚本定位

😙 | 具体参数设置方式方法 |
600团队
下面的示例在CDB级别设置MAX_IOPS和MAX_MBPS参数,这是所有PDBs的默认值。
💛缺省设置:


💛取消缺省的参数设置:


下面的示例在PDB级别设置MAXIOPS和MAXMBPS参数。
💛设置PDB-specific值:


💛取消设置,和cdb相同:


600团队 💞
💞 实战操作

具体操作流程
✨验证pdb可插拔数据库信息

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

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

注意:这里pdboracle可插拔数据库会被夯住
✨新开一个窗口连入到cdb容器数据库

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

如何监控pdb可插拔数据库i/o使用情况
🌟PDBORACLE的所有AWR快照信息查询:

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

🌟验证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团队所有








