实战课堂:一则CPU 100%的故障分析处理知识和警示
编辑手记:在现实的生产环境中,DBA可能遭遇到各种各样的异常,或简单、或复杂,但是无一不考验DBA的经验和能力,在『实战课堂』栏目中,我们将整理和分享来自云和恩墨一线的各种案例,以其帮助走在DBA道路上的朋友,积累经验,扩展知识。
案情描述:
11点20分,DBA接到CPU告警短信,业务数据库2节点CPU使用率达到100%;
11点22分,DBA登陆业务数据库进行核查,发现数据库两个节点CPU使用率达到100%,并且有library cache lock以及大量cursor: pin S wait on X异常等待事件,数据库执行查询缓慢并时常出现挂起的情况。应用人员反馈语句缓慢,事务有积压;
11点24分,DBA对业务数据库两个节点执行hang analyze信息收集。
注意,当我们遭遇到这种情况时,DBA 在处理中的通常过程就是:
首先通过 v$session 、v$session_wait、v$lock 去确定当前数据库的等待情况,锁信息等;
如果数据库能够响应,通过ASH报告,可以获取更直观的输出,看看阻塞的情况和情形,然后进行下一步的判断;
如果数据库失去响应,或者响应困难,则可以通过 Hang Analyze 进行信息采集,以便后续分析;
关于数据库挂起的诊断跟踪,参考我们之前的文章:DBA必备技能:数据库挂起时进行转储分析诊断案例。
案情继续:
11点30分,由于数据库严重挂起,进程积压严重,告知相关部门后,为了尽快恢复业务,重启数据库。
11点35分,数据库重启完毕,CPU资源得到释放,应用恢复正常。
在实践中,有时候排查问题可能要遗留到事后,在当时为了尽快恢复业务,用户就采取了重启数据库的方式。
现在是DBA需要找出原因,防范后续问题的时间了。很多情况下,专业DBA是在这一阶段出场,需要找出Root Cause,并且给出防范解决方案。
首先通过ASH记录的信息,可以发现,从11月10日11点10分40秒左右,开始出现libaray cache lock以及cursor: pin S wait on X等待事件,这不一定意味着问题,正常解析也会出现:
从11点10分46秒开始,等待cursor: pin S wait on X等待事件的会话越来越多:
这些等待cursor: pin S wait on X的会话都被三个会话阻塞(实例1上sid为7530的会话,实例1上sid 11124的会话,实例1上sid为3802的会话)。
而上述三个会话等待事件为libarary cache lock, 同时被实例1上sid为13906的会话阻塞。
而实例1上sid为13906的会话是从portal_sso2主机上以UNIRECHARGE用户登陆门户库,并在11点10分38秒的时候,开始执行alter table的操作,但是语句一直没有执行完:
通过结合hang analzye收集到的信息分析:
该会话执行的alter table语句为:
alter table T_ZT_ORDER add history_record char(1) default ‘0’;
综合上述分析,造成数据库CPU高消耗的主要原因是由于开发人员,在生产高峰时段执行了DDL 语句:“Alter table T_ZT_ORDER add history_record char(1) default ‘0’”而引发的。
事实上,自从Oracle 11g开始,当我们在表上增加具有缺省值的新字段时,Oracle首先修改数据字典,并不会直接更新所有数据,以减少锁定。元数据的设置在 ecol$ 中:
insert into ecol$(tabobj#, colnum, binarydefval, guard_id) values (:1, :2, :3, :4)
update ecol$ set binaryDefVal = :3 where tabobj# = :1 and colnum = :2
关于这些内容,请参考以下文章:
空与非空 - 数据库中也有薛定谔的猫?
书接上文:薛定谔的猫是如何诞生的?
由于增加字段会导致表结构的变化,统计信息会被清除:
delete from tab_stats$ where obj#=:1
SQL 需要重新解析,就需要在表上获得 Library cache lock ,这个锁定无法获得,数据库产生阻塞。
在这个案例中,DDL操作在繁忙时段没有及时完成,阻塞了2139个会话,就导致了一次数据库事故。
那么如何防范问题呢?不以规矩,不成方圆,后续改进措施建议:
1). 建议开发人员按照操作规范,在进行DDL语句操作前进行相关备案,并且不要在繁忙时段在生产环境执行DDL操作;
2). 建议DBA加强对开发此类DDL操作进行监控。
这就是来自生产的一次故障处理和排查,通过这样的过程,我们能够看到,在生产环境中一次小的操作,就可能导致严重的生产故障,一个DDL都不应该草率执行。
多看多知,这就是实战课堂。
资源下载
关注公众号:数据和云(OraNews)回复关键字获取
2018DTCC , 数据库大会PPT
2017DTC,2017 DTC 大会 PPT
DBALIFE ,“DBA 的一天”海报
DBA04 ,DBA 手记4 电子书
122ARCH ,Oracle 12.2体系结构图
2017OOW ,Oracle OpenWorld 资料
PRELECTION ,大讲堂讲师课程资料
实战课堂:一则CPU 100%的故障分析处理知识和警示相关推荐
- 实战课堂:系统CPU高消耗的SQL筛选和最佳索引优化
在一次客户系统性能优化项目中,经过第一阶段的优化之后,数据库的DB Time和物理读都明显降低,但是我们发现CPU并没有明显降低. 对此,我方针对占用CPU较高的SQL进行了分析,并继续寻找优化空间. ...
- 实战课堂:为什么更换存储之后一切正常但RAC集群启动不了?
这是一次来自生产实践的真实案例,某客户核心生产库由于进行新老存储替换变更操作后,Oracle RAC 两个节点均无法打开,数据库遭遇严重故障. 先来看看告警日志中记录的错误信息,我们注意到数据库能够正 ...
- 75. CPU 100%运行实战案例分析
75. CPU 100%运行实战案例分析 生产库问题现象: 1),每次tomcat启动后第8天左右就会出现CPU 100%运行的情况: 2),jmap -heap pid命令查看老年代已使用99%: ...
- 实战课堂:数据库高Library Cache Lock导致Hang的故障分析
编辑手记:在现实的生产环境中,DBA可能遭遇到各种各样的异常,或简单.或复杂,但是无一不考验DBA的经验和能力,在『实战课堂』栏目中,我们将整理和分享来自云和恩墨一线的各种案例,以其帮助走在DBA道路 ...
- HashMap 为什么会导致 CPU 100%?文章看不懂?来看这个视频吧!——面试突击 006 期...
无论是在实际工作中还是在面试中,HashMap 无疑是使用频率最高的知识点之一,所以我们需要搞懂每一个关于 HashMap 的知识点才行. 哈喽,大家好,我是老王,欢迎来到 Java 面试突击,我们今 ...
- 接口访问次数_系统运行缓慢,CPU 100%,Full GC次数过多,这一招帮你全搞定
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题.当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警.本文主要针对系统运行缓慢这 ...
- 不止JDK7的HashMap,JDK8的ConcurrentHashMap也会造成CPU 100%
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:朱小厮 公众号:朱小厮的博客(ID:hiddenkafka) ...
- 系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://h5ip.cn/uWWR 处理过线上问题的同学 ...
- HashMap 为什么会导致 CPU 100%?文章看不懂?
来自:Java中文社群 无论是在实际工作中还是在面试中,HashMap 无疑是使用频率最高的知识点之一,所以我们需要搞懂每一个关于 HashMap 的知识点才行. 哈喽,大家好,我是老王,欢迎来到 J ...
最新文章
- AI独角兽第四范式冲刺港交所IPO!集齐国有五大行入股,刚获宁德时代制造大单...
- 日语python怎么说_python+Mecab,一次性学会日语分词
- WinUI 3 试玩报告
- 物联网中的无线通信模块到底是什么
- iOS 去除警告 看我就够了
- 制作Slider组件
- ios 内存管理的理解(一) 简述
- C语言经典回溯算法之解决数的组合问题(详解)
- OBS 录制的视频声音越来越大
- 基于 selenium 模拟登陆 12306 滑块问题 已解决
- 46家中外知名企业面试题目
- 三维重建(5)之三角测量计算双目相机坐标系下三维坐标
- 教师计算机西沃培训心得,学习使用希沃电子白板的心得体会
- 百度爱番番实时CDP建设实践
- 1月更新!EasyOps® 28+新功能“狂飙”上线~
- 华为nova10参数配置 华为nova10是5g手机吗
- 基于ESP32(Micropython)的天气显示+B站粉丝数显示-v4
- HEVC码率控制资料整理
- if条件句和switch条件句
- 怎么在微信里呼起手淘
热门文章
- 医疗项目 开源_医疗保健受开源影响最大的行业之一
- 大话 | 大话程序猿眼里最全的高并发,快收藏!
- 分布式锁 动态代理 Java数据结构List,Set,Map,Spring执行流程,Spring MVC组件
- centos5安装oracle11,CentOS 6.5 x64 安装 Oracle11g R2
- JAVA中的适配器应用_Java适配器模式详解和实际应用.md
- java.io.ioexception 拒绝访问,IOException异常 - 拒绝访问使用FileOutputStream中
- python职业发展方向_59秒看懂IT运维的发展方向及职业规划
- pymavlink 源码剖析(一)之XML文件的数据解析
- getchwd() 函数返回当前工作目录。
- OpenStack基础知识