C/C++教程

故障处理之library cache lock及cursor pinS wait on X分析

本文主要是介绍故障处理之library cache lock及cursor pinS wait on X分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

最近某客户现场一套12C的RAC在一天内出现多次librarycache lock,cursor:pinSwait on X,enq:TX-rowlock contention异常等待事件,通过介入针对数据库会话进行kill后,数据库等待事件恢复正常。


详细分析过程如下:


一、通过查看故障时间点awr报告存在sql频繁解析失败,导致大量硬解析

节点2,15:00-16:00,awr报告sql解析和硬解析占用大量db_time

图片

节点2,18:00-19:00,awr报告sql解析和硬解析占用大量db_time

图片

节点2,22:00-22:53,awr报告sql解析和硬解析占用大量db_time

图片

故障时间点ash报告中存在未执行成功sql

图片


节点2,22:15-22:20存在未执行成功sql

图片



二、通过检查节点1,2都发生过sharepool抖动,另外从故障时间点(22:00-22:53)采集节点2的ADDM报告可以看出主要集中在SharedPool Latches的竞争。


节点1:share pool自动调整

图片


节点2:share pool自动调整

图片


另外从故障时间点(22:00-22:53)采集节点2的ADDM报告可以看出主要集中在Shared Pool Latches的竞争。

图片

图片


三、在故障发生过程中,发现系统存在自动任务调起的情况(自动统计信息收集,自动分段顾问),因为自动统计信息收集发起导致cursor失效,sql需要重新解析,这也是故障原因之一。


检查发现目前数据库已开启如下自动任务如下:


图片


图片

任务说明:

1、自动优化器统计收集:为所有方案对象收集陈旧的或缺少的统计数据,所收集的统计信息将被用来提高SQL的执行的性能,任务名是"autooptimizer stats collection"

2、自动分段顾问:标识数据库中的段是否有可以回收的空间,并以此信息统计为基础做出怎样整理段的碎片以节约空间。也可以手动的执行此job来获取最新的建议信息,或者获取自动段advisor 不检测的但又可以回收的段的信息,任务名是"auto space advisor"

3、自动SQL调整顾问:自动标识并尝试调整高负载的SQL,任务名是"sqltuning advisor"。

4、ORACLE_OCM用户主要是用于Oracle配置管理器,当发出SR请求时,它和数据库实例配置相联系,把配置信息发送给Oracle供分析。


通过检查故障时间点前后范围ash报告,在故障前22:05:00-22:15:00,(故障发生时间为22:16分),自动优化器统计收集和自动分段顾问都自动调度起来。

图片

图片




数据库在开启10035后发现后台有未执行成功的SQL。


启用10035事件

Altersystem set events '10035 trace name context forever,level 1';


关闭10035事件

Altersystem set events '10035 trace name context off';


注:

开启10035事件抓取解析失败sql不能作为日常项来开展,此类sql均是因为sql语法错误,访问对象不存在或字段缺失等原因导致,

应用应该上线前应该做好评审把控,做好功能测试(这类报错往往功能测试都是通不过的),将此类问题sql控制在源头,扎好上线的口袋;


长期开启10035事件有以下两点不利因素:

1、数据库开启10035并不是一种日常维护手段。

2、10035事件会将解析失败的语句信息写入数据库alert,易造成错误信息刷屏,增加了数据库目录撑爆的风险,以及日常巡检维护难度。


总结:

首先是应用发起的SQL解析失败及硬解析导致cursor。然后统计信息收集导致部分cursor失效,从而加重了SQL解析压力。sharedpool本来剩余空间就有点不足了,所以压力一来就会grow,但是在dbcache空间不能及时释放出来的,sharedpool grow失败的情况下,更加加重了sharedpool闩锁的竞争。


建议如下:
1、协助应用整改未执行成功sql。

2、目前数据库两个节点sharepool频繁调整,将sharepool size 从10G调整至15G。

alter system set shared_pool_size=15G scope=spfile;

3、关闭autospace advisor,sqltuningadvisor(已关闭理赔库该参数)和oracle_ocm相关job及调整autooptimizerstats collection调度时间。


这篇关于故障处理之library cache lock及cursor pinS wait on X分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!