
2.4.2 优化设置让RAC数据库高效运行
下面提供一些方法、提示和技巧,来更优化地配置Exadata和RAC,让数据库更高效运行。将Oracle数据库和模式(schema)中相似的问题分类分组,以相同主题的形式来讨论。
●当前版本
确保Exadata一体机软件的当前使用版本,跟Oracle最新发布的版本和补丁集保持一致。对Exadata/RAC安全或稳定性存在威胁的潜在bug,在最新的补丁、补丁集和版本中都会被解决掉。
Oracle技术支持文档(ID 888828.1)中包含了Exadata所有层面:数据库、存储器、网络等的版本和补丁的完整列表。
●ORAchk和Exachk
应定期运行Exachk(Oracle公司推荐的健康检查工具),检查你所有的Exadata一体机的健康状况。Exachk可以从Oracle技术支持文档(ID 1070954.1)上去下载。ORAchk(技术支持文档(ID 1268927.2))是Oracle公司提供的一个全新健康检查工具,其中包含了Exachk要做的检查内容,建议定期运行,主动去发现问题,当然也可以在问题发生后运行,以便做出一个整体的问题诊断方案。关于ORAchk,在本章后续部分会有更详细的说明。
●有效的资源管理
在数据库计算层和存储层配置和使用Oracle的资源管理器,有效地管理各种资源、平衡各种资源、调校各种资源,这对Exadata维护来说是很重要的。在这一块,主要涉及两项技术,分别是Oracle DBRM(Database Resource Manager,Oracle数据库资源管理器)和IORM(I/O Resource Manager,资源管理器)。
资源管理技术将数据库用户使用的系统资源分组管理并加以限制,这样能更高效地管理系统资源。使用资源管理技术,可防止Oracle应用程序、查询和用户访问因为占用了过多的系统资源,导致整个系统范围的故障。
●CPU和内存管理
有足够数量的CPU和内存,并对它们加以资源限制,是在Exadata上搭建RAC集群数据库的一种合理的、久经时间考验的策略。这种策略可确保应用程序的工作负载处于一个可控的稳定状态,防止在RAC环境里出现类似节点驱逐和裂脑(splite-brain)这样的致命问题出现。
实例囚笼(instance caging)是一种由CPU_COUNT参数实现的机制,限制Oracle RAC数据库使用CPU的数量。从另一个角度来说,设置不正确的CPU_COUNT或者实际可用的个数少于参数设置,会导致数据库出现RESMGR:CPU类型的等待事件。要确保给予Oracle RAC数据库实例足够的CPU数量,尽量避免出现这类等待事件。
在多租户的RAC环境中对内存消耗设置了限制时,应当开启和配置AMM(Automatic Memory Management,自动内存管理功能),确保RAC数据库实例能充分利用内存。
在Linux环境下,AMM与Hugepages不兼容,在使用AMM时一定要考虑到这个问题。也就是说,在Exadata环境下,建议使用ASMM(Automatic Shared Memory Management,自动共享内存管理)来替代AMM。下面列出两篇这方面的文章供读者进一步了解这个话题的更详细内容,文章来源于Oracle技术支持网站(MOS):
●ID 749851.1:《HugePages and Oracle Database 11g Automatic Memory Management(AMM)on Linux》
●ID 1134002.1:《ASMM versus AMM and Linux x86-64 HugePages Support》
●杀毒软件
杀毒软件不能运行在RAC/Exadata节点上,它对Oracle RAC进程的内部运行会造成致命影响,最终导致节点驱逐。
●第三方监控工具和脚本
尽量不要安装第三方监控工具和脚本,这些内容有干扰Exadata或RAC内部运行机制的潜在机会和可能性。Oracle禁止把这些工具安装在存储节点上。
●调优RAC参数
在Exadata上配置RAC初始化参数文件init.ora里的参数时要特别谨慎。例如,为IMS_PROCESSES参数分配过大的值会消耗过多的CPU,进而导致集群变得不稳定。请参阅Oracle技术支持文档《Auto-Adjustment of LMS Process Priority in Oracle RAC with v11.2.0.3 and Later》(ID 1392248.1)。
●分区和并行
接下来要介绍的是在RAC和Exadata集群环境中,采用分而治之的方法来实现极致性能,在这方面分区和并行缺一不可。
在Oracle里开启自动并行功能(多线程)来执行,一个极好而又省事的方法是设置ADP(Automatic Degree of Parallelism,自动并行度),将PARALLEL_DEGREE_POLICY设置为AUTO即可。
这是Oracle 11gR2中才发布的一个功能强大的特性。然而,要注意的是必须正确地使用这一特性,用最优化的方式配置parallel_相关参数,才能确保它们不会对系统整体性能产生负面影响。例如,将参数PARALLEL_MAX_SERVERS设置为很高的值,有可能耗光系统内存,导致节点反应迟钝,最终被逐出群集。它们通常与资源管理器一起使用,这样可以避免会话过度启用并行子进程。
在RAC环境或Exadata环境里,对大型数据对象做分区从而达到必需的性能是极为重要的。分区和并行经常互为补充,可以减少系统整体的CPU和内存消耗,实现最佳性能,并确保系统稳定运行。