用友网络股份有限公司-支持服务事业部技术案例--《oracle12c之resultcache:rclatch引发的数据库整体效率问题》建立日期:2018-12-05文档属性:对内/客户文档创建:王安宁1/8文档控制创建记录适用范围审阅人日期审阅签字所属部门发布范围发布人姓名所属部门发布时间2/8日期作者所属部门邮件地址版本2018-12-05王安宁技术支持部wangann@yonyou.com版本领域备注内部员工伙伴客户目录一、系统环境.................................................................................................4二、问题概况.................................................................................................4三、问题原因分析.........................................................................................5四、问题解决步骤.........................................................................................7五、附录.........................................................................................................8六、结果验证.................................................................................................8七、注意事项.................................................................................................83/8一、系统环境NC版本NC65数据库环境ORACLE11gR2数据库节点数1操作系统RedHat6.8二、问题概况xx集团数据库正式环境数据库升级到12.1.2.0的RAC之后,NC应用整体执行效率低下。通过NMC观察到有大量如下sql在执行:同时,检查数据库上午9:00-10:00业务高峰期的awr报告时,发现如下等待事件:4/8三、问题原因分析Oracle12.1的库在业务高峰期非常慢,分析AWR发现latchfree导致,具体定位为:ResultCache:RCLatch事件引起数据库缓慢。具体分析过程如下:1、通过如上的nmc以及awr报告中的等待事件分析,引起系统运行缓慢的主要原因,是由于latchfree等待事件引起的。2、通过进一步确认,执行以下的sql语句,我们查看当时数据库的等待,争用的情况,发现确实为这部分sql语句:3、从event能够看到,是latch的争用导致:4、通过上一步查到的sql,查到如下的latch:5/85、查看latch的历史情况如下查询结果,ResultCache:RcLatch等待事件较为显著:6、查看oraclemos文档(DocID2102106.1、DocID2002089.1)Thecauseofthisissueisautomaticdynamicstatisticswhichisenabledbydefaultin12cautomaticallydecideswhetherdynamicstatisticsareusefulandwhichstatisticsleveltouseforallSQLstatements.Itcollectsdynamicstatisticswhentheoptimizerdeemsitnecessary.WhenAutomaticDynamicSamplingisusedfortheSQLstatements,itcandecide,baseduponthesestatistics,thatabetterresponsetimecouldbeachievedbyusingtheresultcacheforthosequeries.Thiscancauseheavyusageoftheresultcacheleadingtothecontentiononlatchfreefor“ResultCache:RCLatch”.6/8也就是说,12c在自动采样有改进,而且默认使用resultcache特性,从而引起该问题,即使你设置了RESULT_CACHE_MODE=MANUAL,依旧会有大量动态采样引起ResultCache:RCLatch,彻底解决给问题就是通过隐含参数禁止AutomaticDynamicStatistics使用resultcache。同时,关闭oracle自动统计信息收集任务。四、问题解决步骤1、2个节点分别备份参数文件sqlplus/assysdbacreatepfile='/tmp/pfile_bak.ora'fromspfile;2、关闭oracle数据库动态采样,在其中一个节点执行(静态参数,即时生效)altersystemset"_optimizer_ads_use_result_cache"=FALSEscope=bothsid='*';3、关闭oracle自动统计信息收集任务BEGINDBMS_AUTO_TASK_ADMIN.disable(client_name=>'autooptimizerstatscollection',operation=>NULL,window_name=>NULL);END;/4、修改数据库sga_相关参数,在其中一个节点执行altersystemsetsga_max_size=40gscope=spfilesid='*';altersystemsetsga_target=40gscope=spfilesid='*';altersystemsetdb_cache_size=20gscope=spfilesid='*';altersystemsetshared_pool_size=15gscope=spfilesid='*';altersystemsetlarge_pool_size=1gscope=spfilesid='*';altersystemsetjava_pool_size=1gscope=spfilesid='*';7/85、停应用服务6、root用户,重启rac,使参数修改生效cd$GRID_HOME/bin./crsctlstopcluster-all./crsctlstartcluster-all./crsctlstatusresource-t6、检查参数修改是否生效showparameter"_optimizer_ads_use_result_cache"showparametersga_max_sizeshowparametersga_targetshowparameterdb_cache_sizeshowparametershared_pool_sizeshowparameterjava_pool_sizeshowparameterlarge_pool_size7、起应用服务,进行验证五、附录参考oraclemos文档:DocID2102106.1、DocID2002089.1六、结果验证业务人员,验证前台功能响应时间恢复正常。七、注意事项无。8/8