资讯专栏INFORMATION COLUMN

故障处理之数据库hang分析

IT那活儿 / 704人阅读
故障处理之数据库hang分析

大家好!最近遇到一起数据库hang的故障,将其处理思路分享下。


环境:

操作系统:AIX

数据库版本:12.2

是否RAC:是


分析过程请容我一一道来:

某日,同事反馈数据库节点2有很多cursor:pin S wait on X异常等待事件,与此同时librarycache lock也伴随出现,不过librarycache lock不是一直都存在,查询异常等待事件偶尔出现。这个时候会话开始出现积压,应用反馈应用异常。


登录数据库主机发现节点1正常、节点2一堆的cursor:pin S wait onX,甚至于登录到数据库都很慢,赶紧做了hanganalyze,做完快照之后,开始kill异常等待事件相关的会话进程,但是数据库依旧一大堆cursor等待事件。此时内存接近于耗尽,数据库已处于hang的状态,为了尽快恢复业务,当即对节点2实例进行了重启,重启后恢复正常。

后面同事反映这库节点2之前相同时段出现过很多cursor:pin S wait on X异常等待的情况,过会自动恢复正常了,没有和今天这样数据库hang,当时查到是由于SQL频次突增导致。


1、接下来开始对故障进行分析,我们首先查看hanganalyze日志如下:

发现都是在等待rowcache lock。


2、继续查看堵塞链


Chain1:

从上图我们可以看到Chain1,堵塞源是节点2,SID:1215的会话,此时它堵塞了195个会话,其正在等待cacheid:0X10的ROWCACHE。


Chain2:

接下来分析Chain2,堵塞源是节点2,SID:2419的会话,此时它堵塞了3个会话,其正在等待cacheid:0X10的ROWCACHE。


Chain3:

继续分析Chain3,堵塞源是节点2,SID:6642的会话,此时它堵塞了11个会话,其正在等待cacheid:0X10的ROWCACHE。


Chain4:


以上总结:

从以上的堵塞Chain我们可以看到堵塞源都在等待cacheid:0X10的ROWCACHE。其正在运行的SQL均为查询数据库基表或试图的SQL。并且我们竟然发现在故障时段数据库的自动收集统计信息的JOB在运行,JOB我们在上线之前就把其调用窗口调整到晚上10点开始,早上6点结束。至于为啥白天会调起,我们后面在另起一篇多带带聊聊这事。


3、我们在数据库查了下cacheid:0X10的数据字典缓存,详细如下:


我们从故障时段的AWR也可以看到中这2种ROWCACHE被访问的比较多。

一般对于RowCache Lock相关的等待,通常是由于过度的SQL执行解析和sharepool不足导致的。


4、继续分析AWR




从上图我们可以看到SQL运行大部分时间都花在解析上,sharedpool latches上的活动会话占比很高。


正常时段:


故障时段:

查看除了TOP1SQL解析次数在与平时正常相应时段进行比对发现解析次数并没有出现突增的情况。但是图中其他SQL其解析或执行次数都较平时增长不少。


这里就有个疑问了,为啥都是同样的频次突增,为啥之前一下就自动恢复了,这次就hang了呢?


综合以上情况初步确定,由于sharedpool空闲较少,然后应用SQL频次有增加,并且发现部分查询数据字典的SQL出现查询缓慢甚至查不出来的情况,会话积压导致内存不足,此时自动收集统计信息的JOB原本是晚上10点调起的,但是故障时段下午2点也开始调起,成为压死数据库的最后一根稻草。


解决方案:

收集了数据字典的统计信息,将部分查询数据字典的SQL绑定了最优执行计划。并进行了sharedpool的大小调整,在原来的基础上增加了SGA预留的2G,并部署了sharedpool剩余空间的监控,少于500M告警。并要求应用侧整改SQL突增的问题,从目前来看这些方式行之有效,到目前为止数据库再无发生过类似的故障。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130091.html

相关文章

  • 阿里云出现大规模故障 “多云”部署或成趋势

    摘要:昨天凌晨,阿里云出现大规模故障,导致部分互联网公司和运行不畅,甚至瘫痪。阿里云表示,针对此次故障,将根据协议,尽快处理赔偿事宜,但并未公开详细的赔偿细节。事实上,这并非阿里云首次出现故障。由此可见,阿里云此次宕机事件影响程度着实不小。昨天凌晨,阿里云出现大规模故障,导致部分互联网公司和App运行不畅,甚至瘫痪。一时之间,阿里云官微下几乎被反馈宕机问题的留言攻陷,有网友调侃称,程序员、运营和运...

    xiaodao 评论0 收藏0
  • ES6-Promise

    摘要:方法没有设置返回值。解决思路是,当遇到任务的返回值是一个或者,并且有自己的方法的时候,就将它当做是一个对象处理,等这个对象中的方法处理到的时候,把作为参数输出传递给后续的任务。 前段时间看到关于microTask的文章,《Tasks, microTasks, queues and schedules》,感觉有必要澄清一下。本篇里用setTimeout来实现的Promise,和浏览器原生...

    dackel 评论0 收藏0
  • RustCon Asia 讲师和议程公布!

    摘要:还有从欧洲飞来的不同国籍的讲师和长期在社区活跃贡献的开发者将与大家在北京相聚。将是一次亚洲社区的大聚会,也因为此次大会,亚洲本土的社区连接到了全球其它地区的社区。大会现场将有同传支持,所以不必担心语言障碍。 RustCon Asia 上线 CFP(Call For Proposals)接受议题提交的两周时间里,我们共计收到了中英文议题 50 份!内容非常丰富并且比我们预期的更加多元,在...

    MrZONT 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<