最近某客户现场一套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调度时间。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/130061.html
Oracle数据库4031故障分析 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; m...
摘要:命令行方式获取显示当前的用户操作。类似于的可以监控所有慢的以及不慢的查询。以及其他第三方链接性能调优场景现实的首页我们希望现实最近发布的条。自动删除旧文档为了给新文档创建空间,在集合中自动删除老旧的文档,不需要执行额外的脚本和操作。 转载请注明出处 http://www.paraller.com 原文排版地址 http://www.paraller.com/2016/10/22/m...
摘要:清楚了以上流程,我们直接来看函数主要用作初始化应用监听端口以及启动。其中就是保存聊天室所有聊天消息的结构。关于的解读我会放到阅读源码时讲。然后把消息加到缓存里,如果缓存大于限制则取最新的条消息。 tornado 源码自带了丰富的 demo ,这篇文章主要分析 demo 中的聊天室应用: chatdemo 首先看 chatdemo 的目录结构: ├── chatdemo.py ├── ...
阅读 1347·2023-01-11 13:20
阅读 1685·2023-01-11 13:20
阅读 1133·2023-01-11 13:20
阅读 1860·2023-01-11 13:20
阅读 4101·2023-01-11 13:20
阅读 2705·2023-01-11 13:20
阅读 1386·2023-01-11 13:20
阅读 3598·2023-01-11 13:20