暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

故障处理之数据库节点实例异常重启

IT那活儿 2022-10-24
511

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!


故障现象

数据库节点3因大量高并发insert语句导致sql积压,从而短时间内消耗大量主机资源,对数据库性能产生了很大影响,严重影响数据库的正常运行,导致节点3数据库发生重启。

故障分析

2.1 20点28分左右,收到节点3大量sql积压短信告警,积压SQL主要为:9yy1zhgjvfbpj.

节点3:

2.2 登陆环境核查数据库实例状态及实例启动时间,20点36分确认数据库实例状态正常,且实例没有重启。当即对异常等待事件的sql进行查杀,但是由于应用还在不停的发起连接,在20点45分时节点3发生重启。

2.3 查看主机日志,并确认无异常报错信息。

节点3主机日志:

2.4 通过检查数据库运行状况时发现节点3上有大量sql积压的等待事件。

对应等待事件主要为:
  • enq:us-contention,rowcache local行缓存锁;

  • enq: IV - contention队列等待之询问IV。

附:

  • enq:us-contention

    这个等待事件有许多脱机撤消段,并且工作负载在短时间内开始联机许多撤消段。当使用具有自动调整的撤销保留期的系统管理撤销时,这可能会导致在DC_ROLLBACK_SEGMENTS上出现高“闩锁:行缓存对象”争用,同时出现高“enq:US-争用”等待。
  • rowcache local

    该是一个共享池相关的等待事件。是由于对于字典缓冲的访问造成的。每一个行缓冲队列锁都对应一个特定的数据字典对象,这被叫做队列锁类型,并可以在V$ROWCACHE视图中找到。在AWR中需要查看DictionaryCache Stats部分用以确定问题。
  • enq:IV - contention

    物化视图(mview)有两部分:

    1)保存数据的表;

    2)摘要对象。

    当提交mview基表上的DML时,summary对象将失效。这是必要的,因为mview可能需要用于查询重写。失效采用IV排队,直到summary对象在所有节点上失效为止。如果存在大量摘要无效,则会导致此排队上的争用。

2.5 通过核查节点3上sql积压等待事件对应的会话信息,定位到积压sql对应的sql_id,查到其sql文本就是一个insert语句。

节点3:

2.6 故障时间段节点3redo变化分析。

故障时间段每秒产生的redo量相比正常时间段增长了约180%。

故障时间段每秒产生redo量:

正常时间段每秒产生redo量:

2.7 查看会话变化情况发现从20点15分开始数据库会话开始突增。

2.8 通过分析故障时间段哪些SQL占用了资源,发现其中sql_id为9yy1zhgjvfbpj的语句占用了数据库48.24%的DBTIME。并最终于20:45分CPU资源耗尽导致实例重启。

9yy1zhgjvfbpj语句执行频次突增截图如下所示,11月2日故障时间段该sql执行频次上下浮动较大,而本次故障时间段该sql每分钟的执行频次持续保持在四千+,最高峰甚至达到1万+.

结论:sql_id为9yy1zhgjvfbpj的语句因高并发且频次突增,引发数据库序列及undo争用,消耗了大量的数据库资源,数据库主机最终CPU资源耗尽导致实例重启。

建议如下:
  • 建议一:应用连接降低并发,并查询到该SQL是单次commit,建议修改成批量提交。

  • 建议二:先将高并发insert写入内存库,然后在批量同步至核心库。

文章首发于2021年2月6日


本文作者:魏 斌(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论