编辑手记:在现实的生产环境中,DBA可能遭遇到各种各样的异常,或简单、或复杂,但是无一不考验DBA的经验和能力,在『实战课堂』栏目中,我们将整理和分享来自云和恩墨一线的各种案例,以其帮助走在DBA道路上的朋友,积累经验,扩展知识。

案情描述:

  1. 11点20分,DBA接到CPU告警短信,业务数据库2节点CPU使用率达到100%;

  2. 11点22分,DBA登陆业务数据库进行核查,发现数据库两个节点CPU使用率达到100%,并且有library cache lock以及大量cursor: pin S wait on X异常等待事件,数据库执行查询缓慢并时常出现挂起的情况。应用人员反馈语句缓慢,事务有积压;

  3. 11点24分,DBA对业务数据库两个节点执行hang analyze信息收集。

注意,当我们遭遇到这种情况时,DBA 在处理中的通常过程就是:

首先通过 v$session 、v$session_wait、v$lock 去确定当前数据库的等待情况,锁信息等;

如果数据库能够响应,通过ASH报告,可以获取更直观的输出,看看阻塞的情况和情形,然后进行下一步的判断;

如果数据库失去响应,或者响应困难,则可以通过 Hang Analyze 进行信息采集,以便后续分析;

关于数据库挂起的诊断跟踪,参考我们之前的文章:DBA必备技能:数据库挂起时进行转储分析诊断案例。

案情继续:

  1. 11点30分,由于数据库严重挂起,进程积压严重,告知相关部门后,为了尽快恢复业务,重启数据库。

  2. 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%的故障分析处理知识和警示相关推荐

  1. 实战课堂:系统CPU高消耗的SQL筛选和最佳索引优化

    在一次客户系统性能优化项目中,经过第一阶段的优化之后,数据库的DB Time和物理读都明显降低,但是我们发现CPU并没有明显降低. 对此,我方针对占用CPU较高的SQL进行了分析,并继续寻找优化空间. ...

  2. 实战课堂:为什么更换存储之后一切正常但RAC集群启动不了?

    这是一次来自生产实践的真实案例,某客户核心生产库由于进行新老存储替换变更操作后,Oracle RAC 两个节点均无法打开,数据库遭遇严重故障. 先来看看告警日志中记录的错误信息,我们注意到数据库能够正 ...

  3. 75. CPU 100%运行实战案例分析

    75. CPU 100%运行实战案例分析 生产库问题现象: 1),每次tomcat启动后第8天左右就会出现CPU 100%运行的情况: 2),jmap -heap pid命令查看老年代已使用99%: ...

  4. 实战课堂:数据库高Library Cache Lock导致Hang的故障分析

    编辑手记:在现实的生产环境中,DBA可能遭遇到各种各样的异常,或简单.或复杂,但是无一不考验DBA的经验和能力,在『实战课堂』栏目中,我们将整理和分享来自云和恩墨一线的各种案例,以其帮助走在DBA道路 ...

  5. HashMap 为什么会导致 CPU 100%?文章看不懂?来看这个视频吧!——面试突击 006 期...

    无论是在实际工作中还是在面试中,HashMap 无疑是使用频率最高的知识点之一,所以我们需要搞懂每一个关于 HashMap 的知识点才行. 哈喽,大家好,我是老王,欢迎来到 Java 面试突击,我们今 ...

  6. 接口访问次数_系统运行缓慢,CPU 100%,Full GC次数过多,这一招帮你全搞定

    处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题.当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警.本文主要针对系统运行缓慢这 ...

  7. 不止JDK7的HashMap,JDK8的ConcurrentHashMap也会造成CPU 100%

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:朱小厮 公众号:朱小厮的博客(ID:hiddenkafka) ...

  8. 系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://h5ip.cn/uWWR 处理过线上问题的同学 ...

  9. HashMap 为什么会导致 CPU 100%?文章看不懂?

    来自:Java中文社群 无论是在实际工作中还是在面试中,HashMap 无疑是使用频率最高的知识点之一,所以我们需要搞懂每一个关于 HashMap 的知识点才行. 哈喽,大家好,我是老王,欢迎来到 J ...

最新文章

  1. AI独角兽第四范式冲刺港交所IPO!集齐国有五大行入股,刚获宁德时代制造大单...
  2. 日语python怎么说_python+Mecab,一次性学会日语分词
  3. WinUI 3 试玩报告
  4. 物联网中的无线通信模块到底是什么
  5. iOS 去除警告 看我就够了
  6. 制作Slider组件
  7. ios 内存管理的理解(一) 简述
  8. C语言经典回溯算法之解决数的组合问题(详解)
  9. OBS 录制的视频声音越来越大
  10. 基于 selenium 模拟登陆 12306 滑块问题 已解决
  11. 46家中外知名企业面试题目
  12. 三维重建(5)之三角测量计算双目相机坐标系下三维坐标
  13. 教师计算机西沃培训心得,学习使用希沃电子白板的心得体会
  14. 百度爱番番实时CDP建设实践
  15. 1月更新!EasyOps® 28+新功能“狂飙”上线~
  16. 华为nova10参数配置 华为nova10是5g手机吗
  17. 基于ESP32(Micropython)的天气显示+B站粉丝数显示-v4
  18. HEVC码率控制资料整理
  19. if条件句和switch条件句
  20. 怎么在微信里呼起手淘

热门文章

  1. 医疗项目 开源_医疗保健受开源影响最大的行业之一
  2. 大话 | 大话程序猿眼里最全的高并发,快收藏!
  3. 分布式锁 动态代理 Java数据结构List,Set,Map,Spring执行流程,Spring MVC组件
  4. centos5安装oracle11,CentOS 6.5 x64 安装 Oracle11g R2
  5. JAVA中的适配器应用_Java适配器模式详解和实际应用.md
  6. java.io.ioexception 拒绝访问,IOException异常 - 拒绝访问使用FileOutputStream中
  7. python职业发展方向_59秒看懂IT运维的发展方向及职业规划
  8. pymavlink 源码剖析(一)之XML文件的数据解析
  9. getchwd() 函数返回当前工作目录。
  10. OpenStack基础知识